训练集训练人工神经网络

时间:2014-03-22 17:09:31

标签: c# neural-network emgucv

我是这个网站的新手。好吧,我正在做一个使用ANN emgucv,C#和visual studio 2010来识别苹果的项目。我有4000个图像,包含不同的颜色和苹果的旋转。我有2个类,这意味着我在输出层有1个神经元(它是苹果而不是)。头等舱我将使用4000张苹果图像,但我不知道我必须用什么图像训练二等。我想使用房间,卧室等背景图片。这是一个好主意吗?我的项目是关于分类是不是苹果,我不想识别葡萄或其他水果。我给出一个图像,如果图像包含苹果,我想要重新标记。

2 个答案:

答案 0 :(得分:1)

对于第二类,您需要使用不包含苹果的图像。理想情况下,它应该是不包含苹果的图像的混合,这是太空飞船,足球比赛,笑脸,动物和你能想到的任何其他东西的集合。

然而,你根本没有提到的真正问题是你将如何提取这些功能:如果你是第一次尝试这个并认为你只是提供整个图片,那么像素一样像素,进入神经网络并得到答案,你运气不好。

最重要的过程是如何创建描述图像的向量。也就是说,如何从图像创建矢量,使包含苹果的图像矢量与不包含苹果的图像矢量非常不同。

然而,这根本不是微不足道的。事实上,根据图像的性质,这可能是一项非常困难的任务。如果第一类包含显示苹果占据大部分图片的图像,而第二类只显示卧室,则只需使用颜色直方图即可。

但是,如果图像显示可能包含苹果的随机场景,则非常困难。要开始,请查看opencv 2d功能+单应性以查找已知对象

答案 1 :(得分:1)

一些评论: 关于归一化,它是有用的,因为它使图片对照明不太敏感(没有标准化,更好的照明中的相同苹果看起来更白,并且网络将采用不同的值作为输入。您不希望这样)。但是,您使用的公式会限制区间[a,b]中变量的值。在图片中,数字的值通常已经在[0,255]中,因此需要另外一种。您需要的确切归一化类型取决于您从图片中提取的功能(最常见的一个是histogram equalization

但是,您的主要问题是您无法将图像直接输入网络。网络必须将一些描述图片的矢量作为输入,而不是图片本身(想想这个:如果你将图片输入网络,它会逐个像素地进行比较。如果相同的苹果向右移动一个像素,所有像素值都不同,尽管图片基本相同)。

创建这样的矢量可能非常困难,具体取决于您希望如何使用它。一种简单(但有限)的方法是裁剪苹果,获取每张图片的直方图,并将描述每张图片直方图的矢量输入网络。通过这种方式,网络很可能正确地对图像进行分类。如果这是一个学校项目,或者您刚刚开始图像处理,请试试这个。但是,如果你想在图片中的某个地方找到只包含苹果的图像,那就更加复杂了,你应该查看opencv关于2d特征提取的教程。