![cover](https://img-blog.csdnimg.cn/img_convert/f46a09d5166f91f76ed41ca9a140779e.jpeg)
百度网盘AI大赛-表格检测进阶:表格的结构化第9名方案
百度网盘AI大赛-表格检测进阶:表格的结构化第9名方案。
·
★★★ 本文源自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
此文章为转载
原文链接
更多推荐
所有评论(0)