我生成粘贴在大小为200x200的白色背景上的单个硬币的图像。该硬币是从8欧元硬币图像中随机选择的(每个硬币一个),并且具有:
这里有两个示例(添加了中心标记):Two dataset examples
我正在使用Python +千层面。我将彩色图像输入到神经网络中,该神经网络具有2个完全连接的线性神经元输出层,一个用于x,一个用于y。与生成的硬币图像关联的目标是硬币中心的坐标(x,y)。
我已经尝试过(来自Using convolutional neural nets to detect facial keypoints tutorial):
我一直使用简单的SGD,调整学习率以尝试减少误差曲线。
我发现在训练网络时,误差会减小,直到输出始终始终是图像中心为止。看起来输出与输入无关。 似乎网络输出是我给出的目标的平均值。由于硬币的位置均匀分布在图像上,因此此行为看起来像是误差的简单最小化。这不是想要的行为。
我有一种感觉,网络不是在学习,而是在尝试优化输出坐标以最小化针对目标的平均误差。我对吗?如何防止这种情况?我试图消除输出神经元的偏差,因为我想也许我只是在修改偏差,而所有其他参数都设置为零,但这没有用。
单独的神经网络能否在此任务上表现良好?我已经读过,也可以为当前/不存在的二进制分类训练一个网络,然后扫描图像以找到对象的可能位置。但是我只是想知道是否可以仅使用神经网络的正向计算。
需要做的是重新构造您的神经网络。神经网络在预测X和Y坐标方面做得不好。它可以通过创建检测硬币的热图,或者换句话说,可以将彩色图片转换为“硬币在这里”的概率图。
为什么?神经元具有用于测量概率而非坐标的良好能力。神经网络并不是出售它们的魔力机器,而是确实遵循其体系结构制定的程序。您必须设计一个漂亮的体系结构,以使神经网络首先创建一个内部空间表示硬币的位置的表示形式,然后再创建其质心的另一个内部表示形式,然后再使用质心和原始图像进行一个内部表示。大小,以某种方式学会缩放X坐标,然后对Y重复整个过程。
更容易,更容易,是创建一个硬币检测器卷积,将您的彩色图像转换成此处是硬币概率矩阵的黑白图像。然后将该输出用于您的自定义手写代码,该代码会将该概率矩阵转换为X / Y坐标。
一个响亮的YES,只要您建立了正确的神经网络体系结构(如上述),but如果将任务分解为以下内容,可能会更容易实现并且训练起来更快步骤,仅将神经网络应用于硬币检测步骤。