1. 概述
导读:在前人的工作中已经将予以分割与通用目标检测框架运用到了文本检测任务中,但是它们都有对应的缺点,这篇文章将两个结合起来组成新的端到端训练的网络Pixel_Anchor。它是由共享ResNet-50特征参数的语义分割与SSD框架,以及anchor层级的注意力机制组合构成检测倾斜文本检测器。在该算法中为了适应文本区域的尺寸与长宽变化,结合FPN与ASPP作为语义分割部分的编解码结构,并在SSD中提出了新的Adaptive Predictor Layer(APL)。在ICDAR 2015数据集上F值为0.8768,速度为10FPS(输入图像960*1728)。
这篇文章提出的算法主要分为两个模块:Pixel-based模块与Anchor-based模块,这两个模块共享ResNet-50的特征。Pixel-based模块用于生成文本区域的分割heatmap之后通过anchor级别的注意力机制送入到Anchor-based模块中去,从而提升精度。在Inference阶段会使用NMS对结果进行处理,既是在Anchor-based阶段只保留小且长的anchor,去除Pixel-based莫快递中小的目标。最后将两个部分的结果使用级联NMS获取最后的结果。
在Pixel-based模块中引入FPN与ASPP模块构成编解码结构。Anchor-based模块源自于SSD框架,其中通过Adaptive Predictor Layer(APL)实现对不同大小和长宽比目标的兼容。
这篇文章的主要贡献:
- 1)文章提出了一阶段的倾斜文本检测算法,在网络特征下结合了Pixel-based与Anchor-based的优点,以及anchor层级的注意力机制;
- 2)针对检测长宽比例与尺度范围对于SSD提出了APL,这个模块可以有效检测长文本行;
- 3)这篇文章提出的方法在速度与精度之间取折中,实现了端到端训练。即使在较低分辨率的情况下也能获得较好的结果;
2. Anchor-based与Pixel-based的方法对比
现有方法的一些优缺点比较:
- 1)EAST与FOTS,由于这些网络自身感受野的限制导致其很难检测横贯图像的文本区域;
- 2)Pixel-Link与PSENet,这些是基于Pixel-base的方法,这些方法需要大量的后厨工作,并且对于图片中的噪声较为敏感。特别是PSENet是将文本区域进行收缩之后再去分割,进而对于一些小的目标就需要保持较高的分辨率输入,这样就会进一步提高处理的时间;
- 3)基于SSD改动而来的TextBoxes++在公开的数据集上表现较好,但是在检测密集、较大角度的文本、长文本(感受野受限)的时候就不行了。图3展示的是对于另个大角度的文本区域,很难区分文本区域与那个anchor匹配(Anchor Matching Dilemma问题)。
此外,对于倾斜文本DMPNet与RRPN中添加了角度的预估从而组成anchor,这样的操作会加大anchor的数量,从而造成耗时的问题;
总结:Pixel-based方法检测的正确率更高,而Anchor-based方法面对复杂的情况,假阳性率会高一些,但是其在文本尺寸(输入图像大小)、检测效率上更好。
3. 方法设计
3.1 网络结构
这篇文章提出的网络结构见图4所示,其backbone选用的是ResNet-50,将stride为32的层去掉stride,并替换为rate=2的膨胀卷积。由stride为4、8、16的特征处抽取特征用于结果预测。
3.2 Pixel-based Module
文中使用FPN与ASPP作为编解码结构,ASPP中采用的膨胀系数为{3,6,9,12,15,18}\{3,6,9,12,15,18\}{3,6,9,12,15,18}而非DeepLabv3+中的{6,12,18}\{6,12,18\}{6,12,18},就是为了获得更好的感受野。高层级的特征通过上采样与对应的特征concat融合,这部分的网络结构见图5所示:
在图5中展示了这部分模块的输出有两个:旋转矩形框(RBox)与attention heatmap。旋转矩形框对应6个通道的输出:1个通道的文本置信度,4个通道的上下左右4个边界,1个通道的矩形框倾斜角度;attention heatmap是由1个通道组成,指示的是特征图中每个像素是文本的概率。
为了区分开相邻的文本,这里也是用了多边形收缩的思路,避免了文本粘连的情况。同时采用OHEM,在像素分类中,对每个图像选择512困难负样本非文本像素以及随机的512负样本非文本像素,而正样本全部保留用于分割训练,这里使用ΩRBox,Ωheatmap\Omega_{RBox},\Omega_{heatmap}ΩRBox,Ωheatmap表示pixel-based模块的输出,则其分割损失可以记作如下的形式:
Lp_cls=1∣ΩRBox∣∑i∈ΩRBoxH(pi,pi∗)+1∣Ωheatmap∣∑i∈ΩheatmapH(pi,pi∗)L_{p\_cls}=\frac{1}{|\Omega_{RBox}|}\sum_{i\in \Omega_{RBox}}H(p_i,p_i^*)+\frac{1}{|\Omega_{heatmap}|}\sum_{i\in \Omega_{heatmap}}H(p_i,p_i^*)Lp_cls=∣ΩRBox∣1i∈ΩRBox∑H(pi,pi∗)+∣Ωheatmap∣1i∈Ωheatmap∑H(pi,pi∗)
对于旋转矩形框也是使用OHEM进行选择,选择了128个困难正样本与128个随机正样本,则这部分损失函数可以描述为:
Lp_loc=1Npos∑i∈ΩlocIoU(Ri,Ri∗)+λθ(1−cos(θi,θi∗))L_{p\_loc}=\frac{1}{N_{pos}}\sum_{i\in \Omega_{loc}}IoU(R_i,R_i^*)+\lambda_{\theta}(1-cos(\theta_i,\theta_i^*))Lp_loc=Npos1i∈Ωloc∑IoU(Ri,Ri∗)+λθ(1−cos(θi,θi∗))
最后,将这两个像素分类的损失与定位框的回归损失使用αp=1\alpha_p=1αp=1调和,得到如下的损失形式:
Lp_dt=Lp_cls+αpLp_locL_{p\_dt}=L_{p\_cls}+\alpha_p L_{p\_loc}Lp_dt=Lp_cls+αpLp_loc
3.3 Anchor-based Module
这个模块的结构见下图所示:
共享来自backbone的相对原始图大小为14,116\frac{1}{4},\frac{1}{16}41,161的特征,之后通过卷积生成四个卷积的特征图,分别是原始输入图尺寸的132,164,164,164\frac{1}{32},\frac{1}{64},\frac{1}{64},\frac{1}{64}321,641,641,641。
并且将原有进行目标检测的分辨率调大,由18\frac{1}{8}81变为14\frac{1}{4}41。在此基础上使用Pixel_based模块输出的heatmap用于attention操作,这样组合提升对于小目标的检测能力并且排除一些错误样本。
此外,还提出了APL层用于获取最后的文本检测框预测,在这个层中家那个anchor按照不同的长宽比分组,对于不同的分组使用不同的卷积组合,在文章中将anchor分为下面的5组,具体如下图所示:
具体就是说:
- 1)对于方形的anchor,长宽比为1:11:11:1,使用3∗33*33∗3的卷积核;
- 2)对于中等水平anchor,长宽比为{1:2,1:3,1:5,1:7}\{1:2,1:3,1:5,1:7\}{1:2,1:3,1:5,1:7},使用的卷积核为3∗53*53∗5;
- 3)对于中等垂直anchor,长宽比为{2:1,3:1,5:1,7:1}\{2:1,3:1,5:1,7:1\}{2:1,3:1,5:1,7:1},使用的卷积核为5∗35*35∗3;
- 4)对于大的水平anchor,长宽比为{1:15,1:25,1:35}\{1:15,1:25,1:35\}{1:15,1:25,1:35},使用的卷积核为1∗n1*n1∗n;
- 5)对于大的垂直anchor,长宽比为{15:1,25:1,35:1}\{15:1,25:1,35:1\}{15:1,25:1,35:1},使用的卷积核为n∗1n*1n∗1;
上面卷积核设计中的nnn会根据特征来源的位置变化,比如feat2到feat6对应的n={33,29,15,15,15}n=\{33, 29, 15, 15, 15\}n={33,29,15,15,15},对应使用APL的几个特征图。
此外,文章还引入了anchor density的概念,见图7所示:
通过anchor加倍的方式提升对于密集文本的检测能力,这一点与TextBoxes++中的设计有点类似,文章中提到了对于不同阶段的特征使用了不同的anchor加倍机制。
对于Anchor-based部分对于文本区域的检测与TextBoxes++一致,使用四边形去包围文本区域,使用最小包围矩形去匹配最合适的anchor,anchor与GT的匹配度阈值设置为0.5,用以区分正负样本。这个模块的输出是9个channel的,第一个通道代表为文本的置信度,后面的8个通道就是四边形4个顶点的偏移了。
使用OHEM计算分类的损失,并且将正负样本的比例设置为1:31:31:3。因而分类部分的损失可以描述为:
La_cls=1∣Ωa∣(∑i∈ΩaH(pi,pi∗))L_{a\_cls}=\frac{1}{|\Omega_a|}(\sum_{i\in \Omega_a}H(p_i, p_i^*))La_cls=∣Ωa∣1(i∈Ωa∑H(pi,pi∗))
对于坐标点的回归还是采用的是SmoothL1损失函数,将其定义为:
La_loc=1∣Ωa∣(∑i∈pos(Ωa)SL(li,li∗))L_{a\_loc}=\frac{1}{|\Omega_a|}(\sum_{i\in pos(\Omega_a)}SL(l_i, l_i^*))La_loc=∣Ωa∣1(i∈pos(Ωa)∑SL(li,li∗))
这样,对于anchor-based部分损失使用αa=0.2\alpha_a=0.2αa=0.2进行调和,得到如下的形式:
La_dt=La_cls+αaLa_locL_{a\_dt}=L_{a\_cls}+\alpha_a L_{a\_loc}La_dt=La_cls+αaLa_loc
那么,将之前的Pixel-based与Anchor-based损失函数,使用αall=3.0\alpha_{all}=3.0αall=3.0进行调和,形式如下:
Lall=αallLp_dt+La_dtL_{all}=\alpha_{all} L_{p\_dt}+L_{a\_dt}Lall=αallLp_dt+La_dt
4. 实验结果
ICDAR 2015:
ICDAR 2017: