★★★ 本文源自AlStudio社区精品项目,【点击此处】查看更多精品内容 >>>

一、赛题分析

  • 背景:随着OCR和版面分析处理技术不断发展,信息电子化的效率已经大幅度提高,人工智能已经能够将很多格式规整的资料轻松转化为可编辑的电子文稿;但生活中更多的内容资料往往是复杂的,具有字体样式多元、颜色丰富的特点,因此实现复杂版面的识别至关重要。本次赛题希望选手有所突破,解决复杂版面的分析难点,精准识别扫描资料中的字体样式以及颜色,大幅度提高人们的使用效率

  • 分析:本次赛题可以看成多标签分类的目标检测问题,参赛者需要将不同风格样式的文字框选出来,并判断框选出来的文字实例具体包含哪些样式。其中,比赛的样式包含7种——红色、绿色、蓝色、加粗、斜体、删除线、下划线,需要注意的是,文字并非仅包含一种样式,有的文字图像可能既是蓝色,又是斜体。比赛难点如下:1)文字检测框并非矩形框,而是任意八点四边形。参赛者可以采用旋转矩形框、语义分割方法或热图方法获得更加精确的坐标结果。2)文字的分类是多标签分类问题,而非多分类问题,由于风格样式和文字内容的多样性,对网络的泛化能力有一定要求。当然,也可以强行将其看成 2 7 {2}^{7} 27 = 128 类分类问题,但是这种思路计算成本较高,且由于类别随着样式增多指数级增长,不利用后续样式的扩充。3)本次比赛对推理速度和显存有一定要求,耗时大于50ms性能将记为0分,显存为15G,内存为10G,需要参赛者在精度和速度之间进行权衡。数据集样例可视化如下:

  • 比赛链接https://aistudio.baidu.com/aistudio/competition/detail/850/0/introduction

  • baseline 成绩 :baseline 在 A 榜分数为 0.87038, 精度为 0.91007, 召回率为 0.8307, 单张图片测试耗时为 0.0743 s,截止 4月7号,排名为1名。

二、数据分析

  • 数据说明: 本次比赛最新发布的数据集共包含训练集、A榜测试集、B榜测试集三个部分,其中训练集共 4904 张图片,A榜测试集共 1001 张图片。训练集包含图片和同名的txt标签,选手在使用中可以自行分配训练和测试。测试集A是A榜的测试集,仅包含图片,不包含标签;训练集中的txt文件中为json格式,格式示例如下:

  • 数据集统计: 如下图所示,训练集宽度集中分布在300到800 px之间,高度集中分布在 20-80 px 之间,由于高度小于宽度,我们将网络的按批次缩放范围设置为 320-800 px,以便有效利用各个尺度的文字图像。

  • 数据集下载

数据集类型是否开放百度网盘链接AI Studio链接
训练集已开放百度网盘下载AI studio引用
A榜测试集已开放百度网盘下载AI studio引用
B榜测试集不对外开放

三、评价指标

  • 本次比赛的评价指标为:precision 和 recall。

    • precision计算公式

     precision  = T P T P + F P \text { precision }=\frac{T P}{T P+F P}  precision =TP+FPTP

    • 针对每一个类别box,pred box与gt box计算iou>=0.5且水平方向iou>=0.8且类别正确记为TP,未匹配的pred box记为FP,同一gt box仅可正确匹配一次。最终precision为所有类别的平均precision。
    • recall计算公式

     recall  = T P T P + F N \text { recall }=\frac{T P}{T P+F N}  recall =TP+FNTP

    • 针对每一个类别box,pred box与gt box计算iou>=0.5且水平方向iou>=0.8且类别正确记为TP,未匹配的gt box记为FN,同一gt box仅可正确匹配一次。最终recall为所有类别的平均recall
    • 最终排名按照上述两个指标的加权分数从大到小依次排序,计算公式为

     score  = 0.5 ∗  precision  + 0.5 ∗  recall  \text { score }=0.5 * \text { precision }+0.5 * \text { recall }  score =0.5 precision +0.5 recall 

  • 机器配置:V100,显存15G,内存10G;

  • 单张图片耗时>50ms,决赛中的性能分数记0分。

  • 根据评价指标可知, 边界框的匹配较为宽松,采用矩形框虽然会带来一定精度损失,但是与旋转框等方式不会有太大的差异,但是考虑到文字内容和风格样式的多样性,确定边界框的正确类别可能存在一定难度。此外,将图像推理耗时控制在50ms的性能要求需要参赛者在推理速度和精度上进行有效均衡。

四、算法介绍

  • 如下图所示, baseline 是一种两阶段方案。我们将版式分析场景问题解耦为单目标检测问题和多标签分类问题。首先,我们使用 PP-YOLOE+ l 网络检测出不同样式的文字,之后利用 PP-LCNet 进行多标签分类。 对于 7 种样式, 我们使用sigmoid函数将预测分数映射到 0 到 1 之间。对于每一种样式,如果该样式的预测分数大于0.6,我们将该样式的标签设置为1,否则设置为 0。这里, PP-YOLOE+l 网络使用 PaddleDetection 实现, PP-LCNet 改写自 PaddleClas 源码。

五、训练细节

5.1 PP-YOLOE+ L

数据划分

  • 该部分不对数据集进行划分,采用全部数据进行训练,并根据 A 榜样例图片可视化结果和 A 榜测评分数选择最优模型作为 B 榜提交模型。

数据增广

  • 随机像素内容变换,包括对亮度、对比度、饱和度、色相角度、通道顺序的调整;随机扩张,填充值为 [123.675, 116.28, 103.53];随机裁剪; 随机翻转; 按批次随机缩放,缩放大小选取列表为 [320, 352, 384, 416, 448, 480, 512, 544, 576, 608, 640, 672, 704, 736, 768,800],; 归一化处理, 均值为 [0, 0, 0],标准差为 [1, 1, 1]

训练配置

  • 总迭代周期: 80 epoch, 除数据处理外,训练配置均采用官方配置。所有训练均在 V100 32G GPU进行,训练时长约3个小时。
  • 预训练模型: PP-YOLOE+ L 在 Object365 数据集上的预训练模型。
  • 首先,我们采用 LinearWarmup 策略对 PP-YOLOE+ L 进行预热,其中,预热周期为 5 epochs。 之后,采用 CosineDecay 策略对学习率进行调整,其中,训练的基础学习率为 0.001, 训练周期为 75 epochs。此外,我们采用动量为 0.9 的 Momentum 优化器对网络进行优化。同时,我们采用 Focal loss 作为分类损失,采用 GIOU 作为回归损失,采用 L1 Loss 计算预测值与真实值之间的误差,采用 DF loss 计算预测分布与真实分布之间的距离,并将上述四个损失的加权和作为模型的总损失。

5.2 PP-LCNet

数据生成

  • 多标签分类数据集通过从原图像裁剪单个文字图像实例生成, 数据集样例可视化如下:

数据划分

  • 训练集和测试集划分比例为 9:1。

数据增广

  • 缩放填充、归一化(均值为 [0, 0, 0],标准差为 [1, 1, 1])

训练配置

  • 模型总迭代周期为 60 epoch,选取验证集中汉明距离最小的模型作为提交模型 。所有训练均在 V100 32G GPU进行,训练时长约2个小时。
  • 我们采用 MultiLabelLoss 作为损失函数,采用 Adam 优化器和 MultiStepDecay 学习率调度策略对网络进行优化,初始学习率为 0.5*1e-2, 学习率衰减列表为 [10, 20, 30, 40, 50]。

数据集准备

# 解压数据集
%cd /home/aistudio/work
!unzip /home/aistudio/data/data205363/train.zip
!unzip /home/aistudio/data/data205363/test.zip
# 生成文字风格检测COCO标签
%cd /home/aistudio/work/
!python txt2coco.py
# 生成多标签分类数据集
%cd /home/aistudio/work/PPLCNet
!mkdir crop_image save_weight
!python txt2label.py
# 将多标签分类数据集划分为训练集和验证集,划分比例为 9:1 
%cd /home/aistudio/work/PPLCNet
!python labelsplit.py

PP-YOLOE+l 训练 (文字风格检测)

# 解压 PaddleDetection 套件
%cd /home/aistudio
!unzip /home/aistudio/data/data186448/PaddleDetection-release-2.6.zip
# 安装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_
#  PP-YOLOE+l 训练,训练周期为 80 epochs, 每 1个 epoch 打印一次日志,每 5 个 epoch保存一次模型,耗时约3小时
%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

PP-LCNet 训练 (多标签分类)

%cd /home/aistudio/work/PPLCNet/code
!python train_base.py

测试过程

# PP-YOLOE+l 模型导出,新训练的模型请根据模型位置更改weights路径
# PP-YOLOE+l 模型保存目录为 /home/aistudio/PaddleDetection-release-2.6/output/ppyoloe_plus_crn_analysis/
%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/data/data205363/ppyoloe+l.pdparams\
# 将训练好的模型拷贝到 predict.py 目录下, 这里拷贝的路径为之前训练好的模型路径, 
# PP-LCNet 模型保存路径为 /home/aistudio/work/PPLCNet/save_weight/base_best_model
!cp  /home/aistudio/data/data205363/base_best_model /home/aistudio/work/predict_code
# 预测结果可视化,耗时约48s
%cd /home/aistudio/work/predict_code/
!rm -r ./output_visualize
!mkdir output_visualize
!python visualize.py /home/aistudio/work/test  /home/aistudio/work/predict_code/output_visualize
# 提交测试,耗时约64s
%cd /home/aistudio/work/predict_code/
!rm -r ./output
!mkdir output
!python predict.py /home/aistudio/work/test  /home/aistudio/work/predict_code/output
# 打包提交,打包前,请务必保证训练模型已经导出,且提交测试通过
%cd /home/aistudio/work/predict_code/
!zip -r submit_4_4_1.zip ./ppyoloe_plus_crn_analysis predict.py cls_model.py base_best_model

六、后续优化点

  • baseline 仅使用百度网盘官方数据集进行训练,模型的泛化能力有限,因此,可以寻找其他的版式分析场景数据集进行预训练。‘
  • baseline 直接使用矩形框进行不同风格文字的检测,但是实际标签为八点四边形,因此,可以考虑旋转矩形框、热图或语义分割方案,从而获得更加精确的检测结果。
  • baseline 是一种两阶段网络,由于采用串行结构,耗时较长,因此,可以考虑在检测网络中并行进行多标签分类,以便提高推理速度。

参考项目

[1] 百度网盘AI大赛-表格检测第2名方案

https://aistudio.baidu.com/aistudio/projectdetail/5398861

[2] 百度网盘AI大赛——图像处理挑战赛:文档图像方向识别Baseline

https://aistudio.baidu.com/aistudio/projectdetail/4320301

此文章为搬运
原项目链接

Logo

学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>

更多推荐