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

一、赛题背景

随着票据、名单等带有表单、表格的文件被广泛应用,将纸质文件转化成电子数据并保存管理成为了很多企业的必然工作。传统人工录入的方式效率低、差错多、流程长,如果能通过技术处理,实现表格图片的结构化展现,则可以很大程度降低成本,提高效率以及使用体验。本次比赛希望各位选手能通过OCR等技术解决此痛点问题,识别表格图片的内容与坐标,精准还原纸质数据。

二、数据分析

  • 本次比赛发布的训练集共7742张图片。
  • 数据类型大致可分为截屏电子表和拍照电子表。其中截屏电子表包括有边界的和无边界的电子表,拍照电子表可分为有遮挡的无遮挡的。
  • 检测目标分为四类,分别是整体表格(table)、表格行(row)、表格列(column)、跨多行/列的合并单元格(spanning_cell)。

  • 如上图所示是经过初步训练后的有遮挡的检测结果,存在较为严重的漏检,因此本次比赛着重优化有遮挡的表格检测。
    在训练集中这类图片只有极少数,所以经过裁剪,筛选,粘贴等方式生成了很多新的此类型数据作为数据扩充。
  • 另外,由于检测的行和列都为窄长的目标,且较短边长度极短。我们知道越大的尺寸越有利于小目标的检测,因此增大训练时随机resize的尺寸。不过由于自身设备的限制,最大只增大到832(理论上来说更大一些效果会更好)。

三、评价指标

  • 本次比赛的评价指标为:precision 和 recall。针对每一个类别box,pred box与gt box计算iou>=0.9且类别正确记为TP,未匹配的gt box记为FN,同一gt box仅可正确匹配一次。precision为所有类别的平均precision,recall为所有类别的平均recall,最终排名按照上述两个指标的加权分数从大到小依次排序。
  • 机器配置:V100,显存15G,内存10G
  • 单张图片耗时>2s,决赛中的性能分数记0分
  • 由评价指标可知,iou>=0.9且类别正确才会记为TP,而Paddle Detection 中的默认iou阈值为0.5,在此验证时将其改变为0.9.

四、网络模型

  • 此次我们首先选取了 Paddle Detection 套件中的ppyoloe-plus和VitDet来训练测试,因为检测会对显存以及时间有要求,最终放弃了VitDet, 采用 ppyoloe-plus 作为本次比赛的 baseline。网络架构如图所示:

  • 其次考虑到ppyoloe-plus有不同大小网络的版本,我们知道,通常来讲相同架构下网络越深性能越好,在检测到最大的X网络也满足检测时间要求后,最终采用ppyoloe-plus的X网络。

五、训练细节

本次对训练集所有图片进行训练,并根据A榜测试集的类型分布挑选一些代表性的作为验证集,其中由于有遮挡的表格检测是本次比赛的难点,因此新生成的有遮挡的表格图片占验证集比重最大。

数据扩充

  • 通过裁剪,筛选,然后随机粘贴方式生成新的带有遮挡框或者图表格的数据。如下图所示:

数据增强

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

训练配置

  • 总迭代周期: 300 epoch。
  • 预训练模型: ppyoloe-plus-x 在 Object365 数据集上的预训练模型。
  • 首先,我们采用 LinearWarmup 策略对ppyoloe-plus-x 进行预热,其中,预热周期为 5 epochs。 之后,采用 CosineDecay 策略对学习率进行调整,其中,训练的基础学习率为 0.0001, 训练周期为 360 epochs。此外,我们采用动量为 0.9 的 Momentum 优化器对网络进行优化。同时,我们采用 Focal loss 作为分类损失,采用 SIOU 作为回归损失,采用 L1 Loss 计算预测值与真实值之间的误差,采用 DF loss 计算预测分布与真实分布之间的距离,并将上述四个损失的加权和作为模型的总损失。

六、改进策略

有效策略

  • 对有遮挡框和图表格的类型进行数据扩充。
  • 增大随机缩放大小到832。
  • 采用SIOU替换GIOU作为回归损失函数。

无效策略

  • Mosaic,Mixup,Cutmix等数据增强。
  • 添加轻量级注意力机制,如CBAM,SE等。

待优化策略

  • 预测后处理模块-自动纠正坐标。
  • 引入坐标注意力机制。

七、文件

  • PaddleDetection-release-2.5:检测套件
  • Modify/* 修改配置文件
  • gen_data.py 数据扩充脚本
  • gen_anno.py VOC标签生成脚本
  • label_list.txt 类别标签文件
  • train.txt 训练集标签文件
  • predict_final 最终提交结果
  • predict_corre.py 后处理模块(不能保证泛化性,最终未采用)

运行

# 解压数据集 此训练数据集已经添加了新扩充的数据,无需再次生成
%cd /home/aistudio
!unzip /home/aistudio/data/data196460/train.zip
!unzip /home/aistudio/data/data196460/testA.zip
# 解压 PaddleDetection 套件
%cd /home/aistudio/
!unzip /home/aistudio/data/data196442/PaddleDetection.zip
# 安装相关包
%cd /home/aistudio/PaddleDetection
! pip install -r requirements.txt
# 修改配置文件
%cd /home/aistudio/work/modify/
!cp ppyoloe_plus_crn_table.yml /home/aistudio/PaddleDetection/configs/ppyoloe/_base_
!cp ppyoloe_plus_reader_table.yml /home/aistudio/PaddleDetection/configs/ppyoloe/_base_
!cp ppyoloe_plus_crn_x_table.yml /home/aistudio/PaddleDetection/configs/ppyoloe/
!cp voc.yml /home/aistudio/PaddleDetection/configs/datasets/voc.yml
  • IOU_loss替换:将PaddleDetection/ppdet/modeling/heads/ppyoloe_head.py中的第84行self.iou_loss = GIoULoss()改为self.iou_loss = SIoULoss()
# 训练
%cd /home/aistudio/PaddleDetection
! python tools/train.py -c configs/ppyoloe/ppyoloe_plus_crn_x_table.yml
# 模型导出
%cd /home/aistudio/PaddleDetection
! python tools/export_model.py -c configs/ppyoloe/ppyoloe_plus_crn_x_table.yml \
                               --output_dir=/home/aistudio/work/predict_final/\
                               -o weights=/home/aistudio/data/data186448/best_model.pdparams\
# 测试
%cd /home/aistudio/work/predict_final/
!python predict.py /home/aistudio/work/predict_final/imgs /home/aistudio/work/predict_final/output

参考项目

[1] 百度网盘AI大赛——表格检测进阶:表格的结构化 Baseline

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

此文章为转载
原文链接

Logo

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

更多推荐