如何将图像输入到神经网络?
Posted
技术标签:
【中文标题】如何将图像输入到神经网络?【英文标题】:How to input the image to the neural network? 【发布时间】:2011-01-06 06:45:47 【问题描述】:我了解神经网络的工作原理,但如果我想将它们用于实际字符识别等图像处理,我无法理解如何将图像数据输入到神经网络。
我有一张非常大的A
字母图片。也许我应该尝试从图像中获取一些信息/规范,然后使用该规范的值向量?它们将成为神经网络的输入?
谁已经做过这样的事情,你能解释一下怎么做吗?
【问题讨论】:
你已经有神经网络了吗?如果不是 - 这是一个奇怪的问题。如果是 - 至少发布界面。 这不是一个奇怪的问题。实际上,如果我有一个接口,那么这意味着我首先要决定如何将图像输入到神经网络。问题是 - 我是否可以将图像数据(例如字母 A)输入神经网络,即使它非常大或非常小,或者我应该将其分解为一些参数,这些参数唯一地确定字母 A! 如果我要把它分解成参数,我应该使用什么样的参数? 【参考方案1】:以下是一些步骤: 确保您的彩色/灰度图像是二值图像。为此,请执行一些阈值操作。在进行某种特征提取之后。对于 OCR / NN 的东西,这个例子可能会有所帮助,尽管在 ruby 中: https://github.com/gbuesing/neural-net-ruby/blob/master/examples/mnist.rb
【讨论】:
【参考方案2】:我们的2002 review paper 涵盖了有关将 NN 应用于图像的所有这些注意事项 (基于特征、基于像素、尺度不变等)
您最大的挑战是所谓的“维度诅咒”。
我会将 NN 性能与支持向量机的性能进行比较(使用哪些内核很棘手)。
【讨论】:
【参考方案3】:最简单的解决方案是将用于训练和测试的所有图像标准化,使其具有相同的分辨率。此外,每张图像中的字符大小应大致相同。使用灰度图像也是一个好主意,所以每个像素只会给你一个数字。然后,您可以将每个像素值用作网络的一个输入。例如,如果您有大小为 16x16 像素的图像,您的网络将有 16*16 = 256 个输入神经元。第一个神经元将在 (0,0) 处看到像素的值,第二个在 (0,1) 处看到像素值,依此类推。基本上,您将图像值放入一个向量中,然后将该向量输入网络。这应该已经可以了。
通过首先从图像中提取特征(例如边缘),然后在这些特征上使用网络,您或许可以提高学习速度,并使检测更加稳健。在这种情况下,您所做的是结合先验知识。对于字符识别,您知道某些相关功能。因此,通过将它们提取为预处理步骤,网络不必学习这些特征。但是,如果您提供错误的(即不相关的)特征,网络将无法学习图像 --> 字符映射。
【讨论】:
我解决这个问题的步骤好吗? 1.二值化图像。 2. 分割。找到图像的连接部分。可能正在使用轮廓。 3. 对于每个部分,与其他部分分开进行。 3.1 从图像片段中提取一些信息。 3.2 与一些模式进行比较或将其输入到神经网络。所以我有一些问题。 1.如果我分割图像并且我在那里得到一个字母“i”,它上面的点将与该段分开。那么如何处理这种情况呢?可能会添加一些特殊情况。 2. 如果分段太大或太小,我应该调整其大小吗? 我可以向我的神经网络输入不同尺寸的图像吗?我不认为我可以,但我不确定。那么图片可以包含一些不同大小的字母,如何处理呢? 您的预处理步骤听起来像这样可行,但是,我建议从第一段中的建议开始。在我看来,您在神经网络或字符识别方面没有太多经验。因此,为了了解什么是有效的以及它是如何运作的,您应该从一个简单的案例开始。一次添加太多步骤会增加出错的机会,如果不真正了解每个步骤的预期结果,您将很难调试代码。 您不应该使用不同的尺寸,至少不应该作为第一步。理论上,神经网络将能够识别它在训练期间看到的一切,只要它经过足够的数据训练并且网络足够大。但是,在实践中,您几乎总是希望首先对输入图像进行标准化。有一些方法试图学习尺度不变,比如 Yann LeCun 的卷积网络(参见,例如,yann.lecun.com/exdb/lenet 用于字符识别)。但是,我真的建议您从最简单的方法开始,一开始可能不是字母,而是数字。 不要使用包含不同字符的图像。使用仅包含一个字符、大小相同的图像,并且图像中的字符也应具有相同的大小。为了节省您所有的预处理工作,请从www-stat.stanford.edu/~tibs/ElemStatLearn/data.html(页面底部)获取邮政编码数据并用它来训练您的网络。在这里,您不必处理向量中的归一化和组织像素值,这一切都已经完成了。如果您的网络能够对这些数据做一些有用的事情,您可以自己开始添加额外的步骤。【参考方案4】:您可以使用实际像素作为输入。这就是为什么有时最好使用较小分辨率的输入图像。
ANN 的好处在于它们能够以某种方式进行特征选择(通过为这些输入节点分配接近零的权重来忽略不重要的像素)
【讨论】:
【参考方案5】:您要解决的问题的名称是“feature extraction”。这绝对是不平凡的,并且是一个积极研究的主题。
解决这个问题的简单方法是将图像的每个像素映射到相应的输入神经元。显然,这仅适用于大小相同的图像,并且通常效果有限。
除此之外,您还可以做很多事情... Gabor 过滤器、类 Haar 特征、PCA 和 ICA、稀疏特征,仅举几个流行的例子。我的建议是拿起一本关于神经网络和模式识别,或者特别是光学字符识别的教科书。
【讨论】:
不是我的专长,但快速搜索会出现 Roman Yampolskiy 的“用于光学字符识别的特征提取方法”,看起来它可能包含您所追求的内容。以上是关于如何将图像输入到神经网络?的主要内容,如果未能解决你的问题,请参考以下文章