最近参加阿里天池的“网络图像的文本检测”挑战赛,终于结束,最终排名第181,总共是1424只队伍参加。第一次参加机器学习挑战赛,成绩不是很理想,今天把一些体悟写一下,希望对后来参加的人有用。
一、赛题简介
在互联网世界中,图片是传递信息的重要媒介。特别是电子商务,社交,搜索等领域,每天都有数以亿兆级别的图像在传播。图片文字识别(OCR)在商业领域有重要的应用价值,是数据信息化和线上线下打通的基础,也是学术界的研究热点。然而,研究领域尚没有基于网络图片的、以中文为主的OCR数据集。本竞赛将公开基于网络图片的中英混合数据集,该数据集数据量充分,涵盖几十种字体,几个到几百像素字号,多种版式,较多干扰背景。期待学术界可以在本数据集上作深入的研究,工业界可以藉此发展基于OCR的图片管控,搜索,信息录入等AI领域的工作。
二、数据集
我们提供20000张图像作为本次比赛的数据集。其中50%用来作为训练集,50%用来作为测试集。该数据集全部来源于网络图像,主要由合成图像,产品描述,网络广告构成。典型的图片如图1所示:
图1:典型图片
这些图像是网络上最常见的图像类型。每一张图像或者包含复杂排版,或者包含密集的小文本或多语言文本,或者包含水印,这对文本检测和识别均提出了挑战。
对于每一张图像,都会有一个相应的文本文件(.txt)(UTF-8编码与名称:[图像文件名] .txt)。文本文件是一个逗号分隔的文件,其中每行对应于图像中的一个文本串,并具有以下格式:
X1,Y1,X2,Y2,X3,Y3,X4,Y4,“文本”
其中X1,Y1,Y2,X2,X3,X4,Y3,Y4分别代表文本的外接四边形四个顶点坐标。而“文本”是四边形包含的实际文本内容。
图2是标注的图片,红色的框代表标注的文本框。
图3是标注图片对应的文本文件。标注时我们对所有语言,所有看不清的文字串均标注了外接框(比如图2中的小字),但对于除了中文,英文以外的其它语言以及看不清的字符并未标注文本内容,而是以“###”代替。
图2:image.jpg
图3:image.txt
三、任务描述
网络图像的文本检测:
检测并定位图像中的文字行位置,允许使用其它数据集或者生成数据, 允许Fine-tuning 模型或者其他模型。入围团队提交报告中须对额外使用的数据集,或非本数据集训练出的模型做出说明。
训练集:
对于每个图像,只需要用[图像文件名] .txt里的坐标信息。即: X1,Y1,X2,Y2,X3,Y3,X4,Y4。
测试集:
输入:整图
输出:对于每一个检测到的文本框,按行将其顶点坐标输出到对应的[图像文件名] .txt中。
提交:
将所有图像对应的[图像文件名] .txt放到一个zip压缩包中,然后提交。
四、团队组建
团队的力量真的很重要,第一次参加机器学习挑战赛并完成数据提交,主要是组员一起分解任务,头脑风暴,群力群策分不开。
组队由4人组成,分别负责环境搭建、模型训练和优化、模型测试等。
五、应用工具
Ubuntu 14.04、Python3.5、TensorFlow、Shapely 1.5.13、Flask 0.10.1、Matplotlib 1.5.1、Scipy 0.19.0、Plumbum 1.6.2、Numpy 1.12.1、Ipython 6.1.0、Pillow 4.2.1等。
六、实现
从接触大数据及机器学习以来,学习了较多理论知识,但接触项目不多,大多都是课程的project。抱着重在参与、学习的态度,准备在天池大数据平台试试水。
A、 环境搭建
Ubuntu、TensorFlow的安装,网上教程很多,参考:
https://blog.csdn.net/y1250056491/article/details/78670710/
B、 参考Github上的项目进行模型训练
https://github.com/argman/EAST?spm=5176.9876270.0.0.60d22ef1Skvwzk
模型训练:
pythonmultigpu_train.py --gpu_list=0 --input_size=512 --batch_size_per_gpu=14--checkpoint_path=/tmp/east_icdar2015_resnet_v1_50_rbox/ \
--text_scale=512--training_data_path=/data/ocr/icdar2015/ --geometry=RBOX--learning_rate=0.0001 --num_readers=24 \
--pretrained_model_path=/tmp/resnet_v1_50.ckpt
模型测试:
python eval.py --test_data_path=/tmp/images/ --gpu_list=0 --checkpoint_path=/tmp/east_icdar2015_resnet_v1_50_rbox/ \
--output_dir=/tmp/
七、存在问题与总结
问题1:由于时间问题,使用Github别人的项目进行训练和测试,未进行任何优化,输出的结果正确率比较低。
问题2:训练的电脑GPU不好,造成训练时间很长,效率非常低。
问题3:机器学习TensorFlow方面的知识不够,还需要加强。