手写英文字体识别(名企内推)
最后更新 2020/10/29 17:14
阅读 571
图像分类
江水
9
获得赞1
发布的文章1
答辩的项目Batch大小为64,循环次数为30次,通过在线上环境完成训练,模型最优精度评分为84.61。
最后更新 2020/10/29 17:14
阅读 571
图像分类
1. 问题分析
看到这个题目,最先想到的是MNIST的手写数字识别,深度神经网络学习的Hello World! 然而,这个仿佛要难上许多。我们先看(吐槽)数据,里面是大小不一,但又相差不大的英文签名图片,每个人写法不一,有分离的,有连笔的,有粗的,有模糊的,有一半的,有人居然用没有墨水的笔签名,还有人自己名字写错,重新改写的,好吧,这些我都忍了,居然还有指鹿为马,明明是张三的签名,标签居然是李四!!!看到这样“真实”的数据,心中有一万匹马跑过!看来,数据得经过27层过滤。查阅了下资料,这种题一般有两种做法,第一种是将图片整体送入网络,直接得到签名。第二种是先将字符分离,逐个识别。不得不说第一种让人好喜欢,好直男,快刀斩乱麻,但是,做这样的直男,需要很大的本事才行,就如有人问撕葱:你为什么喜欢逛街?撕葱答:因为有钱啊!直不直!喜欢不喜欢!
2. 数据处理
既然选择了第二种方法,那么数据处理就显得尤为重要,字符分离的好坏,直接影响后面的识别。仔细观察数据,大致可以分为四类,第一类印刷体大概是”NOM:”这样,签名在后面的。第二类印刷体是“NOM”这样的,就是少了个冒号,签名在下面的。第三类是没有印刷体,第四类是看不清,或是空白的。所以重点是找到印刷体,就可以定位,进行图片切割。所以,数据处理又可以为分三步。
一是印刷体定位。我用的是opencv的模板匹配,将印刷体定位之后,进行第一次切割,将签名切割出来。
二是切割签名,得到单个字符。这里面要手工去噪声,没有连笔的字体好分离,有连笔的可以根据宽度或其它算法进行分离。
三是计算空格位置。外国人的名字就是麻烦,只能根据字间距,估算出空格位置。一般来说,如果分割出来的字符个数与标签字符个数(不计空格)相同,就认为分离对了,保存下来,将来用作下步训练网络用。
3.训练经过
训练为两步:
第一步是将前面得到的字符进行整形,得到28*28大小的图片,进行归一化处理。
第二步是设计一个网络,进行训练。这就跟那个MNIST基本相同了,感觉随便一个模型都能得到不错的准确率。
训练方法:
reduce_lr =ReduceLROnPlateau(monitor='val_acc', mode='max', factor=0.1, patience=3,verbose=1)
early_stopping =EarlyStopping(monitor='val_acc', mode='max', min_delta=0, patience=5,verbose=0)
优化方式:adam
图像分类
请先绑定您的微信账号 点击立即绑定
敬请谅解,如有疑问请联系FlyAI客服