
这学期的人工神经网络课程已经进行完了第三章内容,关于经典网络重要的BP(误差反向传播网络)是所有学习人工神经网络的第一个实用网络。它的原理比较简单,在很多平台上都很容易实现。
在学习了神经网络的基本原理后,更重要的是,它可以通过一些应用程序来应用,这样他就可以帮助自己解决一些实际的工程问题。
最近买的 [1] 随着其他物理变量(工作电压、距离、温度等)和电容值与其他物理变量(工作电压、距离、温度等)的变化。).为了方便实验,需要能够LC100-A自动记录测量值。
<<< 左右滑动更多 >>>
一开始,直接使用相机获取液晶显示数据,然后使用字符识别软件完成数字识别。
测试一下CNOCR识别效果。屏幕截图中的文字识别效果很好:
- 识别时间:1.98。* 识别结果:
[['●', '更', '新', '了', '训', '练', '代', '码', ',', '使', '用', 'm', 'x', 'n', 'e', 't', '的', 'r', 'e', 'c', 'o', 'r', 'd', 'i', 'o', '首', '先', '把', '数', '据', '转', '换', '成', '二', '进', '制', '格', '式', ',', '提', '升', '后', '续', '的'], ['训', '练', '效', '率', '。', '训', '练', '时', '支', '持', '对', '图', '片', '做', '实', '时', '数', '据', '增', '强', '。', '训', '练', '时', '支', '持', '对', '图', '片', '做', '实', '时', '数', '据', '增', '强', '。', '也', '加', '入', '了', '更', '多', '可', '传', '入', '的', '参', '数', '。'], ['●', '允', '许', '训', '练', '集', '中', '的', '文', '字', '数', '量', '不', '同', ',', '目', '前', '是', '中', '文', '1', '0', '个', '字', ',', '英', '文', '2', '0', '个', '字', '母', '。'], ['。', '提', '供', '了', '更', '多', '的', '模', '型', '选', '择', ',', '允', '许', '大', '家', '按', '需', '训', '练', '多', '种', '不', '同', '大', '小', '的', '识', '别', '模', '型', '。'], ['●', ' ', '内', '置', '了', '各', '种', '训', '练', '好', '的', '模', '型', ',', '最', '小', '的', '模', '型', '只', '有', '之', '前', '模', '型', '的', '1', '/', '5', '大', '小', '。', '所', '有', '模', '型', '都', '可', '免', '费'], ['使', '用', '。', '所', '有', '模', '型', '都', '可', '免', '费'], ['使', '用', '。']]
那么前面的液晶屏识别效果呢:
[[.', '。', '与', 'F', '早', 'H']]
驴唇好像不对马嘴。
主要原因是网络没有训练过上述液晶数字。因为液晶显示图片质量很好,其实只需要最简单的BP网络能达到很好的效果。
下面给出在MATLAB构建网络并进行实验的过程。
利用神经网络解决问题的一个重要环节是准备训练数据。通过提取和手动标记收集到的图片中的数字来完成网络训练。
1.数字分割
以下是桌面摄像头捕获的测量图片。通过简单的图片灰度投影,更容易确定显示数字的位置。为了简单起见,摄像头也可以固定LCD相对位置,所以手动标记结果的字符位置也可以适用于以后的测量结果。
这个问题的简单之处在于,所有的字符都是等宽的,对比度很好,所有的字符都可以通过简单的分离单独分离出来。由于摄像头位置固定,简单分割后的字符上下左右平移少量,不旋转。图片的位置和尺寸将不再集成。这些差异最终由神经网络来弥补。
LCD显示字符的图片对比度非常好。但是有一个问题在拍摄相机时,经常会遇到字符变化的过程,使图片中的字符呈现出两个字符叠加的情况。以下是一些示例:
说实话,即使人工识别,这些过程也无法区分。
2000多个样本通过人工输入标注。
2.图片二值化
二值化分割图片可以消除环境光对图片亮度的影响。在一定程度上,液晶字符变化引起的模糊也可以消除。
<<< 左右滑动更多 >>>
以上所有字符的尺寸为23乘以38点阵。
1.构建网络和训练
简单的实验,使用简单的方法。对于之前获得的字符,不再手动定义它们的特征。将原始的彩色图像转换为灰度图像,然后排列成23×38=874维向量。然后增加一层中间隐层,形成最简单的分类网络。
net = patternnet(11)
一半的人工标记样本用于训练,所有样本用于测试。以下是测试结果。
plotconfusion(xx, net(yy))
2.训练结果及分析
整体错误率约为:ERR= 2.99%。
以下是识别正确字符。
以下是一些识别错误字符的情况。基本上是一些在变化过程中拍摄液晶字符的重叠字符。这些情况本身在手动标记时是模糊的。
<<< 左右滑动更多 >>>
3.网络结构与错误率
下面给出了网络的隐层节点个数与识别错误样本个数之间的关系。可以看到当中间隐层节点大于5之后,识别性能就不再有明显的变化了。
隐层节点个数 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
---|---|---|---|---|---|---|---|---|---|---|
错误数量 | 1810 | 656 | 216 | 77 | 69 | 66 | 65 | 72 | 58 | 68 |
使用神经网络解决问题,不是寻找最强大的网络,而是需要最合适的网络。
通过上面的测试结果来看,简单的单隐层网络便可以很好的满足液晶显示数字识别。那么对于那些由于数字跳动所引起的错误该怎么处理呢?
这个问题如果仅仅依靠增加训练样本和改进网络结构是很难进行彻底解决,规避这个错误可以通过对连续识别结果进行比对来解决。对显示数字进行连续快速采集5帧图像,其中液晶跳动往往只发生在其中一帧,或者两帧。那么对于五个图像识别出的数字进行对比,找到相同次数最多的数字作为输出结果。
参考资料
[1]: https://zhuoqing.blog.csdn.net/article/details/108997475