★★★ 本文源自AlStudio社区精品项目,【点击此处】查看更多精品内容 >>>
一、赛题分析及思路
-
背景:随着OCR和版面分析处理技术不断发展,信息电子化的效率已经大幅度提高,人工智能已经能够将很多格式规整的资料轻松转化为可编辑的电子文稿;但生活中更多的内容资料往往是复杂的,具有字体样式多元、颜色丰富的特点,因此实现复杂版面的识别至关重要。本次赛题希望选手有所突破,解决复杂版面的分析难点,精准识别扫描资料中的字体样式以及颜色,大幅度提高人们的使用效率
-
分析:本次赛题可以看成多标签分类的目标检测问题,参赛者需要将不同风格样式的文字框选出来,并判断框选出来的文字实例具体包含哪些样式。因此可以看成是目标检测+多标签分类的二阶段问题,如行人属性分析。数据集样例可视化如下:
-
思路:
**1.模型选择:**前期尝试使用PPYOLOE+_L模型+PPHGNet_base模型,调优后A榜分数:0.98846,单张图片测试耗时为 0.12621 s,为提高模型性能,选择PPYoloE+_M模型+PPHGNet_small模型,调优后A榜分数:0.98836,单张图片测试耗时为 0.07661 s,模型性能提高80%,精度几乎没有下降。
**2.数据增强:**由于本次目标检测和多标签分类较为简单,因此没做额外的数据增强,仅用的基础模型,并且发现倾斜字体的判断仅存在与字体向左偏,因此去掉了图像翻转的数据增强。为提高模型性能在多个尺度上进行训练,不断降低推理尺寸,目标检测从640->320,最终确定为320px的推理尺寸,在此尺寸下模型性能大幅提高,精度几乎没有下降。
RandomDistort,RandomExpand,RandomCrop
**3.数据预处理:**由于下划线的目标在labels中没有将下划线包含在bbox内,因此训练出来的目标检测模型也只能框选到字体部分,下划线没有包含在内。因此多标签分类准备数据,即裁剪图片时,会在bbox的基础上额外向下裁剪一定比例,确保下划线类别图像含有下划线这一特征。目标检测出来的框同时也会向下延伸一定比例。
- B榜成绩 :baseline 在 B 榜分数为 0.98491,单张图片测试耗时为 0.07626 s。
二、数据分析
- 数据说明: 本次比赛最新发布的数据集共包含训练集、A榜测试集、B榜测试集三个部分,其中训练集共 4904 张图片,A榜测试集共 1001 张图片。训练集包含图片和同名的txt标签,选手在使用中可以自行分配训练和测试。测试集A是A榜的测试集,仅包含图片,不包含标签;训练集中的txt文件中为json格式,格式示例如下:
- 数据集统计: 如下图所示,训练集宽度集中分布在300px像素最多,高度集中分布在 20-80 px 之间,由于高度小于宽度,我们将网络的按批次缩放范围设置为 256-448 px,推理的时候使用320px进行推理。
数据集准备
# 解压数据集
%cd /home/aistudio/work
!unzip /home/aistudio/data/data205363/train.zip
!unzip /home/aistudio/data/data205363/test.zip
# 解压套件
%cd /home/aistudio
!unzip /home/aistudio/PaddleDetection-release-2.6.zip
!unzip /home/aistudio/PaddleClas-release-2.5.zip
# 生成文字风格检测COCO标签
%cd /home/aistudio/work/
!python txt2coco.py
# 生成多标签分类数据集
%cd /home/aistudio/work/
!mkdir /home/aistudio/PaddleClas-release-2.5/dataset/crop_image
!python txt2label.py
PP-YOLOE_m 训练 (文字风格检测)
# 安装PaddleDetection依赖包
%cd /home/aistudio/PaddleDetection-release-2.6
!pip install --user -r requirements.txt -i https://mirror.baidu.com/pypi/simple
# 修改配置文件
%cd /home/aistudio/work/modify_code
!cp analysis.yml /home/aistudio/PaddleDetection-release-2.6/configs/datasets/
!cp ppyoloe_plus_crn_analysis.yml /home/aistudio/PaddleDetection-release-2.6/configs/ppyoloe
!cp ppyoloe_plus_crn_base.yml /home/aistudio/PaddleDetection-release-2.6/configs/ppyoloe/_base_
!cp ppyoloe_plus_reader_base.yml /home/aistudio/PaddleDetection-release-2.6/configs/ppyoloe/_base_
!cp optimizer_80e.yml /home/aistudio/PaddleDetection-release-2.6/configs/ppyoloe/_base_
#训练
%cd /home/aistudio/PaddleDetection-release-2.6
! python tools/train.py -c /home/aistudio/PaddleDetection-release-2.6/configs/ppyoloe/ppyoloe_plus_crn_analysis.yml
#导出
%cd /home/aistudio/PaddleDetection-release-2.6
! python tools/export_model.py -c /home/aistudio/PaddleDetection-release-2.6/configs/ppyoloe/ppyoloe_plus_crn_analysis.yml \
--output_dir=/home/aistudio/work/predict_code \
-o weights=/home/aistudio/PaddleDetection-release-2.6/output/ppyoloe_plus_crn_analysis/model_final.pdparams
PP-HGNet (多标签分类)
# 修改配置文件
%cd /home/aistudio/work/modify_code
!cp PPHGNet_small.yaml /home/aistudio/PaddleClas-release-2.5/ppcls/configs/ImageNet/PPHGNet/
!cp engine.py /home/aistudio/PaddleClas-release-2.5/ppcls/engine/
#训练
%cd /home/aistudio/PaddleClas-release-2.5
!python tools/train.py -c /home/aistudio/PaddleClas-release-2.5/ppcls/configs/ImageNet/PPHGNet/PPHGNet_small.yaml
#导出
%cd /home/aistudio/PaddleClas-release-2.5
!python tools/export_model.py \
-c /home/aistudio/PaddleClas-release-2.5/ppcls/configs/ImageNet/PPHGNet/PPHGNet_small.yaml \
-o Global.pretrained_model=/home/aistudio/PaddleClas-release-2.5/output/PPHGNet_small/latest \
-o Global.save_inference_dir=/home/aistudio/work/predict_code/inference/
打包提交
# 打包提交,0.98836pre - m320,80epoch,s224,300epoch.zip文件为B榜最终提交文件
%cd /home/aistudio/work/predict_code/
!zip -r submit.zip ./*
三、后续优化点
- 模型性能与前面的参赛选手依然有较大差距,因此可以尝试更小的模型,在通过知识蒸馏等操作进一步提高模型性能
参考项目
[1] 百度网盘AI大赛——版式分析场景 Baseline
https://aistudio.baidu.com/aistudio/projectdetail/5869129
此文章为搬运
原项目链接