10

我生成粘贴在 200x200 大小的白色背景上的单个硬币的图像。该硬币是在 8 个欧元硬币图像中随机选择的(每个硬币一个),并且具有:

  • 随机旋转;
  • 随机大小(在固定范围内);
  • 随机位置(这样硬币就不会被裁剪)。

这是两个示例(添加了中心标记):两个数据集示例

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

我尝试过(来自使用卷积神经网络检测面部关键点教程):

  • 具有各种层数和单元数(最大 500)的密集层架构;
  • 卷积架构(输出前有 2 个密集层);
  • 作为损失函数的总和或均方差 (MSE);
  • 原始范围 [0,199] 或归一化 [0,1] 内的目标坐标;
  • 层与层之间的 dropout 层,dropout 概率为 0.2。

我总是使用简单的 SGD,调整学习率,试图获得一个很好的递减误差曲线。

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

我感觉网络没有在学习,而只是在尝试优化输出坐标以最小化对目标的平均误差。我对吗?我怎样才能防止这种情况?我试图消除输出神经元的偏差,因为我想也许我只是在修改偏差并且所有其他参数都设置为零,但这不起作用。

单独的神经网络是否有可能在这项任务中表现出色? 我已经读过,人们也可以训练一个网络来进行当前/不存在的二进制分类,然后扫描图像以找到对象的可能位置。但我只是想知道是否可以仅使用神经网络的前向计算。

4

1 回答 1

5

问题:我怎样才能防止这种[过度拟合而不提高考试成绩]?

需要做的是重新构建你的神经网络。神经网络无法很好地预测 X 和 Y 坐标。它可以通过创建检测硬币位置的热图,或者换一种说法,您可以让它将您的彩色图片变成“硬币在这里”的概率图。

为什么?神经元具有很好的测量概率而不是坐标的能力。神经网络并不是他们所宣传的神奇机器,而是真正遵循其架构制定的程序。你必须布置一个非常漂亮的架构,让神经网络首先创建硬币所在位置的内部空间表示,然后是它们的质心的另一个内部表示,然后另一个使用质心和原始图像size 以某种方式学习缩放 X 坐标,然后为 Y 重复整个过程。

更简单,更容易的是创建一个硬币检测器卷积,将您的彩色图像转换为概率-a-coin-is-here 矩阵的黑白图像。然后将该输出用于您的自定义手写代码,将概率矩阵转换为 X/Y 坐标。

问题:单独的神经网络是否有可能在这项任务中表现良好?

一个响亮的YES,只要你设置正确的神经网络架构(如上),如果你将任务分解为步骤并且只将神经网络应用于硬币,它可能会更容易实现并且训练更快检测步骤。

于 2017-06-20T01:44:42.403 回答