百度網(wǎng)盤AI大賽表格結(jié)構(gòu)化賽題需檢測表格、行、列及合并單元格。方案選用ppyoloe-plus X網(wǎng)絡,通過擴充有遮擋數(shù)據(jù)、增大訓練resize尺寸、替換SIOU為回歸損失優(yōu)化,經(jīng)300輪訓練,單圖耗時合規(guī),獲第9名,還提及有效、無效策略及待優(yōu)化點。
???AI 智能聊天, 問答助手, AI 智能搜索, 免費無限量使用 DeepSeek R1 模型???

百度網(wǎng)盤AI大賽-表格檢測進階:表格的結(jié)構(gòu)化第9名方案
一、賽題背景
隨著票據(jù)、名單等帶有表單、表格的文件被廣泛應用,將紙質(zhì)文件轉(zhuǎn)化成電子數(shù)據(jù)并保存管理成為了很多企業(yè)的必然工作。傳統(tǒng)人工錄入的方式效率低、差錯多、流程長,如果能通過技術處理,實現(xiàn)表格圖片的結(jié)構(gòu)化展現(xiàn),則可以很大程度降低成本,提高效率以及使用體驗。本次比賽希望各位選手能通過OCR等技術解決此痛點問題,識別表格圖片的內(nèi)容與坐標,精準還原紙質(zhì)數(shù)據(jù)。
二、數(shù)據(jù)分析
- 本次比賽發(fā)布的訓練集共7742張圖片。
- 數(shù)據(jù)類型大致可分為截屏電子表和拍照電子表。其中截屏電子表包括有邊界的和無邊界的電子表,拍照電子表可分為有遮擋的無遮擋的。
- 檢測目標分為四類,分別是整體表格(table)、表格行(row)、表格列(column)、跨多行/列的合并單元格(spanning_cell)。
? ? ? ?
- 如上圖所示是經(jīng)過初步訓練后的有遮擋的檢測結(jié)果,存在較為嚴重的漏檢,因此本次比賽著重優(yōu)化有遮擋的表格檢測。 在訓練集中這類圖片只有極少數(shù),所以經(jīng)過裁剪,篩選,粘貼等方式生成了很多新的此類型數(shù)據(jù)作為數(shù)據(jù)擴充。
- 另外,由于檢測的行和列都為窄長的目標,且較短邊長度極短。我們知道越大的尺寸越有利于小目標的檢測,因此增大訓練時隨機resize的尺寸。不過由于自身設備的限制,最大只增大到832(理論上來說更大一些效果會更好)。
三、評價指標
- 本次比賽的評價指標為:precision 和 recall。針對每一個類別box,pred box與gt box計算iou>=0.9且類別正確記為TP,未匹配的gt box記為FN,同一gt box僅可正確匹配一次。precision為所有類別的平均precision,recall為所有類別的平均recall,最終排名按照上述兩個指標的加權(quán)分數(shù)從大到小依次排序。
- 機器配置:V100,顯存15G,內(nèi)存10G
- 單張圖片耗時>2s,決賽中的性能分數(shù)記0分
- 由評價指標可知,iou>=0.9且類別正確才會記為TP,而Paddle Detection 中的默認iou閾值為0.5,在此驗證時將其改變?yōu)?.9.
四、網(wǎng)絡模型
- 此次我們首先選取了 Paddle Detection 套件中的ppyoloe-plus和VitDet來訓練測試,因為檢測會對顯存以及時間有要求,最終放棄了VitDet, 采用 ppyoloe-plus 作為本次比賽的 baseline。網(wǎng)絡架構(gòu)如圖所示:
? ? ? ?
- 其次考慮到ppyoloe-plus有不同大小網(wǎng)絡的版本,我們知道,通常來講相同架構(gòu)下網(wǎng)絡越深性能越好,在檢測到最大的X網(wǎng)絡也滿足檢測時間要求后,最終采用ppyoloe-plus的X網(wǎng)絡。
五、訓練細節(jié)
本次對訓練集所有圖片進行訓練,并根據(jù)A榜測試集的類型分布挑選一些代表性的作為驗證集,其中由于有遮擋的表格檢測是本次比賽的難點,因此新生成的有遮擋的表格圖片占驗證集比重最大。
數(shù)據(jù)擴充
- 通過裁剪,篩選,然后隨機粘貼方式生成新的帶有遮擋框或者圖表格的數(shù)據(jù)。如下圖所示:
? ? ? ? ? ?
數(shù)據(jù)增強
- 隨機像素內(nèi)容變換,包括對亮度、對比度、飽和度、色相角度、通道順序的調(diào)整
- 隨機擴張,填充值為 [123.675, 116.28, 103.53]
- 隨機裁剪
- 隨機翻轉(zhuǎn)
- 按批次隨機縮放,縮放大小選取列表為 [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 數(shù)據(jù)集上的預訓練模型。
- 首先,我們采用 LinearWarmup 策略對ppyoloe-plus-x 進行預熱,其中,預熱周期為 5 epochs。 之后,采用 CosineDecay 策略對學習率進行調(diào)整,其中,訓練的基礎學習率為 0.0001, 訓練周期為 360 epochs。此外,我們采用動量為 0.9 的 Momentum 優(yōu)化器對網(wǎng)絡進行優(yōu)化。同時,我們采用 Focal loss 作為分類損失,采用 SIOU 作為回歸損失,采用 L1 Loss 計算預測值與真實值之間的誤差,采用 DF loss 計算預測分布與真實分布之間的距離,并將上述四個損失的加權(quán)和作為模型的總損失。
六、改進策略
有效策略:
- 對有遮擋框和圖表格的類型進行數(shù)據(jù)擴充。
- 增大隨機縮放大小到832。
- 采用SIOU替換GIOU作為回歸損失函數(shù)。
無效策略:
- Mosaic,Mixup,Cutmix等數(shù)據(jù)增強。
- 添加輕量級注意力機制,如CBAM,SE等。
待優(yōu)化策略:
- 預測后處理模塊-自動糾正坐標。
- 引入坐標注意力機制。
七、文件
- PaddleDetection-release-2.5:檢測套件
- Modify/* 修改配置文件
- gen_data.py 數(shù)據(jù)擴充腳本
- gen_anno.py VOC標簽生成腳本
- label_list.txt 類別標簽文件
- train.txt 訓練集標簽文件
- predict_final 最終提交結(jié)果
- predict_corre.py 后處理模塊(不能保證泛化性,最終未采用)
In [?]
# 解壓數(shù)據(jù)集 此訓練數(shù)據(jù)集已經(jīng)添加了新擴充的數(shù)據(jù),無需再次生成%cd /home/aistudio
!unzip /home/aistudio/data/data196460/train.zip!unzip /home/aistudio/data/data196460/testA.zip
登錄后復制
? ?
In [?]
# 解壓 PaddleDetection 套件%cd /home/aistudio/
!unzip /home/aistudio/data/data196442/PaddleDetection.zip
登錄后復制
? ?
In [?]
# 安裝相關包%cd /home/aistudio/PaddleDetection
! pip install -r requirements.txt
登錄后復制
? ?
In [?]
# 修改配置文件%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()
In [?]
# 訓練%cd /home/aistudio/PaddleDetection
! python tools/train.py -c configs/ppyoloe/ppyoloe_plus_crn_x_table.yml
登錄后復制
? ?
In [?]
# 模型導出%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\
登錄后復制
? ?
In [?]
# 測試%cd /home/aistudio/work/predict_final/
!python predict.py /home/aistudio/work/predict_final/imgs /home/aistudio/work/predict_final/output
登錄后復制
? ?
以上就是百度網(wǎng)盤AI大賽-表格檢測進階:表格的結(jié)構(gòu)化優(yōu)勝方案的詳細內(nèi)容,更多請關注php中文網(wǎng)其它相關文章!