表格解析发展至今,仍然是一项很年轻的研究领域,出现了大量解决方案,常用的技术包括:线检测、box检测、分割、多模态融合、GCN、img2seq。以下按我的理解梳理一下表格解析各个流派,从中了解这项任务背后所采用的技术。在实际生产中,往往需要根据场景定制化多个模型进行堆叠以达到预期效果。
注意:以下的流派是按个人理解划分。
目录
流派一:精确定位行列(线定位、行列定位)
2017 DeepDeSRT
2019 UnetTable (腾讯)
2019 TableNet
2019 DeepTabStR
table-ocr/ table-detect
流派二:分割到最小粒度再合并
2019 SPLERGE(庖丁)开源
2021 SEM(icdar2021综合第三名,复杂表格第一名)未开源
流派三:单元格回归
(流派1+3):2020 CascadeTabNet 开源
2021 LGPMA(海康,icdar21top1) 开源
2021 Cycle-CenterNet
2021 CDeCNet (好未来表格大赛第二名)开源
流派四:GCN
方法一:GFTE 开源
TIES 开源
2020 TabStructNet 开源
2021 TGRNet 开源
流派五:img2seq图片描述+单元格回归
2021 TableMASTER(平安产险,icdar21top3,好未来表格大赛第一名)开源
2021.8.3RARE(百度paddlepaddle) 开源
2021 Maskrcnn+img2seq(好未来,icdar21top6)
流派六:端到端
Team: Kaen Context, Kakao Enterprise(韩国)
数据集
大厂技术
赛事
Icdar2021比赛排名
好未来表格识别大赛
评估方法:TEDS树距离
流派一:精确定位行列(线定位、行列定位)
2017 DeepDeSRT
《DeepDeSRT:Deep Learning for Detection and Structure Recognition of Tables in Document Images》
Faster RcNN+FCN对行列分割检测,由行列交叉确定表格结构
评价:类似腾讯UnetTable
2019 UnetTable (腾讯)
分割可见横线、可见竖线、不可见横线、不可见竖线。卷积核用1*5和5*1替代了常见的3*3。
评价:假设行列单元格文本宽高不一致时,不可见线分割效果并不好,对数据要求较高。现在主流的做法也是定位文本位置而不是行列间线位置。
2019 TableNet
分割出表格的mask和列的mask
评价:显而易见,不适用于复杂表格、合并单元格。如果场景不复杂,用定位框的水平重叠占比也能获得整列的区域信息。但如果有倾斜、纸张变形或者两列的文本容易定位到同一个box的情况,列分割还是有意义的。
2019 DeepTabStR
《DeepTabStR: Deep Learning based Table Structure Recognition》
Deepstr(见上)+变形卷积
table-ocr/ table-detect
代码:https://github.com/chineseocr/table-ocr
GitHub - Rid7/Table-OCR: Recognize tables from images and restore them into word.
u-net提取线
流派二:分割到最小粒度再合并
2019 SPLERGE(庖丁)开源
《Deep Splitting and Merging for Table Structure Decomposition》
代码:GitHub - CharlesWu123/SPLERGE: Deep Splitting and Merging for Table Structure Decomposition
Splurge=split+merge
Split网络切分最细粒度单元格,预测横线和竖线的位置
Merge网络将split结果进行合并
Projection pooling 替代n*n池化,提取行列的分隔信息
评价:可处理无线表,不适用于太倾斜的表
2021 SEM(icdar2021综合第三名,复杂表格第一名)未开源
Split, embed and merge: An accurate table structure recognizer
Sem类似splerge思想,先得到最细粒度的单元格,再进行合并
Split分割出整行整列的分隔符获取网格化表格
ROIAlign+BERT获取每个网格的图像+语义特性
GRU预测merge关系进行合并
评价:用了多模态信息,最小粒度再合并
流派三:单元格回归
(流派1+3):2020 CascadeTabNet 开源
code: https://github.com/DevashishPrasad/CascadeTabNet
端到端方法,带分类的检测,同时检测有线表及无线表,两者不同处理流程
有线表:基于膨胀腐蚀检测线
无线表:检测单元格内文本框
评价:分情况处理,有线表线检测,无线表单元格位置
2021 LGPMA(海康,icdar21top1) 开源
海康威视OCR/表格识别开源 - 腾讯云开发者社区-腾讯云
https://github.com/hikopensource/DAVAR-Lab-OCR/tree/main/demo/table_recognition/lgpma
LGPMA=LPMA+GPMA
局部单元格粒度LPMA:分割单元格文本区域、水平对齐、垂直对齐
全局整张图像粒度GPMA:单元格区域和非单元格区域的二分类mask、全局学习整张图上的非空单元格的水平和垂直对齐的soft mask
HRNet-W48 Cascade Mask RCNN
多尺度集成
3*2=6头多任务学习
评价:分别学习了文本和单元格的6头信息,大量分割网络叠加
2021 Cycle-CenterNet
中心点及顶点检测+中心点和顶点配对
评价:关键点检测及匹配
2021 CDeCNet (好未来表格大赛第二名)开源
dewarp+cascade Mask R-CNN+可变形卷积+dbnet
分别分割出表格体和单元格,规则排序单元格,求跨行跨列属性,dbnet检测文本。好未来有个ppt介绍好未来表格识别技术挑战赛,有具体方案介绍
GitHub - mdv3101/CDeCNet: CDeC-Net: Composite Deformable Cascade Network for Table Detection in Document Images
流派四:GCN
方法一:GFTE 开源
GFTE:Graph-based Financial Table Extraction基于图的金融表格提取
技术介绍:GFTE:Graph-based Financial Table Extraction_bigdreamerxz的博客-CSDN博客
GCN常用数据集- SciTSR介绍 - 简书
GFTE:Graph-based Financial Table Extraction | 码农家园
代码
https://github.com/Irene323/GFTE
注意: 虽然下文详细介绍了这个算法,但实际测试效果不佳,可跳过这部分
流程为:
a)获取多模态特征,包括图像、文本、坐标。
基于ocr获取文字的切片,从而获得文本及坐标信息。对整张图像进行卷积,使用F.grid_sample函数在每个切片的中心进行图像特征采样。
坐标信息:归一化坐标、中心点、宽高作为节点坐标特征。节点坐标特征及潜在边位置信息输入2层图卷积,cat后经过线性层
文本信息:文本信息通过词表编码,经过nn.embedding后输入GRU模块,作为节点文本特征。节点文本特征及潜在边位置信息输入2层图卷积,cat后经过线性层
图像信息:3层Conv2d网络获得图像整体特征,单元格中心点采样作为图像特征。节点文本特征及潜在边位置信息输入2层图卷积,cat后经过线性层
b)使用torch_geometric.transforms.KNNGraph函数进行KNN,获得每个节点最邻近的N个节点,从而减少这些节点之间的潜在边,降低计算复杂度。
c)聚合潜在边两端节点的多模态特征,作为边的特征,对这些边进行分类,判断同行、同列、无关。这个算法预测的是同行同列,不是最邻近的节点。同行同列可以分开训练模型。
定位和文本信息有用,图像微乎其微。个人理解是从32*32的图像特征中采样一个中心点特征作为图像特征,包含信息太少了,用整个区域的均值用处可能还大一点,用kernel加粗的线条也没用到。
torch_geometric.transforms.KNNGraph介绍
torch-geometric:torch_cluster库knn_graph函数详解_噢啦啦耶的博客-CSDN博客
knn获得的边默认邻居节点位置在前,可使用cosine计算节点距离
缺陷:
1、Knn限制,列间距大的可能不在top中,水平关系检测能力弱于垂直关系检测
2、线信息基本没用上
3、检测的是同行、同列关系,不是邻接关系,还需要后处理筛选
4、从同行、同列关系反推结构复杂
5、准确率很一般,只有90%,非常规整的表格也检测错误,90%只是针对同行同列判断
复现用了开源代码和数据集后,效果不理想,最奇怪的是经过图卷积后,得到了N维完全一致的数据,N为cell数量。
网上另一个的疑问
“经过对GFTE代码的复现之后,通过GCN进行训练,发现每次训练几乎所有预测都集中在最多分类的边上,比如预测为0的边有10000条,预测为1的边有300条,那么预测值就都是0,这导致了看起来准确率很高,但是完全不可用的情况。”
评价:GCN学习单元格同行同列关系,开源代码效果不好,只能获得局部连接信息,knn下行关系容易丢失
TIES 开源
《Rethinking Table Recognitionusing Graph Neural Networks》
GitHub - shahrukhqasim/TIES-2.0: Code for: S.R. Qasim, H. Mahmood, and F. Shafait, Rethinking Table Recognition using Graph Neural Networks (2019)
基于GCN预测单元格邻接关系(同行、同列、同单元格),采用蒙特卡洛采样
评价:GCN学习邻接关系,同GFTE类似
2020 TabStructNet 开源
GitHub - gds101054108/TabStructNet
Tabstructnet=Maskrcnn+GCN(TIES)
Maskrcnn自顶向下单元格检测
GCN自底向上获取单元格之间的行列关系矩阵(行邻接矩阵+列邻接矩阵),从而得到始末行列信息
评价:单元格检测+GCN学习单元格关系矩阵
2021 TGRNet 开源
https://github.com/xuewenyuan/TGRNet
TGRNet=语义分割+GCN
分割得到单元格区域,得到空间坐标。基于图像和坐标特征构建图,通过2路GCN来分别学习行列特征进行序列分类,得到逻辑坐标(第几行,第几列的意思?)
评价:单元格检测+GCN学习逻辑坐标
流派五:img2seq图片描述+单元格回归
2021 TableMASTER(平安产险,icdar21top3,好未来表格大赛第一名)开源
GitHub代码链接:GitHub - JiaquanYe/TableMASTER-mmocr: 2nd solution of ICDAR 2021 Competition on Scientific Literature Parsing, Task B.
介绍:重磅开源!平安产险提出TableMASTER:表格识别大师 - 腾讯云开发者社区-腾讯云
论文解读丨表格识别模型TableMaster - 华为云开发者联盟 - 博客园
采用多任务学习的模式,同时进行表格结构序列预测img2seq以及单元格位置回归box regression,最后通过后处理匹配算法,融合表格结构序列和单元格文本内容。
统计数据集后将模型最大输出序列长度定为500(预测的单元格数量远小于500),并设计了39+2(开始符、结束符)个类别标签。
表格结构识别+单元格回归:基于master识别算法改进的双流结构,“为了使表格序列预测的长度与回归单元格的数目对齐,在训练时会把单元格位置回归分支中非单元格的地方Mask掉,不算入bbox回归损失。”
文本定位:PSENET
文本识别:master
Cell聚合方式:Center Point Rule,IOU Rule,以及Distance Rule。
评价:整体表格描述+单元格位置,和百度的做法基本一致,区别在于1)rare用了GRU,tableMASTER用了Transformer 2)双分支结构细节差别
2021.8.3RARE(百度paddlepaddle) 开源
GitHub Star 13.9k,顶级项目全新开源表格识别算法_风度78的博客-CSDN博客
基于yolov2检测技术对文档图片中的文本、表格、图片、标题与列表区域进行分类(即版面分析)。同时还可以利用RARE图像描述技术进行表格识别,完整地提取表格结构信息,使得表格图片变为可编辑的 Excel 文件。具体结构看我的另一篇单独介绍rare的文章。
Rare最早是做ocr的,和平安tablemaster的master最早做ocr异曲同工
评价:整体表格描述+单元格位置
2021 Maskrcnn+img2seq(好未来,icdar21top6)
分成分割和图片描述2个方案,然后用一套规则,选取最好的结果
Maskrcnn:五个基于Mask RCNN的检测模型,分别检测表头/表体检测,表格行检测,表格列检测,单元格检测,文本行检测。用了不同的优化器。
Img2seq: 按照文本检测的结果来对每个单元格中的内容进行编号,然后采用CNN对图像进行编码,采用transformer来解码得到表格结构。之后将相应的文本行识别的内容填进去。
评价:5头分割+1种比较特殊的img2seq。有点海康+图片描述2条线走的意思。
流派六:端到端
Team: Kaen Context, Kakao Enterprise(韩国)
12层只有解码的线性transformer,输出是HTML序列
将原始输入图像展开成(N,8*8*3)的序列,将图像进行线性映射为512维,目标HTML进行embedding为512维度。将两个512维度的信息拼接起来,并用位置编码进行区分,得到一个‘图像-文本序列’
Inference: The outputs of our model are sampled with beam search (beam=32).
评价:怪怪的,前面像vit,训练输入是图像文本,推理输入是啥。未出现在最终的排名榜上,但出现在了icdar的paper里,资料很少,属于比较稀有的一种方案。
数据集
Marmot、UW3、UNLY、ICDAR 2013、ICDAR 2019、PubTabNet、SciTSR(标注质量较差)、TableBank、FinTab
PubTabNet数据集包含500k训练数据+9k验证数据, https://github.com/ibm-aur-nlp/PubTabNet
大厂技术
百度:表格文字识别,文本全字段识别,快速响应,免费试用-百度AI开放平台
腾讯:文字识别 OCR_ 图片文字识别_图片文字智能识别-腾讯云。
阿里:读光
赛事
Icdar2021比赛排名
ICDAR 2021 Competition on Scientific Literature Parsing
Team Name | TEDS Simple | TEDS Complex | TEDS all |
Davar-Lab-OCR VCGroup DBJ PaodingAI anyone LTIAYN | 97.88 97.90 97.60 97.38 97.39 97.30 97.35 96.95 97.18 | 94.78 94.68 94.89 94.79 93.87 93.93 93.79 93.43 92.40 | 96.36 96.32 96.27 96.11 95.66 95.65 95.61 95.23 94.84 |
Davar-Lab-OCR团队,来自海康,
VCGroup团队,来自平安,
TAL团队,来自好未来
PaodingAI团队,来自庖丁
百度RARE在代码库中提供的PubTabNet数据集用TEDS评分,得分93.32
好未来表格识别大赛
第一名:tablemaster
第二名:CDeCNet
第三名:ResNext分割表格线及单元格+单元格关系分类(同行左邻、同行右邻、同列左邻、同列右邻)+yolov5s进行单元格分类(插图、手写、空白)+Faster Rcnn检测插图
评估方法:TEDS树距离
Tree edit distance: Robust and memory-efficient. Infor-mation Systems ,2016年
插入和删除成本为1。用节点ns替代no时,如果两个节点有一个不是td,成本为1;如果都是td,但行列范围不一致,即指向的区域不一致时,成本为1;否则成本为归一化的 Levenshtein 相似度。下式分母||为求叶子结点数量操作。