/handwritten_recognition

手写汉字识别

Primary LanguagePythonMIT LicenseMIT

汉字书法识别

汉字书法识别

时间:2018/10/20-2018/10/21

地点:CSDN总部

https://www.tinymind.cn/competitions/41

数据集

竞赛数据提供100个汉字书法单字,包括碑帖,手写书法,古汉字等等。图片全部为单通道灰度jpg,宽高不定。

训练集:

训练集每个汉字400张图片,共计40000张图片,供参赛人员测试和开发参赛算法模型,训练集是标注好的数据,图片按照图片上的文字分类到不同的文件夹中,也就是说文件夹的名字就是文件夹里所有图片的标签。

测试集分两部分:

第一部分每汉字100张图片共10000张图片,在竞赛过程中,开放数据下载但不提供标签。比赛中第一阶段的排行榜对应参赛队伍第一部分数据的评测得分,这部分得分和排名不影响比赛的最终成绩,其目的是供参赛人员测试算法模型。

第二部分测试数据每汉字50张以上图片(单字图片数不固定)共16343张图片,比赛的最后阶段公开下载,不提供标签。

自由练习赛数据下载地址:

训练集: https://pan.baidu.com/s/1UxvN7nVpa0cuY1A-0B8gjg 密码: aujd

测试集: https://pan.baidu.com/s/1tzMYlrNY4XeMadipLCPzTw 密码: 4y9k

项目流程:

  1. 生成tfrecord数据;

  2. 加载预训练模型进行训练模型,保存ckpt文件;

  3. 模型调参;

  4. 校验集预测,生成csv文件。

代码说明

  1. tfrecord 相关代码

    以上代码修改部分来源见 https://gitee.com/ai100/quiz-w7-code

    根目录下运行命令

    # DATASET_DIR 是数据所在目录,需要下载和指定
    DATASET_DIR=~/tmp/CalligraphyDistinguish/DATASET/train
    python download_and_convert_data.py \
      --dataset_name=quiz \
      --dataset_dir=${DATASET_DIR}
  2. 数据预处理 相关代码

    inception网络的预处理比较全面,采用此网络的预处理过程对数据进行处理,但是需要注意几点:

    • 去除翻转处理,汉字的翻转等会影响文字的识别(翻转后的字有可能不是原字)
    • 去除裁切处理,图片的裁切很可能得到无意义的局部信息(因为图片汉字周围有留白,可进行适当的裁切)

    注意在预处理的工厂方法里增加修改后的预处理代码定义

  3. finetune inception v4

    train_image_classifier.py

  4. 展示 相关代码

    使用 Flask 做一个简单的展示页面,参考代码见参考的博客找不到了,后面找到了在记录把

项目中出现的问题汇总:

  1. 数据预处理时使用inception_processing.py,并将其文件中的数据裁切和随机翻转去掉,因为汉字经过此过程后可能变成其他字体;

  2. 模型训练时loss值偏大,达到50左右,其原因为weightdecay(0.004)偏大,默认值为0.00004,修改后loss值正常;

  3. 训练模型时,validation结果曾出现非常差,正确率仅为0.01,其原因可能为获取checkpoint文件失败;重新生成tfrecord文件运行后得到了正常的结果;

  4. 生成提交的CSV文件时的3种思路:

    1. 使用test数据生成tfrecord文件,利用原有框架生成识别结果文件;

    2. 参考eval_image_classifier.py文件进行修改,读取test图片,预处理,进行预测,最终生成预测文件;

    3. 利用ckpt文件生成pb文件,进而生成预测文件;

  5. test数据进行预测时,获取checkpoint时出现问题,因为指定的路径内没有checkpoint文件,无法获取最近的运行结果,修改后直接restore即可

  6. 提交数据的格式出现问题,label按列表的格式进行了保存,与比赛的要求不符,修改后正常。

体会:

  1. 项目中遇到问题时,先独立思考,再执行666法则,及时与同学及老师交流;

  2. 队员之间相互分享遇到的问题及解决办法。