CentripetalText阅读笔记目录
研究背景与动机
从文章标题的字面意思来看,CentripetalText可表示为向心的文本,提出一种任意形状文本的表示方式,也就是向心文本表示。这篇文章认为目前提出的文本表示方式缺乏简洁性和鲁棒性,存在以下问题:
- 基于多种组件的文本表示策略而引出了复杂的后处理算法,导致模型推理阶段效率较低
- 组件的预测是对狄拉克分布来建模的,需要数字化的输出来获取准确的文本位置,因此削弱了模型的容错能力。(我认为是这是指目标图像中的部分位置可能因为噪声等某些原因出现误召回,引入了非文本组件)错误的组件预测会导致后处理过程中累积错误计算,使得文本轮廓的不准确预测。
因此CentripetalText主要针对这些问题提出了以下的方法:
- 提出了基于组件的有效文本表示。利用向心偏移进行元素聚类,将文本实例中的像素归类到对应的内部kernel中。
- 提出了Relaxed L1 Loss。预测向心偏移时将松弛操作引入密集回归当中,引入松弛操作的目的就是对向心偏移进行预测时,能预测准确范围内的值即可,而不需要预测出一个确定的值。
论文链接:https://arxiv.org/abs/2107.05945
代码开源:https://github.com/shengtao96/CentripetalText
向心文本表示
kernel是用来区分可能粘连的文本实例,以及起到一个聚类中心的作用。向心偏移是对图片的每个像素点进行预测的,预测的向心偏移是希望将文本区域的像素点指向kernel区域,背景像素点指向非kernel区域(从图中可以看出预测的背景像素偏移还是有可能指向文本区域中的非kernel像素点的,但这并不影响对文本轮廓的预测),然后模型就可以利用这些向心偏移进行后续的聚类后处理操作。
网络结构
方法实现基于像素聚类框架PAN来进行处理,主要分为以下几个步骤进行处理:
- 输入图片到卷积神经网络预测出kernel概率图和向心偏移图,并预测出向心偏移图
- 对kernel概率图进行二值化和连通组件分析得到每个kernel后作为聚类中心
- 然后利用每个像素点的向心偏移量对像素点进行聚类,在后处理算法里面,每一个像素点根据向心偏移值从原始的位置转移到kernel或者背景元素,然后重组成完整的文本
标签生成
下图为kernel特征图和向心偏移特征图的label生成过程。
对于kernel特征图:
- 其生成过程参照PSENet。
对于向心偏移特征图:
- 属于Kernel和背景区域中的像素点偏移向量设置为(0,0),就是不指向任何位置。
- 然后对kernel腐蚀两次生成kernel reference,这个kernel reference就是向心偏移的目标,向心偏移向量就是设置从原像素点指到最近的kernel reference。(但是不太清楚目标像素点是如何确定的,这一点论文没说)
- 如果文本区域有重叠,小文本区域的像素点会有更高的优先级
损失函数
Relaxed L1 Loss
但是向心偏移的预测是充满了不确定性,因为只要指向kernel reference里面的元素点,都可以看作是正确的,也就是说网络对这个偏移方向的预测在这个范围里面都是正确的,不需要精确到某一个值。
所以作者在计算向心偏移的loss时,引入了一个松弛操作。具体做法是设计了一个掩膜计算每个像素点的权重。如果文本区域像素点正确地指向了kernel,或者背景像素点没有指向kernel,这个权重就置为0,表示这部分的损失不需要计算。其他没有准确预测的偏移就置为1。最后将得到的这个掩膜乘上标准的平滑L1损失函数,得到的就是针对向心偏移的损失函数。
Kernel Segmentation Loss
损失函数除了向心偏移的部分,剩下的就是分割kernel的loss。为了准确预测kernel,这一部分作者也设计了一个掩膜,就是将文本的非kernel部分像素权重置为0,只要区分出kernel和背景即可。
实验效果
CentripetalText在一些弯曲文本上的效果,相比其他方法都是有提升的,能到达sota。
另外CentripetalText还可以作为一个即插即用的组件放到其他的端到端文本识别上使用。这里就是它将它的文本表示和损失函数放到 Mask TextSpotter 进行端到端的场景文本识别,也是有很大的提升的。
总结
- 提出向心文本表示,简化了后处理,使得后处理利用简单的矩阵计算就能完整,无需像PAN或者PSENet这样迭代扩张得到完整文本实例。
- 在损失函数中引入松弛操作,使得网络预测更加灵活。