paddleocr学习笔记(七)训练自己的文字检测数据

paddle高阶API课程中学到的万能公式:

(1) 问题定义--(2)数据准备--(3)模型选择和开发--(4)模型训练和调优--(5)模型评估测试--(6)部署上线

我们使用PaddleOCR,问题已经定义好了就是文字识别任务,模型框也都有,除非你要尝试新的模型。

我们可以做的就是针对自己的具体任务准备自己的数据,并将数据做一定的扩充,学名叫数据增强,然后就可以开启训练了。最终生成笔记(六)里面使用的模型。

自己的数据准备这里还是参照官方文档将数据标注转换成PaddleOCR训练需要的格式,比如训练检测需要的样本标注先要将icdar2015格式转换成json格式。

前面六个笔记从训练到c++部署已经走通一遍,下面就要专攻训练了。在笔记(二)中有一步当时偷懒了,没有使用PaddleOCR的ppocr/utils/gen_label.py转换icdar2015数据,而是使用PaddleOCR提供的转换好的标注文件。在windows下使用gen_label.py时遇到了两个问题,一个是读原标注文件一个是写生成文件,需要指定编码,否则会报错,linux有没有问题还没有尝试。

gen_label.py需要修改的地方分别是:

 with open(out_label, 'w') as out_file:

改为:

 with open(out_label, 'w', encoding='utf-8') as out_file:

with open(os.path.join(input_dir, label_file), 'r') as f:

改为:

with open(os.path.join(input_dir, label_file), 'r', encoding='utf-8-sig') as f:

我是在PaddleOCR根目录下执行的:

python ppocr/utils/gen_label.py --mode="det" --root_path="train_data/icdar2015/text_localization/icdar_c4_train_imgs/"  \
                    --input_path="train_data/icdar2015/text_localization/ch4_training_localization_transcription_gt" \
                    --output_label="train_icdar2015_label.txt"

生成的结果跟PaddleOCR提供的下载文件有2点不同。一、标注文件顺序不同,PaddleOCR提供的显然是做了数据的混洗,即顺序打乱了。二、生成的json文件路径比PaddleOCR多了train_data/icdar2015/text_localization/,可能把上面的脚本改一下路径就能与PaddleOCR下载的文件路径保持一致。

参考gen_label.py实现,可知应该在/train_data/icdar2015/text_localization文件夹下执行如下脚本才可以生成图片路径与PaddleOCR下载的文件路径保持一致:

# 将官网下载的标签文件转换为 train_icdar2015_label.txt
python ../../../ppocr/utils/gen_label.py --mode="det" --root_path="icdar_c4_train_imgs/"  \
                    --input_path="ch4_training_localization_transcription_gt" \
                    --output_label="train_icdar2015_label.txt"

经验证通过,生成的文件除了顺序不一致之外内容一致。

生成测试/验证样本标注:

python ../../../ppocr/utils/gen_label.py --mode="det" --root_path="ch4_test_images/"  \
                    --input_path="Challenge4_Test_Task1_GT" \
                    --output_label="test_icdar2015_label.txt"

所以就可以准备自己的数据了,准备成icdar2015标注格式:四个顶点坐标,从左上角开始按顺时针顺序排列,中间用英文逗号分隔,最后一个坐标后面用逗号分隔的是文本内容,对于训练检测不重要,只是不要是“###”就好,当其内容为“###”时,表示该文本框无效,在训练时会跳过。

参考标注如下:(如下的标注格式才可以使用gen_label.py转换成PaddleOCR检测需要的数据格式)

377,117,463,117,465,130,378,130,Genaxis Theatre
493,115,519,115,519,131,493,131,[06]
374,155,409,155,409,170,374,170,###
492,151,551,151,551,170,492,170,62-03
376,198,422,198,422,212,376,212,Carpark
494,190,539,189,539,205,494,206,###
374,1,494,0,492,85,372,86,###

猜你喜欢

转载自blog.csdn.net/juluwangriyue/article/details/114550294