【CVPR 2020】ContourNet学习笔记
-
一、背景
虽然ocr发展了很多年,也有了非常不错的表现,但在场景文本识别领域仍然有很多挑战:
1、真实场景下文本样式复杂、背景杂乱
2、图像质量参差不齐
3、文本方向各异甚至弯曲文本
4、文本过密、尺寸过长、过小
。。。通常STR会分为:文本检测和文本识别两个问题,当然也有很多研究关注于end-to-end文本识别。
其中检测方面,2019年韩国NAVER Clova AI Research的Craft为我们提供了一个很优秀的模型,这种类型的检测模型属于自下而上的分割,即先分割再实例化为一个个文本,类似的还有DBNet、PSENet。然而我在实际应用时发现,对于多行密集文本场景,往往会将其识别为同一个文本区域,这给后续文本识别任务带来了不小的麻烦。
本文介绍的ContourNet是cvpr2020的一篇属于自上而下的文本检测方法,即先识别到文本框,再分割出文本mask区域。类似的还有maskRcnn、SPCNet等。这一思路我认为可以较好地解决文本区域实例化的问题。
本文将对这篇论文的主要思想做梳理,详细部分建议还是仔细查看源码和论文。
二、论文主要解决两个问题:
1、伪召回
2、对尺度变化剧烈的文本检测不准确
三、方案
1、利用9个点的adaptive-rpn 替换rpn(通常rpn在fpn的每个stage输出之后)
其中外边沿的8个点的外界矩形代表回归后的box,且中心点对最终的box做最后的矫正(若边沿超过中心点,如xmin>center_x,则xmin=center_x)
2、LOTM,负责解耦候选框中的水平和竖直方向的文本轮廓检测。
问题:lotm输出的两个方向的feature map 代表的是轮廓还是text的mask?
论文说的不够清楚,查看代码确认是轮廓而不是mask。因此监督训练时需要gt的轮廓。(将gt的segmentation先转成mask,然后再利用distance_transform_edt,计算计算图像中非零点到最近背景点(即0)的距离,再将距离>2的过滤掉剩下的就是gt mask的轮廓)问题:LOTM的proposal features是利用adaptive-RPN得到的共享特征图还是利用最终two-stage的bbox重新做roi-pooling?
这里仅看框架图和论文,似乎bbox的结果没有被利用上,检查源码后发现,训练时用的同一个rpn bbox;预测时box branch的输出bbox被用于LOTM的roi-pooling。3、后处理
伪代码见下图。
查看源码确定细节:
先对hmap和vmap分别做1k和k1的max_pooling
将同时满足hmap和vmap大于threshod的位置至为1。看代码,感觉hmap和vmap都是轮廓的feature map而不是mask的。利用alpha-shape散点轮廓算法得到轮廓,然后根据最后得到的轮廓进行填充mask,再利用cv2提取边界,得到包含边界的最小四边形。4、loss (对crop masks进行loss,而非整图)
Reference:
https://cloud.tencent.com/developer/article/1652640
https://github.com/wangyuxin87/ContourNet
https://arxiv.org/abs/2004.04940 -
哇!感谢分享,论文也很新,赞~
希望对CV领域的朋友,能有所帮助哈
也期待lz后续的学习笔记!论坛技术分享有奖励,lz留一个用户ID,或者联系客服小姐姐,方便发放奖励哈~
-
Alice_恒源云
-