提前感谢您阅读本文。
所以我试图编写一个神经网络来识别图像中的特定徽标。我基本上有一个特定宽高比的滑动窗口,它将当前窗口缩放到输入的预期大小。窗口围绕泵送输入到网络中滑动,并查看输出以确定窗口中的内容是否是我正在寻找的徽标。在这种情况下,它会在窗口边缘画一个框,勾勒出徽标。
我的问题在于,神经网络报告对图像的其他部分过于自信,最终会在整个地方绘制这么多的盒子,以至于无法看到原始图像的大部分内容。所以神经网络显然有问题。
为了输入图像,我尝试将其展开为灰度和颜色。它无论如何都无效。我也尝试过输入大小的变化。当它开始变得太小时,它会变得更糟,但即使在57x22x3彩色展开输入时,它仍然会失败。
所以我认为这也不是问题所在。我的神经网络有X个输入神经元(其中X是宽度*高度* num_colors)。我有一个隐藏层,也是X大小,最后,我在输出层有1个输出神经元,输出一个介于0.0和1.0之间的值,代表总置信度。
我有17个正面训练样例(理想输出为1.0),19个负面训练样例(理想输出为0.0)。在训练之后,网络报告对于所有正面的几乎相等的置信度为~0.95,对于所有负面示例,报告的置信度几乎相等〜0.013。
我的理论是我所拥有的训练样本数量太少,我应该收集/生成更多。我最初只有5个,但我也没有看到任何上升到17+的收益。
我应该注意到我尝试过使用Encog和Neuroph,两者都有非常相似的结果。我正在使用反向传播进行学习,并尝试使用0.3到0.7之间的学习率,以及0.0到0.8之间的动量值。无论如何,结果几乎总是一样的。
感谢您的帮助。
答案 0 :(得分:0)
通常神经网络需要大量的样本才能学习,但不能肯定这是你的问题。
对于你来说,进行匹配可能更好的想法是找到模式中每个像素的百分比匹配与模式在给定图像中的像素(例如使用滑动窗口样式)。
如果你有一组像素颜色与你的模式匹配:
0xFF0000,0x00FF00,0x0000FF
和具有这些像素颜色的图案:
0xEE0000,0x00FF00,0x0101DE
您可以为每个像素获得%的增量,然后对它们取平均值。现在有多种方法可以平均(加权平均值,指数加权平均值等)。最后,您可以获得整个模式的百分比匹配:模式与滑动窗口中当前像素的匹配程度。您始终可以跟踪最大分数,因此最后您只显示一个框(匹配模式的概率最高的框)。
您可以为每个像素创建一个神经元,并且树突可以是颜色十六进制数的不同部分。也许是每个R,G,B的树突。在我上面给出的例子中,我为整个颜色整数取了一个树枝。
答案 1 :(得分:0)
尝试使用SOM / LVQ神经网络对滑动窗口输入进行分类这个matlab帖子应该给你一些想法http://scriptbucket.wordpress.com/2012/09/21/image-classification-using-matlab-somlvq/