试图在图像中找到对象坐标(x,y),我的神经网络似乎在不学习的情况下优化了错误[关闭]

问题描述 投票:10回答:1

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

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

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

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

我已经尝试过(来自Using convolutional neural nets to detect facial keypoints tutorial):

  • 具有各种层数和单元数(最多500个)的密集层体系结构;
  • 卷积体系结构(输出前有2个密集层);
  • 作为损失函数的平方差之和或均值(MSE);
  • 目标坐标在原始范围[0,199]或标准化的[0,1]中;
  • 层之间的删除层,丢失概率为0.2。

我一直使用简单的SGD,调整学习率以尝试减少误差曲线。

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

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

单独的神经网络能否在此任务上表现良好?我已经读过,也可以为当前/不存在的二进制分类训练一个网络,然后扫描图像以找到对象的可能位置。但是我只是想知道是否可以仅使用神经网络的正向计算。

neural-network coordinates detection lasagne
1个回答
4
投票

问题:如何防止这种[过度拟合而不提高考试成绩?]

需要做的是重新构造您的神经网络。神经网络在预测X和Y坐标方面做得不好。它可以通过创建检测硬币的热图,或者换句话说,可以将彩色图片转换为“硬币在这里”的概率图。

为什么?神经元具有用于测量概率而非坐标的良好能力。神经网络并不是出售它们的魔力机器,而是确实遵循其体系结构制定的程序。您必须设计一个漂亮的体系结构,以使神经网络首先创建一个内部空间表示硬币的位置的表示形式,然后再创建其质心的另一个内部表示形式,然后再使用质心和原始图像进行一个内部表示。大小,以某种方式学会缩放X坐标,然后对Y重复整个过程。

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

问题:仅神经网络在此任务上能否表现良好?

一个响亮的YES,只要您建立了正确的神经网络体系结构(如上述),but如果将任务分解为以下内容,可能会更容易实现并且训练起来更快步骤,仅将神经网络应用于硬币检测步骤。

© www.soinside.com 2019 - 2024. All rights reserved.