试图在图像中找到对象坐标 (x,y),我的神经网络似乎在没有学习的情况下优化错误
Trying to find object coordinates (x,y) in image, my neural network seems to optimize error without learning
我生成粘贴在大小为 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]中的目标坐标;
- 层与层之间的Dropout层,dropout概率为0.2。
我总是使用简单的 SGD,调整学习率以尝试获得一个很好的递减误差曲线。
我发现当我训练网络时,错误会减少直到输出始终位于图像中心的点。看起来输出独立于输入。 网络输出似乎是我给出的目标的平均值。这种行为看起来像是对错误的简单最小化,因为硬币的位置均匀分布在图像上。这不是想要的行为。
我感觉网络不是在学习,而只是在尝试优化输出坐标以最小化针对目标的平均误差。我对吗?我怎样才能防止这种情况发生? 我试图消除输出神经元的偏差,因为我想也许我只是在修改偏差,而所有其他参数都被设置为零,但这没有用。
是否有可能仅靠神经网络就可以很好地完成这项任务?
我已经读到,还可以为 present/not 当前二进制分类训练一个网络,然后扫描图像以找到对象的可能位置。但我只是想知道是否可以只使用神经网络的前向计算。
问题:如何防止这种[过度拟合而没有提高考试成绩]?
需要做的是重新构建你的神经网络。神经网络无法很好地预测 X 和 Y 坐标。它可以通过创建它检测到硬币位置的热图,或者换句话说,你可以让它把你的彩色图片变成 "coin-here" 概率图。
为什么?神经元具有很好的能力,可用于测量概率,而不是坐标。神经网络并不是它们被出售的神奇机器,而是真正遵循其架构所制定的程序。你必须布置一个非常奇特的架构,让神经网络首先创建硬币位置的内部 space 表示,然后是它们质心的另一个内部表示,然后另一个使用质心和原始图像大小以某种方式学习缩放 X 坐标,然后对 Y 重复整个过程。
更简单,更容易的是创建一个硬币探测器卷积,将您的彩色图像转换为概率-a-coin-is-here 矩阵的黑白图像。然后将该输出用于您的自定义手写代码,将该概率矩阵转换为 X/Y 坐标。
问题:神经网络是否有可能单独完成这项任务?
一个响亮的YES,只要你设置了正确的神经网络架构(像上面那样),但是它可能会如果您将任务分解为多个步骤并且仅将神经网络应用于硬币检测步骤,那么实施起来会容易得多,训练起来也会更快。
我生成粘贴在大小为 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]中的目标坐标;
- 层与层之间的Dropout层,dropout概率为0.2。
我总是使用简单的 SGD,调整学习率以尝试获得一个很好的递减误差曲线。
我发现当我训练网络时,错误会减少直到输出始终位于图像中心的点。看起来输出独立于输入。 网络输出似乎是我给出的目标的平均值。这种行为看起来像是对错误的简单最小化,因为硬币的位置均匀分布在图像上。这不是想要的行为。
我感觉网络不是在学习,而只是在尝试优化输出坐标以最小化针对目标的平均误差。我对吗?我怎样才能防止这种情况发生? 我试图消除输出神经元的偏差,因为我想也许我只是在修改偏差,而所有其他参数都被设置为零,但这没有用。
是否有可能仅靠神经网络就可以很好地完成这项任务? 我已经读到,还可以为 present/not 当前二进制分类训练一个网络,然后扫描图像以找到对象的可能位置。但我只是想知道是否可以只使用神经网络的前向计算。
问题:如何防止这种[过度拟合而没有提高考试成绩]?
需要做的是重新构建你的神经网络。神经网络无法很好地预测 X 和 Y 坐标。它可以通过创建它检测到硬币位置的热图,或者换句话说,你可以让它把你的彩色图片变成 "coin-here" 概率图。
为什么?神经元具有很好的能力,可用于测量概率,而不是坐标。神经网络并不是它们被出售的神奇机器,而是真正遵循其架构所制定的程序。你必须布置一个非常奇特的架构,让神经网络首先创建硬币位置的内部 space 表示,然后是它们质心的另一个内部表示,然后另一个使用质心和原始图像大小以某种方式学习缩放 X 坐标,然后对 Y 重复整个过程。
更简单,更容易的是创建一个硬币探测器卷积,将您的彩色图像转换为概率-a-coin-is-here 矩阵的黑白图像。然后将该输出用于您的自定义手写代码,将该概率矩阵转换为 X/Y 坐标。
问题:神经网络是否有可能单独完成这项任务?
一个响亮的YES,只要你设置了正确的神经网络架构(像上面那样),但是它可能会如果您将任务分解为多个步骤并且仅将神经网络应用于硬币检测步骤,那么实施起来会容易得多,训练起来也会更快。