在OCR场景使用GCN图卷积
在OCR场景使用GCN图卷积
大家好,今天给大家介绍一篇关于在OCR场景中使用图卷积的模型TIES,并对其中edgeconv边卷积部分给出一些自己的理解。那么我们直奔主题。
这个场景的主要目的是利用图卷积GCN来判断OCR票据图像中一对单词是否在同一行/列/cell中。模型的主要输入有:OCR图像,每张图中每个单词的词嵌入特征,每张图中单词即点的个数,每张图的三个邻接矩阵(cell,row,column)。
TIES算法主要由四部分组成:
1. 图像处理层:从OCR图像的image feature中,根据每个单词在原图像中的位置选取每个单词的image feature,与票据中单词的词嵌入concatenate,得到B * V * F1特征矩阵(B:batch size image,V:所有OCR图像中单词即点的最大值,F1:特征维度)。
2. Interaction层:利用GNN对上层输入进行edgeconv。源代码实现中因为没有图计算框架,使用了DGCNN中相同的处理方式,即对每个点的嵌入求KNN邻居,将KNN邻居和点进行edgeconv。但是利用GES图引擎的massage passing可以利用已知的邻接矩阵很好的实现edgeconv,而且可解释性更强。因为这个算法的最终目的是要判断两个点即单词是否在同一行/列/cell,而行/列/cell邻接矩阵能很好的保留这部分的信息特征,KNN用在词向量中更注重寻找语义相同的词,而不是位置关系。在DGCNN中利用KNN,是因为DGCNN的输入是点云三维坐标,坐标利用KNN进行计算可以得到邻近的坐标点。所以,在实现中,我们可以利用GCN图卷积,从点的邻点更新自身特征的方式来代替源码中的KNN。
Interaction层最后输出B * V * F2特征矩阵。
3. Pair sampling:对每个点采样s个sample,这里与通常的负采样不同,作者设计了和代码相匹配的矩阵运算来进行采样(以相同的概率对每张图中存在的点进行采样,因为每张图词的个数不一样,正负例采样个数基本相同)。这里利用了三个邻接矩阵,利用巧妙的矩阵运算进行采样得到B * V * S的采样对。利用mask矩阵来处理每张图词数即点数不一样的情况。
4. 分类,判断每一对词是否在相同的行/列/cell,并进行训练。
- 点赞
- 收藏
- 关注作者
评论(0)