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