2020 8 20
ANN数字识别
数字识别
希望学弟们在看本文之前已经尝试过使用模板匹配,SVM(支持向量机)等算法识别数字.
1.ANN简介
推荐一个神经网络入门必玩tensorflow playground简单了解一下啥是神经网络
相关名词定义可以参考这一篇博客https://blog.csdn.net/jinyuan7708/article/details/82466653
2.我的网络结构
我使用tensorflow编写神经网络,通过B站学会了tensorflow的基本用法bilibili
我一共写了两个版本的神经网络,一个全连接版,一个卷积版,准确率感觉差不多(没测,有兴趣的老弟帮我测一波).全连接版运行较快,卷积版运行较慢.具体结构如下:
名称
fc_n
激活函数
image
1728(36*48)
fc1
864
tanh
fc2
432
tanh
fc3
108
tanh
fc4
54
tanh
fc5
15
softmax
两个版本都在2020赛季规则出之前就写好,所以有大小装甲共15类,当然还有很大的改进空间,比如可以尝试减少网络层,把识别速率在提一提
卷积版可以尝试根据上图自己编写
重点讲一下调用,全连接版的调用相比于卷积版的调用简单(柿子要挑软的捏).
①保存为PB文件.
②调用.
卷积版调用步骤同上,但你会遇到OpenCV报错说:没有reshape这个函数(卷积层到全连接层必定会用到的函数)
解决方法有两种:
①自定义reshape函数, 接下来我以laeky_relu为例介绍一下;
调用前加上 CV_DNN_REGISTER_LAYER_CLASS(LeakyRelu, LeakyReluLayer)即可
如果这个没看懂可以参考OpenCV官网
②使用optimize_for_inference "修剪"模型(具体代码,看我github)
3.图像预处理
在保证神经网络输入要求的前提下,尽量减少同类之间的变换,增加不同类之间的区别
如:在输入前使用逆透视变换进行校正,可以让两个1号看起来更相似,也可以让有一定角度的7和1区别开.
当然还有亮度旋转角度,等可以调节