Sil*_*m14 10 detection coordinates neural-network lasagne
我生成粘贴在200x200大小的白色背景上的单个硬币的图像.硬币是从8欧元硬币图像(每个硬币一个)中随机选择的,并具有:
以下是两个示例(添加了中心标记):两个数据集示例
我正在使用Python + Lasagne.我将彩色图像输入到神经网络中,该网络具有完全连接的2个线性神经元的输出层,一个用于x,一个用于y.与生成的硬币图像相关联的目标是硬币中心的坐标(x,y).
我试过(从使用卷积神经网络检测面部关键点教程):
我总是使用简单的SGD,调整学习率,试图有一个很好的递减误差曲线.
我发现,当我训练网络时,错误会减少,直到输出始终是图像的中心.看起来输出与输入无关.网络输出似乎是我给出的目标的平均值.由于硬币的位置均匀地分布在图像上,因此这种行为看起来像是错误的简单最小化.这不是想要的行为.
我感觉网络没有学习,只是试图优化输出坐标以最小化针对目标的平均误差.我对吗?我怎么能阻止这个?我试图消除输出神经元的偏差,因为我想也许我只是修改了偏差,所有其他参数都设置为零,但这不起作用.
单独一个神经网络是否有可能在这项任务中表现良好?我已经读过,人们还可以为当前/不存在的分类训练网络,然后扫描图像以找到对象的可能位置.但我只是想知道是否可以使用神经网络的正向计算.
需要做的是重新构建你的神经网络。神经网络在预测 X 和 Y 坐标方面不会做得很好。它可以通过创建一个检测到硬币的位置的热图,或者换句话说,你可以让它把你的彩色图片变成一个“硬币在这里”的概率图。
为什么?神经元有很好的能力来测量概率,而不是坐标。神经网络并不是它们所宣称的神奇机器,而是真正遵循其架构所制定的程序。你必须布置一个非常奇特的架构,让神经网络首先创建硬币所在位置的内部空间表示,然后是它们的质心的另一个内部表示,然后另一个使用质心和原始图像size 以某种方式学会缩放 X 坐标,然后对 Y 重复整个过程。
更容易,更容易的是创建一个硬币检测器卷积,将您的彩色图像转换为一个硬币在这里的概率矩阵的黑白图像。然后将该输出用于您的自定义手写代码,将概率矩阵转换为 X/Y 坐标。
一个响亮的YES,只要您设置了正确的神经网络架构(如上所述),但如果您将任务分解为多个步骤并且仅将神经网络应用于代币,则实施起来可能会容易得多,训练速度也会更快检测步骤。