如何将图像输入神经网络?

37

我理解神经网络的工作原理,但如果我想将它们用于像实际字符识别这样的图像处理中,我不知道如何将图像数据输入神经网络。

我有一张非常大的“A”字母图片。也许我应该尝试从图像中获取一些信息/规格,然后使用该规格的值向量?这些值将成为神经网络的输入?

已经做过这种事情的人,可以解释如何做吗?


你已经有神经网络了吗?如果没有 - 这是一个奇怪的问题。如果有 - 至少发布接口。 - Vladislav Rastrusny
1
这并不是一个奇怪的问题。实际上,如果我得到了一个接口,那么这意味着我首先要决定如何将图像输入到神经网络中。问题是 - 即使图像非常大或非常小,我是否可以将图像数据(例如字母A)输入到神经网络中,或者我应该将其分解为一些参数,以唯一确定字母A! - Dzen
如果我要将其分解为参数,我应该使用什么样的参数? - Dzen
5个回答

28
最简单的解决方案是将所有图片的分辨率都归一化为相同大小,包括训练和测试过程中使用的图片。此外,每张图片中的字符应该大致相同大小。最好使用灰度图像,这样每个像素只会给出一个数字。然后,您可以使用每个像素值作为网络的一个输入。例如,如果您有一个16x16像素大小的图像,则您的网络将具有16 * 16 = 256个输入神经元。第一个神经元将看到(0,0)处的像素值,第二个神经元将看到(0,1),以此类推。基本上,您将图像值放入一个向量中,然后将该向量馈送到网络中。这应该已经可以工作。
通过先从图像中提取特征(例如边缘),然后在这些特征上使用网络,也许可以增加学习速度并使检测更加健壮。在这种情况下,您要做的是将先前的知识纳入进来。对于字符识别,您知道某些相关的特征。因此,在预处理步骤中提取它们,网络就不必再学习这些特征了。但是,如果您提供错误的、即不相关的特征,网络将无法学习图像-->字符的映射关系。

1
我的解决问题的步骤是否正确?
  1. 二值化图像。
  2. 分割。找到图像的连通部分。可以使用轮廓。
  3. 对于每个段,将其与其他段分开处理。 3.1 从图像段中提取一些信息。 3.2 与某些模式进行比较或将其输入神经网络。 所以我有一些问题。
  4. 如果我分割图像并在那里得到一个字母“i”,则上面的点将与该段分离。那么如何处理这种情况?可能要添加一些特殊情况。
  5. 如果段太大或太小,我应该调整其大小吗?
- Dzen
我能否输入不同尺寸的图像到我的神经网络中?我认为我不能,但我也不确定。因此,图像可能包含一些不同大小的字母,该如何处理它? - Dzen
4
你的预处理步骤听起来可行,但我建议从第一段中提出的内容开始。在我看来,你对神经网络或字符识别的经验不是很丰富。为了知道什么有效以及如何有效,你应该从简单的情况开始。一次添加太多步骤将增加错误的可能性,而如果你不真正知道每个单独步骤能产生的效果,你将难以调试你的代码。 - ahans
1
你不应该在第一步使用不同的尺寸。理论上,神经网络将能够识别它在训练期间看到的所有内容,只要它使用足够的数据进行训练并且网络足够大。然而,在实践中,您几乎总是希望首先对输入图像进行归一化处理。有一些方法尝试学习尺度不变性,例如Yann LeCun的卷积网络(请参见http://yann.lecun.com/exdb/lenet以进行字符识别)。但是,我真的建议您从最简单的方法开始,也许不是字母,而是数字。 - ahans
1
请勿使用包含不同字符的图像。请使用只包含一个字符、大小相同且图像中的字符也应该具有相同大小的图像。为了节省预处理工作,可以从http://www-stat.stanford.edu/~tibs/ElemStatLearn/data.html(页面底部)获取ZIP代码数据并用其训练您的网络。在这里,您无需处理归一化和将像素值组织成向量,因为这些都已经完成了。如果您的网络能够在该数据上执行一些有用的操作,则可以开始添加其他步骤。 - ahans
显示剩余2条评论

7
您要解决的问题称为“特征提取”,这是一个非常复杂的问题,目前正在积极研究中。
最朴素的方法是将图像的每个像素映射到相应的输入神经元。显然,这仅适用于所有大小相同的图像,并且通常效果有限。
除此之外,还有许多其他方法... Gabor滤波器、Haar特征、PCA和ICA、稀疏特征等,这些都是一些流行的例子。我的建议是阅读一本关于神经网络和模式识别或者光学字符识别的教科书。

虽然这不是我的专长,但是快速搜索显示罗曼·扬波尔斯基的《光学字符识别的特征提取方法》可能包含你所需要的内容。 - Martin B

3

所有关于将NN应用于图像的考虑都在我们的2002年综述论文中涵盖(基于特征、基于像素、尺度不变性等)。

你面临的最大挑战是所谓的“维度灾难”。

我会将NN的表现与支持向量机进行比较(使用哪些核函数很棘手)。


1

您可以使用实际像素作为输入。这就是为什么有时候使用较小分辨率的输入图像更可取的原因。

人工神经网络的好处在于它们能够进行特征选择(通过为那些输入节点分配接近零的权重来忽略非重要像素)。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接