我了解神经网络的工作原理,但如果我想将它们用于实际字符识别等图像处理,我无法理解如何将图像数据输入到神经网络。
我有一个非常大的A
一封信的图像。也许我应该尝试从图像中获取一些信息/规范,然后使用该规范的值向量?它们将成为神经网络的输入吗?
谁已经做过这样的事情,你能解释一下如何做到这一点吗?
我了解神经网络的工作原理,但如果我想将它们用于实际字符识别等图像处理,我无法理解如何将图像数据输入到神经网络。
我有一个非常大的A
一封信的图像。也许我应该尝试从图像中获取一些信息/规范,然后使用该规范的值向量?它们将成为神经网络的输入吗?
谁已经做过这样的事情,你能解释一下如何做到这一点吗?
最简单的解决方案是将训练和测试的所有图像标准化,使其具有相同的分辨率。此外,每张图像中的字符大小应大致相同。使用灰度图像也是一个好主意,所以每个像素只会给你一个数字。然后,您可以将每个像素值用作网络的一个输入。例如,如果您有大小为 16x16 像素的图像,您的网络将有 16*16 = 256 个输入神经元。第一个神经元将在 (0,0) 处看到像素的值,第二个在 (0,1) 处看到像素值,依此类推。基本上,您将图像值放入一个向量中,然后将该向量输入网络。这应该已经起作用了。
通过首先从图像中提取特征(例如,边缘),然后在这些特征上使用网络,您也许可以提高学习速度,并使检测更加稳健。在这种情况下,您所做的是结合先验知识。对于字符识别,您知道某些相关功能。因此,通过将它们提取为预处理步骤,网络不必学习这些特征。但是,如果您提供错误的(即不相关的)特征,网络将无法学习图像 --> 字符映射。
您要解决的问题的名称是“特征提取”。这绝对不是微不足道的,也是一个积极研究的主题。
解决这个问题的简单方法是将图像的每个像素映射到相应的输入神经元。显然,这仅适用于大小相同的图像,并且通常效果有限。
除此之外,您还可以做很多事情...... Gabor 过滤器、类似 Haar 的特征、PCA 和 ICA、稀疏特征,仅举几个流行的例子。我的建议是拿起一本关于神经网络和模式识别,或者特别是光学字符识别的教科书。
我们2002 年的评论论文 (基于特征、基于像素、尺度不变性等)涵盖了有关将 NN 应用于图像的所有这些考虑因素。
你最大的挑战是所谓的“维度诅咒”。
我会将 NN 性能与支持向量机的性能进行比较(使用哪些内核很棘手)。
您可以使用实际像素作为输入。这就是为什么有时最好使用较小分辨率的输入图像。
ANN 的好处是它们能够以某种方式进行特征选择(通过为这些输入节点分配接近零的权重来忽略不重要的像素)
以下是一些步骤:确保您的彩色/灰度图像是二值图像。为此,请执行一些阈值操作。在进行某种特征提取之后。对于 OCR / NN 的东西,这个例子可能会有所帮助,尽管在 ruby 中: https ://github.com/gbuesing/neural-net-ruby/blob/master/examples/mnist.rb