寻找图像中物体的坐标(x,y),我的神经网络似乎在优化误差而没有学习。

11

我生成一个大小为200x200的白色背景下的单个硬币图像。这些硬币是从8种欧元硬币图像中随机选择的(每种硬币一张),并具有以下特点:

  • 随机旋转;
  • 随机大小(在固定范围内);
  • 随机位置(使硬币没有被修剪)。

这里有两个例子(添加了中心标记): Two dataset examples

我使用Python + Lasagne将彩色图像馈送到神经网络中,该网络具有2个完全连接的线性神经元输出层,一个用于x轴,一个用于y轴。 与生成的硬币图像相关联的目标是硬币中心的坐标(x,y)。

我尝试过以下方法(来自Using convolutional neural nets to detect facial keypoints tutorial):

  • 具有不同层数和单位数(最大500)的密集层架构;
  • 卷积架构(输出之前具有2个稠密层);
  • 平方差的总和或平均值(MSE)作为损失函数;
  • 原始范围[0,199]或归一化[0,1]中的目标坐标;
  • 在层之间使用丢失层,丢失概率为0.2。

我总是使用简单的SGD,并调整学习率以尝试获得漂亮的下降误差曲线。

我发现随着网络的训练,错误会减少到一个点,此时输出始终是图像的中心。看起来输出与输入无关。似乎网络输出是我给出目标的平均值。这种行为看起来像是简单的误差最小化,因为硬币的位置在图像上是均匀分布的。这不是想要的行为。

我感觉这个网络并没有真正学习,只是试图优化输出坐标以最小化与目标的平均误差。我是对的吗?我该如何防止这种情况发生?我尝试去除输出神经元的偏差,因为我认为可能只是修改了偏差而其他参数都被设置为零,但这并没有起作用。

一个神经网络是否能够单独完成这项任务?我已经阅读过可以训练一个网络进行有/无二进制分类,然后扫描图像以查找对象可能的位置。但我想知道是否可能仅使用神经网络的前向计算就能完成。


你解决了这个问题吗? - milez
我停止了对神经网络的实验,也没有解决它。然而,我仍然对答案感兴趣。 - Silicium14
1个回答

6

问题:如何防止过度拟合但不改善测试分数?

需要做的是重新设计神经网络结构。神经网络不可能很好地预测 X 和 Y 坐标,但它可以通过创建一个热力图来检测硬币的位置;或者换句话说,您可以让它将彩色图片转换成“有硬币”的概率地图。

为什么呢?神经元很适合用于测量概率,而不是坐标。神经网络并不是销售人员所宣传的那样神奇,实际上它们确实遵循其体系结构所规定的程序。你需要设计出一个相当复杂的架构,让神经网络首先创建一个内部空间表示硬币的位置,然后再创建另一个内部表示硬币的质心,再使用质心和原始图像大小进行学习以某种方式缩放X坐标,然后重复整个过程以获取Y坐标。

更简单、更容易的方法是创建一个硬币探测卷积(Convolution),将彩色图片转换成概率-有硬币的黑白图像矩阵。然后使用该输出作为您自己编写的代码的输入,将概率矩阵转换为X/Y坐标。

问题:单靠神经网络能否在此任务中表现良好?

一声肯定的回答,只要您设置了正确的神经网络架构(就像上面所述),但是如果您将任务分解成步骤,并仅将神经网络应用于硬币检测步骤,则实现起来可能会更容易且训练速度更快。


有趣。你如何训练“将彩色图像转换为硬币概率矩阵的黑白图像”的卷积?您是否将原始输入和尺寸相同的黑白图像作为输入,其中除了原始图像中的硬币位置外,所有内容均为黑色? - Jivan
如果我们可以使用您(要简单得多的实现方法)来实现硬币的检测/定位,那么使用RCNN/FRCNN/YOLO的优势是什么? - Jivan
@Jivan 对于你的第一个问题,将彩色图像训练为概率图像,请看分割。这是我制作的一个示例视频,用于进行广义分割,但是你可以制作一个专门用于硬币的分割。 - Anton Codes
对于你的第二个问题,很遗憾我不知道所有这些技术的研究情况,也没有进行过任何一项。我的最佳猜测是,专门针对特定任务的模型可能会比更通用的模型表现更好。 YOLO是解决通用问题的一种方法,并没有利用硬币位置检测的特定属性。毫无疑问,YOLO可能会表现出色。我并不是说我的解决方案比YOLO更好,而是它只是众多解决方案中的一个。 - Anton Codes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接