二级字库:6492个简体汉字训练识别器对比脚本

上一篇文章介绍keras训练26个小写英文字母,这篇文章介绍一些中文单字的训练识别。

这里主要采集了二级汉字,共6492个中文汉字。然后对不同的著名的神经网络训练,包括Lenet, VGG16, ResNet等网络训练。

对比最后的识别率,找出最好的识别器。

中文单字数据库

这个汉字数据库可以使用下面的命令生成

其中deep_ocr_make_caffe_dataset可以在deep_ocr中找到。

其中数据库也包含了字体的旋转,增加数据库的数据量,下面是数据库的一个截图:

screenshot-from-2017-09-30-09-59-13

数据库也可以在此直接下载

训练脚本

数据库的训练脚本可以在这里下载使用。

除了标准的keras等, 脚本没有什么依赖库。

进入数据库的目录,运行 python keras_training.py 就可以了。

这篇文章简单介绍一下代码的内容。首先我们定义一个接口类KerasModel,便于对比不同的模型。

然后再main函数中,写了一个自动化对比这个识别器的函数。

然后我们从最简单的Lenet开始。

因为速度太慢了,在这篇文章没有用Cross Validation,只是在训练数据库训练,然后在测试数据库对比。

下面是直接用Lenet的不同结果,识别率比较低,大概0.38左右。

其中norm_shape是图片归一化的大小。指由于Lenet只是给10个数字的神经网络,但是现在需要识别的类是6492类别,所以直接使用Lenet存在明显的问题是神经网络的Filter不够多,最后FC层的节点数也不够。

所以添加了多几层卷积层,和增加了最后的FC的节点数。

然后下面的是一些识别结果,由于里面很多随机函数,所以会重复实验2到3次,看看平均值。

系统还对比其他的出名的识别器,譬如Cifar10CNN, VGG16, ResNet等等。还是还是不行。

每行的结尾是识别结果。

最后最优的结果的神经网络是

最后二级汉字的测试部分平均识别率为94%, 感觉很好了,调了一周了。

下一章试试写一个简单 图像分割算法 (region proposal)算法,提取所有汉字,然后识别汉字,这样可以有一个简单汉字识别的sdk。

发表评论

电子邮件地址不会被公开。 必填项已用*标注