当前位置: 首页 > 知识库问答 >
问题:

用于目标定位的卷积神经网络

秦新立
2023-03-14

我在吴恩达的深度学习课程中看到了一种在图像上定位单个对象的方法:https://www.youtube.com/watch?v=GSwYGkTfOKk。据我所知,您可以将一个点绑定到对象的特定部分,将坐标:x,y作为标签y并训练CNN。

我想训练一个CNN神经网络来定位我的眼睛(而不是分类)。我拍了200张我的照片:灰度60x60像素。我标记左眼和右眼,标记眼的每个坐标被归一化为0-1。y标签为:[eye1的x,eye1的y,eye2的x,eye2的y]。我在输出层sigmoid函数中使用了带有mse损耗的SGD optimazer。

model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Conv2D(64, (3,3), input_shape= (60,60, 1)))
model.add(tf.keras.layers.Activation('relu'))
model.add(tf.keras.layers.MaxPool2D(pool_size=(2,2)))

model.add(tf.keras.layers.Conv2D(32, (3,3)))
model.add(tf.keras.layers.Activation('relu'))
model.add(tf.keras.layers.MaxPool2D(pool_size=(2,2)))

model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(64, activation='relu'))

model.add(tf.keras.layers.Dense(4, activation='sigmoid'))
sgd= tf.keras.optimizers.SGD(lr = 0.01)
model.compile(loss = 'mean_squared_error', optimizer=sgd, metrics=['accuracy'])
model.fit(x,y, batch_size=3, epochs=15, validation_split=0.2)

它对这个任务不起作用,那么解决这个问题的方法是什么呢?我在某处看到:将CNN应用于图像(我想没有密集层),然后对CNN的数据进行展平,对每个x/y坐标使用线性回归(多变量逻辑回归)。这是一个解决方案吗?据我所知,我会将每个图像输入Conv和MaxPool层,然后展平,然后将数据输入lin.回归并训练它,但我不知道如何在keras中做到这一点。我是这个领域的新手,所以任何想法都能帮助我。

共有1个答案

卢作人
2023-03-14

首先,对您的代码进行几点观察。

由于最后一层包含2个以上的神经元,因此必须使用的激活函数是softmax,而不是sigmoid(请注意,这是分类的情况,而不是回归)。

只有在进行二进制分类时,才应该使用sigmoid,但当您有两个以上的类时,才应该使用sigmoid(请注意,您也可以对两个类使用softmax,但从较小的计算开销来看,不一定推荐使用softmax)。

你的问题既是回归问题也是分类问题!。

卷积神经网络的第一层包含64个特征映射,每个核的大小为3x3。虽然将图像输入到神经网络的方式是正确的,但只输入灰度图像,而不是x1、x2、y1、y2坐标。

对于带回归的ANN,请查看本教程:https://machinelearningmastery.com/regression-tutorial-keras-deep-learning-library-python/.

你的直觉是正确的;目标检测神经网络将完全连接的层替换为卷积层。Yann LeCun甚至表示,完全连接的层不应该是CNN的一部分。

由于您是该领域的新手,我建议您采用以下管道。

1) 查找您喜欢的深度学习库(Keras/PyTorch/TensorFlow等)中编写的在线github模型。

2)按照说明/教程重现github用户获得的结果。

3)通过后者,您还应该理解代码/获得良好的直观掌握。

4)使模型适应您需要的问题。

您可以从这里开始(这是对象检测-检测多个对象以及不同类别的对象):https://github.com/pierluigiferrari/ssd_keras.

如果您还有其他问题,请写下来,我很乐意为您提供帮助!

 类似资料:
  • 注意: 本教程适用于对Tensorflow有丰富经验的用户,并假定用户有机器学习相关领域的专业知识和经验。 概述 对CIFAR-10 数据集的分类是机器学习中一个公开的基准测试问题,其任务是对一组大小为32x32的RGB图像进行分类,这些图像涵盖了10个类别: 飞机, 汽车, 鸟, 猫, 鹿, 狗, 青蛙, 马, 船以及卡车。 想了解更多信息请参考CIFAR-10 page,以及Alex Kriz

  • 卷积神经网络(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。卷积神经网络由一个或多个卷积层和顶端的全连通层(对应经典的神经网络)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网络能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网络

  • 下午好在第一阶段,在卷积神经网络(输入层)的输入上,我们接收一个源图像(因此是手写英文字母的图像)。首先,我们使用一个从左到右的nxn窗口来扫描图像并在内核(卷积矩阵)上乘法来构建特征映射?但没有人写过内核应该具有什么样的精确值(换句话说,我应该将从n*n窗口检索到的数据相乘到什么样的内核值)。是否适合在这个用于边缘检测的卷积核上乘以数据?有许多卷积核(浮雕、高斯滤波器、边缘检测、角度检测等)?但

  • 在了解了机器学习概念之后,现在可以将注意力转移到深度学习概念上。深度学习是机器学习的一个分支。深度学习实现的示例包括图像识别和语音识别等应用。 以下是两种重要的深度神经网络 - 卷积神经网络 递归神经网络 在本章中,我们将重点介绍CNN - 卷积神经网络。 卷积神经网络 卷积神经网络旨在通过多层阵列处理数据。这种类型的神经网络用于图像识别或面部识别等应用。CNN与其他普通神经网络之间的主要区别在于

  • 主要内容:卷积神经网络深度学习是机器学习的一个分支,它是近几十年来研究人员突破的关键步骤。深度学习实现的示例包括图像识别和语音识别等应用。 下面给出了两种重要的深度神经网络 - 卷积神经网络 递归神经网络。 在本章中,我们将关注第一种类型,即卷积神经网络(CNN)。 卷积神经网络 卷积神经网络旨在通过多层阵列处理数据。这种类型的神经网络用于图像识别或面部识别等应用。 CNN与任何其他普通神经网络之间的主要区别在于CNN

  • 注意: 本教程适用于对Tensorflow有丰富经验的用户,并假定用户有机器学习相关领域的专业知识和经验。 概述 对CIFAR-10 数据集的分类是机器学习中一个公开的基准测试问题,其任务是对一组32x32RGB的图像进行分类,这些图像涵盖了10个类别: 飞机, 汽车, 鸟, 猫, 鹿, 狗, 青蛙, 马, 船以及卡车。 想了解更多信息请参考CIFAR-10 page,以及Alex Krizhev