文本检测之PixelAnchor

 


文本检测之PixelAnchor

文本检测之PixelAnchor 燕小花 只有脚踏实地的人,才能够说:路,就在我的脚下 想飞的石头 等 

简介

  • 论文题目:Pixel-Anchor: A Fast Oriented Scene Text Detector with Combined Networks,该文章是云从科技2018发表的文章
  • 论文地址:https://arxiv.org/abs/1811.07432
  • 代码实现:暂无
    当前基于深度学习的文本检测主流的两种方法:1).基于像素级别的语义分割(Pixel-based),该方法一般具有较高的准确率,但是召回率相对较低,因为小文本的像素级别的特征太稀疏了;2).基于通用目标检测框架(如基于锚的目标检测方法,Anchor-based),它具有较高的召回率(毕竟锚本质上就是一些先验框),因为它对文本的大小敏感度较低,但是对于大角度的密集文本块,基于锚的检测方法可能会面临Anchor匹配问题(说白了,就是anchor不知道该与哪个文本进行匹配,这里直接给出一张Anchor匹配问题图).
文本检测之PixelAnchor

本文的主题思路是将两者进行结合,扬长避短,在anchor-based模块中,只保留小anchor和长anchor在pixel-based模块中,移除小的检测框,保留中等大小的检测框;再聚合两者的检测框,并通过一个级联NMS来得到最终的检测结果

论文关键idea

  • 提出了端到端的多方向文本检测框架PixelAnchor,它将像素级别的图像语义分割以及基于锚的检测回归方法通过特征共享地方式高效融合在一起,并将像素级别的图像语义分割结果作为一种注意力机制,用于监督锚检测回归,在有效保证文本检出率的同时,提升了文本检测的精度。
  • 基于SSD的基础上,提出了自适应预测层(Adaptive Predictor Layer,简称APL),用于更好地预测尺度和长宽比变换剧烈的文本框,特别是那些贯穿整幅图像的长文本

Pipeline

  • 特征提取主干网络采用的是ResNet-50,文中通过移除最后一个res-block的步长并使用卷积率为2的空洞卷积,来保证网络的输出总步长为16;
  • 提取出 文本检测之PixelAnchor 的特征图作为像素级别语义分割模块和锚检测回归模块的基础特征;
  • 将语义分割模块的输出结果作为注意力机制,送入到锚检测回归模块中;
  • 将语义分割模块和锚检测回归模块的输出框送入级联NMS,得到最终的检测结果
    整个流程图如下:
文本检测之PixelAnchor

具体实现细节

基于像素的语义分割模块

  • encoder-decoder模块
    相比于EAST、PixelLink,在融合不同分辨率的feature map时,本文除了使用特征金字塔网络(FPN),还使用了空洞卷积池化金字塔(ASPP,这里使用的卷积率为文本检测之PixelAnchor),目的是增加网络的感受野.
    相比于FPN,ASPP的操作更加简单和高效.由于大部分的ASPP操作都是在 文本检测之PixelAnchor 的特征图上进行的,它能在增加网络的感受野同时保持高的计算效率
    基于像素的语义分割模块具体的网络结构图如下:
文本检测之PixelAnchor
  • 模块输出
    输出包含两部分:旋转Rbox(和EAST一样,包含6个通道,依次分别为文本行得分、文本行形状AABB的bbox、文本行角度)和注意力热度图(包含1个通道,用于表征每个像素属于文本行的概率).
  • 训练标签生成
    对于Rbox模块,为了更好地区分两个非常相近的文本,采用的是shrunk polygon(收缩polygon).收缩区域作为positive text,而当前文本行的bbox与收缩区域之间的像素忽略;
    对于注意力热度图模块,原始文本区域即为positive text.为了更好地理解,这里抛张图(对于RBOX模块,文本行红色四边形内的即为正样本;对于注意力热度图,文本行绿色四边形内的即为正样本):

  • 损失函数
    所示函数包含两部分:像素分类的损失和文本行边框回归的损失
    对于像素分类损失,文中采用了OHEM,对于每幅图像:所有的正文本行像素(positive text pixels)、512个随机的非文本像素、512个难分的非文本像素.具体的损失函数公式如下(其中P表示交叉熵损失):
文本检测之PixelAnchor


对于文本行边框回归损失,这里采用的OHEM与FOTS文章中的方法一样,对于每幅图像:128个随机正样本像素、128个难分的正样本像素.具体公式如下(其中 文本检测之PixelAnchor ):

文本检测之PixelAnchor


整体损失函数为: 文本检测之PixelAnchor

基于Anchor的回归模块

基于Anchor的回归模块是在SSD框架的基础上进行修改的,这里也是提取了6层的feature map,分别为 文本检测之PixelAnchor ,其中 文本检测之PixelAnchor 的feature map是和基于像素的语义分割模块共享的, 文本检测之PixelAnchor 的特征图是在ResNet主干网络上通过全卷积的方式额外添加的,为了避免生成太小的feature map,最后两层使用的是atrous卷积( 文本检测之PixelAnchor )。注意:这里采用 文本检测之PixelAnchor 的特征图,而ssd中使用 文本检测之PixelAnchor 的特征图,目的是是为了能检测更多的小文本。 具体的框架图如下:

文本检测之PixelAnchor
  • 注意力机制模块
    pixel-based模块作为attention监督模块被引入其中,从而增加 文本检测之PixelAnchor 特征层的语义信息。具体的做法是:先对注意力热度图(attention heat map)先做指数操作,然后再和 文本检测之PixelAnchor 特征图进行点乘操作。文中提出这样做的原因可以将正例的概率映射到[1,e]之间,这样就能在保留背景信息的同时增大检测信息,同时也将降低小样本的误检。
  • 自适应预测层(APL)
    APL层中本质上是一些列大小不同的anchor,它可以分成5类:
    1.方形anchor:长宽比为 文本检测之PixelAnchor ,卷积核大小为 文本检测之PixelAnchor
    2.中型水平anchor,宽高比= 文本检测之PixelAnchor ,卷积核大小为 文本检测之PixelAnchor
    3.中型垂直anchor,宽高比= 文本检测之PixelAnchor ,卷积核大小为 文本检测之PixelAnchor
    4.长型水平anchor,宽高比= 文本检测之PixelAnchor ,卷积核大小为 文本检测之PixelAnchor
    5.长型垂直anchor,宽高比= 文本检测之PixelAnchor ,卷积核大小为 文本检测之PixelAnchor
    针对长形anchor,不同特征层上有不同的参数n,因为它与待检测文本的长度相关;在文本检测之PixelAnchor特征图上,APL层不会使用长形anchor;在后续的特征层上,APL层中的n参数依次分别为文本检测之PixelAnchor
  • 稠密anchor(anchor density)
    为了检测比较密集的文本,本文沿用了TextBoxes++中的方法,在TextBoxes++中仅使用了垂直重复偏移anchor,而本文中针对不同类型的anchor使用了不同重复偏移方法,具体为:对于方形anchor,垂直和水平方向上都进行重复偏移;对于水平长anchor,只在垂直方向上进行重复偏移;对于垂直长anchor,只在水平方向上进行重复偏移;目的是解决anchor排列不均匀造成的漏检.
    每层特征层的anchor density各不相同.对于中型anchor,各层的anchor density依次为{1,2,3,4,3,2};对于长形anchor,各层的anchor density依次为{4,4,6,4,3}(注意这里 文本检测之PixelAnchor 后跟的层没有长形)
  • 训练标签生成
    标签生成的方式和TextBoxes++中的方法相同.在anchor的设定上,如果anchor和ground truth框的最小外接框之间的IOU大于0.5,则被设定为正anchor;如果小于0.5,则被设定为负anchor。
  • 模块输出
    输出共包含9个channel,其中第一个channel为每个anchor被认为是正样本的概率,另外八个代表一个anchor到文本框四个顶点坐标相对于anchor的偏移(因为这里文本行采用的四边形的标注方式,有4个顶点,共8个坐标)。
  • 损失函数
    损失包含两部分:anchor的分类损失和回归损失
    在计算分类损失时,采用了OHEM的方法,保持正负样本比例为1:3(这里做法和通用目标检测的做法是一样的),分类损失函数如下(其中H为交叉熵损失函数):
文本检测之PixelAnchor

对于回归损失函数,采用的是L1-Smooth函数取预测四个顶点坐标相对与anchor的偏移,具体的损失函数如下:

文本检测之PixelAnchor

总的损失函数如下: 文本检测之PixelAnchor
文中 文本检测之PixelAnchor ,文章中说这个取值可以加速收敛

训练和推断细节

训练

  • 整个网络的总体损失函数为: 文本检测之PixelAnchor ,文中 文本检测之PixelAnchor,它适用于权衡基于像素的语义分割模块的损失和基于锚回归模块的损失
  • 使用Adam优化器
  • 数据增广.从图像中均匀裁剪出 文本检测之PixelAnchor 的图像块,batch size为32。
  • 使用在imagenet上的预训练模型首先在synthtext数据集上做训练。之后分别在每个真实数据集上做训练。
  • 初始学习率设定为0.0001(即使用synthtext预训练的阶段),后面下降到0.00001(在每个真实数据集上的训练阶段)。

推断

  • 在Anchor-based模块中采用了anchor裁剪机制.对于 文本检测之PixelAnchor 特征图上仅保留方形acnhor、中型水平anchor、中型垂直anchor,原因是因为该层的感受野比较小,它不会有太大的可能去同时包含两个大角度的文本区域;对于其它特征层,仅保留长形水平anchor、长形垂直anchor,原因是也很难同时匹配两个小角度的文本区域。这样就在一定程度上缓解了Anchor Matching Dilemma的方式。
  • 在Pixel-based模块中,将预测框中最小外接框小于10个像素以及宽高比不在[1:15,15:1]内的检测框进行滤除。
  • 在推断时,采用了级联NMS得到最终的检测结果.对上述两个模块保留的检测框,采用级联NMS得到最终的检测结果.这里的做法和TextBoxes++中的方法一致:首先计算检测框的水平bbox并将iou设置为0.5,这样做的目的是减少计算量,因为当前的检测框太多了;再对剩下的预测框再重新计算四边形的iou并将iou设置为0.2,虽然这种方式耗时,但是剩下的框已经不多了。考虑到anchor-based模块和pixel-based模块的框有重叠,这里将anchor-based模块计算的文本框得分加1,从而在计算nms时能有更高的优先级。

在基准数据集上的测试结果

  • Anchor-based、Pixel-based、PixelAnchor-based的相互比较
文本检测之PixelAnchor
  • ICDAR2015上的测试结果
    对于一张分辨率为 文本检测之PixelAnchor 的图像,在GPU TianX上处理速度可以达到10fps
文本检测之PixelAnchor

总结及困惑

  • 本文中将Anchor-based和Pixel-based的两者进行结合,优势互补,在Anchor-based模块中,只保留小anchor和长anchor;在Pixel-based模块中,移除小的检测框,保留中等大小的检测框
  • 本文在Anchor-based模块中,采用了自适应预测层(APL),并且不同层使用的anchor各不相同,这里本质上是结合不同特征层,运用不同的anchor来进行检测
  • 在Pixel-based模块中,相比于EAST,本文增加了OHEM和ASPP两个子模块

本文仅为个人理解,若有理解错误的地方,欢迎指正.此外目前这个代码并未开源,之后会尝试复现.

参考文献

EAST: An Efficient and Accurate Scene Text Detector.(EAST)
TextBoxes++:A Single-Shot Oriented Scene Text Detector. (级联NMS)
FOTS: Fast Oriented Text Spotting with a Unified Network.(FOTS)
DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs.(ASPP)

编辑于 2019-03-05 深度学习(Deep Learning) OCR(光学字符识别) 计算机视觉  

文章被以下专栏收录

文本检测之PixelAnchor 小石头的码疯窝 也欢迎关注同名公众号小石头的码疯窝,不定期资料分享

推荐阅读

文本检测之PixelAnchor

文本检测之PixelLink

燕小花 文本检测之PixelAnchor

HRNet+OCR: 更快更好的OCNet.

RainBowSecret

pixel-link解读

最近在使用pixel-link做文本检测,相比east其对长文本的效果不错,相比ctpn它也能解决竖排文本的检测,因此值得深入研究一下。 简述: 文章采用分割的方式做文本检测,通常分割需要对像素点…

拨浪鼓儿 文本检测之PixelAnchor

语义分割中的深度学习方法全解:从FCN、SegNet到各代DeepLab

量子学园发表于量子位

6 条评论

写下你的评论...      
  • 文本检测之PixelAnchor 唠嗑242019-03-05

    写的很好,等大神复现代码

    文本检测之PixelAnchor
  • 文本检测之PixelAnchor qing32019-04-12

    写的真好,请问博主复现成功了吗

  • 文本检测之PixelAnchor 燕小花 (作者) 回复qing32019-04-12 暂时还未,最近比较忙。[微笑]
  • 文本检测之PixelAnchor YHAN01-10

    大佬您好,请问该算法您复现了吗,我这边复现效果不好,交流下吗

  • 文本检测之PixelAnchor qq97082004-29

    请问代码复现了吗

     
上一篇:R-C3D:用于时间活动检测的区域3D网络


下一篇:python编写实现抽奖器