我生成粘贴在 200x200 大小的白色背景上的单个硬币的图像。该硬币是在 8 个欧元硬币图像中随机选择的(每个硬币一个),并且具有:
- 随机旋转;
- 随机大小(在固定范围内);
- 随机位置(这样硬币就不会被裁剪)。
这是两个示例(添加了中心标记):两个数据集示例
我正在使用 Python + 千层面。我将彩色图像输入神经网络,该神经网络具有 2 个完全连接的线性神经元的输出层,一个用于 x,一个用于 y。与生成的硬币图像相关联的目标是硬币中心的坐标 (x,y)。
我尝试过(来自使用卷积神经网络检测面部关键点教程):
- 具有各种层数和单元数(最大 500)的密集层架构;
- 卷积架构(输出前有 2 个密集层);
- 作为损失函数的总和或均方差 (MSE);
- 原始范围 [0,199] 或归一化 [0,1] 内的目标坐标;
- 层与层之间的 dropout 层,dropout 概率为 0.2。
我总是使用简单的 SGD,调整学习率,试图获得一个很好的递减误差曲线。
我发现当我训练网络时,误差会减小,直到输出始终是图像的中心。看起来输出与输入无关。看来网络输出是我给出的目标的平均值。这种行为看起来像是对误差的简单最小化,因为硬币的位置均匀分布在图像上。这不是想要的行为。
我感觉网络没有在学习,而只是在尝试优化输出坐标以最小化对目标的平均误差。我对吗?我怎样才能防止这种情况?我试图消除输出神经元的偏差,因为我想也许我只是在修改偏差并且所有其他参数都设置为零,但这不起作用。
单独的神经网络是否有可能在这项任务中表现出色? 我已经读过,人们也可以训练一个网络来进行当前/不存在的二进制分类,然后扫描图像以找到对象的可能位置。但我只是想知道是否可以仅使用神经网络的前向计算。