Python 用于目标定位的卷积神经网络 我在Andrew Ng的深度学习课程中看到了一种将单个对象定位在图像上的方法: 据我所知,例如,可以将一个点绑定到对象的特定部分,将坐标:x,y作为标签y并训练CNN

Python 用于目标定位的卷积神经网络 我在Andrew Ng的深度学习课程中看到了一种将单个对象定位在图像上的方法: 据我所知,例如,可以将一个点绑定到对象的特定部分,将坐标:x,y作为标签y并训练CNN,python,keras,conv-neural-network,Python,Keras,Conv Neural Network,我想训练一个CNN神经网络来定位我的眼睛(而不是分类)。我拍了200张我的照片:60x60像素的灰度。我标记左眼和右眼,标记眼的每个坐标标准化为0-1。y标签为:[x of eye1,y of eye1,x of eye2,y of eye2]。我在输出层sigmoid函数中使用了带mse损耗的SGD optimazer model = tf.keras.models.Sequential() model.add(tf.keras.layers.Conv2D(64, (3,3), input_s

我想训练一个CNN神经网络来定位我的眼睛(而不是分类)。我拍了200张我的照片:60x60像素的灰度。我标记左眼和右眼,标记眼的每个坐标标准化为0-1。y标签为:[x of eye1,y of eye1,x of eye2,y of eye2]。我在输出层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中做到这一点。我是这个领域的新手,所以任何想法都会对我有所帮助。

首先,对您的代码进行一些观察

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

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

你的问题既是一个回归问题,也是一个分类问题

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

对于带有回归的ANN,请参阅本教程:

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

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

1) 在您喜欢的深度学习库(Keras/PyTorch/TensorFlow等)中找到一个在线github模型

2) 按照说明/教程复制github用户获得的结果

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

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

您可以从这里开始(这是对象检测-检测多个对象以及不同类别的对象):


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

我认为你们试图完成的和面部关键点检测问题非常相似。它已经得到了广泛的研究,并且有许多解决方案。请使用大量关于解决此问题的人员的资源(内核)查看此文件。谢谢,我发现了此文件:,并尝试了此方法,取得了改进。也许200张照片的训练数据还不够。我将尝试通过旋转、裁剪或其他方式编辑我的数据来获取更多数据。非常感谢。首先,我在最后一层有softmax,但因为所有softmax输出的总和是1,我认为这是错误的。我的错误假设是,每一层都必须有特定的(非线性)激活函数,这导致我在那里放了一个sigmoid。正如我所看到的:,最后一层中的线性激活函数起作用。为什么这是一个回归问题?对不起,我对神经网络、深度学习、CNN等都是新手。这既是一种回归,也是一种分类。通过回归(x_min,x_max,y_min,y_max)细化边界框的位置,并通过分类细化这些边界框内的内容(该边界框内是否有狗或猴子)。