文本检测综述(一)regression based

个人总结的近几年基于深度学习方法的文本检测算法相关论文。
文本检测综述(二)segmentation based

概述

文本检测算法目前主要有两种类型,regression based和segmentation based。前者主要的做法是,生成bounding box或者其他形状的文本形状的信息,而后者的做法是,生成像素级的text/no text的score map,然后进行post processing,得到最终文本区域。

从总体发展上来看,文本检测一开始关注平行于axis的文本,这一类文本可以用普通的长方形来包围,所以直接借鉴目标检测的很多经典算法便可以达到很好的效果,为了更适应文本的特性,修改default anchor的尺寸,使用1×n的卷积核等等。但传统的基于anchor目标检测如果用来处理不规则的文本,那么anchor的设计将会非常复杂,所以也可以借鉴anchor free的文本检测。当然除了基于目标检测,还可以参考语义分割,或者实例分割。但这种做法最后还需要借用post processing来将像素级的输出处理为区域化的输出,常见的做法是使用连通分量(CC)。

本篇博文将介绍早期regression based文本检测的论文。

CTPN

ECCV 2016

pipeline

在这里插入图片描述
训练阶段很简单,用VGG 16得到conv5,用sliding window在conv5的feature map上滑动,每个位置得到3×3×C的向量,每一行相当于一个序列,每个序列使用BLSTM,也就是双向的循环神经网络,最终每个feature map上的点能够得到256维度的向量,然后再经过全连接层,得到如下信息:

  • 2k vertical coordinates:预设了k种default anchors,不同的是,这里将anchor box的宽固定为16,这样一整个text line可以表示为多个proposals的在水平方向上的组合。而对于单个proposal,我们只需要预测其在竖直方向的位置和高即可,因而对于 k k k个预设的default anchors,共预测 2 k 2k 2k个位置信息。
  • 2k scores:每个default anchor的类别预测,后面要进行softmax;
  • k side refinement:由于只预测竖直方向的信息,最终的text line将由多个box经过某些连接后产生,但这样可能会使得某些proposals被丢弃(如果score过低),或者某些proposals覆盖了非文本区域。为了解决这个问题,这里提出了side refinement,类似于bounding box regression,来修正anchor在水平方向的坐标。因此每个default box还会有水平offset预测。

ground truth

为了能够训练网络生成正确的vertical coordinates和scores以及side refinement,我们需要处理原始的ground truth标注信息,使得能够不断修正网络的输出。

具体的做法是:
假设我们生成的conv5的feature map size为(h/16,w/16),我们需要生成一个同样尺寸的ground truth score map和regression map和side refinement map。

首先,我们在一张(h/16,w/16)空白的feature map上的每个grid填上9种anchor boxes,然后我们计算gt文本框包含几个anchor,对于每个anchor boxes,如果与任意的gt文本框中的anchor的IOU超过0.7,或如果与某个gt的anchor的IOU最高,便是正的anchor boxes。如果与所有gt文本框的anchor的IOU<0.5,便是负的anchor boxes。

对于正的anchor boxes内部,score map填上1,相应的负的应该填上0;
对于正的anchor boxes内部,regression map填上相应的高和竖直方向的坐标;
对于正的anchor boxes内部,side refinement map填上相应的水平方向的坐标。

loss function

显然,网络共有三种输出,从而也有三个子损失函数:
在这里插入图片描述
分别是分类损失,回归损失和微调损失。
分类损失在每个grid的每个anchor box都会计算;
回归损失在与某个gt的anchor的IOU值>0.5的anchor box处计算;
微调损失在距离gt左或右边界距离小于32个像素点的anchor box计算。

inference

推理阶段最重要的就是如何从proposals得到text line:对于proposal B i B_i Bi B j B_j Bj是它的邻居当:1) B j B_j Bj在水平轴上距离 B i B_i Bi最近,2)这个距离小于50个像素点;3)它们在竖直轴上的重叠>0.7。如果 B i B_i Bi B j B_j Bj都是彼此的邻居时,这两个proposals就会被组队到一起,然后文本行就按序列地连接这些proposals。

experienment

作者在实验部分,分别比较了fine-scale detection strategy和RPN,以及RNN和non RNN,以及与其他方法。证实了fine scale策略和RNN的必要性。

EAST

CVPR 2017

pipeline

在这里插入图片描述
pipeline很简单,一个全卷积网络,结构借鉴了UNet,最终输出层根据定义的输出格式,是RBOX还是QUAD的,从而得到不同类型的输出。

  • 如果输出是RBOX,也就是旋转的矩形,输出层将会输出每个像素点到RBOX的四个边的距离信息,以及旋转角度;
  • 如果输出是QUAD,也就是一个普通的四边形,输出层将会输出像素点所属的QUAD的四个corners的坐标信息。
    (这里不太清楚,我看的pytorch版本的EAST一般是以RBOX为输出,但https://www.cnblogs.com/skyfsm/p/9776611.html认为一个bounding box得同时用RBOX和QUAD来表示。)

ground truth

ground truth相应的产生score map和geometry map(RBOX或QUAD)。

score map

需要先对gt四边形进行缩小,先选择较小的一组对边,向内缩小,然后再缩小另一组对边。对缩小后的区域内部的所有像素标注1,其他像素标注0。

geometry map

对于RBOX的输出,我们要计算出一个最小的能够包围整个文本区域的RBOX,然后对于RBOX内部的每个像素距离所处的文本区域的四边形的边的距离,和旋转角度。

对于QUAD的输出(我记得貌似数据集原来就是标注了文本区域的四个corners,如ICDAR2015),对于QUAD内部的每个像素,存放其距离四个corners的横坐标偏移量和纵坐标偏移量。

loss function

L = L s + λ g L g L=L_s+\lambda_gL_g L=Ls+λgLg前者表示分类损失,后者表示回归损失。

分类损失

考虑到图片中大部分像素点都是背景,所以显然样本集不均匀,常见的处理方法是hard negative mining,但作者认为这种做法是不能微分的,也就需要更多的手动调整参数的过程,所以这里直接选择balaced 交叉熵。
L s = balanced-xent ( Y ^ , Y ∗ ) = − β Y ∗ l o g Y ^ − ( 1 − β ) ( 1 − Y ∗ ) l o g ( 1 − Y ^ ) L_s=\text{balanced-xent}(\hat Y,Y^*)\\ =-\beta Y^*log\hat Y-(1-\beta)(1-Y^*)log(1-\hat Y) Ls=balanced-xent(Y^,Y)=βYlogY^(1β)(1Y)log(1Y^)其中 β \beta β是负样本的个数/总样本数。

几何损失

RBOX

L g = L A A B B + λ θ L θ L_g=L_{AABB}+\lambda_\theta L_\theta Lg=LAABB+λθLθ
如果文本几何图形表示为RBOX,那么输出分为两个部分,未旋转的矩形的IOU 和 旋转角度。前者用 L A A B B L_{AABB} LAABB表示,后者用 L θ L_\theta Lθ表示。

QUAD

直接使用L1回归,这里改写了Smooth L1,增加了一个normalization的 N Q ∗ N_{Q^*} NQ

inference

提出了locality aware nms,作者认为普通的NMS放在这里会非常的耗时,时间复杂度未 O ( n 2 ) O(n^2) O(n2),其中 n n n为待选择的图形。

假设相邻像素的图形倾向于具有高度的关联度,所以作者提出一行行地聚合图形,当聚合图形时,作者会将当前遇到的图形与上一次聚合后的进行聚合,这会使得在最好的情况下,时间复杂度只需 O ( n ) O(n) O(n)

experienment

展示了模型的定性结果、定量结果以及与其他模型的速度比较。

Limitations

不能很好的用于弯曲文本、竖直文本,且检测器的关于文本实例的最大检测尺寸与网络的感受野成正比,这限制了网络预测较长的文本的能力。

SegLink

CVPR 2017
通常的目标检测并不能够很好地适用于文本检测:

  • 文本通常有着更大的aspect radio,Faster RCNN可能由于anchor的设计,会面临很多困难。一些非拉丁文本在单词之间没有空格,因此有着更大的aspect radio;
  • 文本通常有方向,所以需要检测器产生带方向的boxes。

这篇文章解决了带方向的文本框预测问题。通过连接小尺寸的segment,来达到任意长度的文本预测的能力。

pipeline

在这里插入图片描述
由这个图片就可以看出,SegLink的网络结构是参考了SSD的。
浅层(底层)尺寸较大的feature map能够展示更详细的局部信息,高层尺寸较小的feature map能够展示更全面的总体语义信息,所以这里使用不同层次的feature map来预测不同尺寸的segment。

关于segment:不需要理解成单个字符,这里的一个segment可能是字符的某一部分。

对于 l l l层的检测器,在feature map l l l的每个像素位 ( x , y ) (x,y) (x,y)对应一个default box,box中心坐标为 ( x a , y a ) (x_a,y_a) (xa,ya),宽高为 a l a_l al l l l层的将会输出7个channels的结果,对应着7个segment offsets,分别表示segment scores,中心点横坐标,纵坐标,宽,高,以及旋转角度相对于该像素点的偏移。可以通过线性变换,得到该位置的segment的中心点横纵坐标,宽高以及旋转角度:
在这里插入图片描述
其中 a l a_l al是一个经验scale因子,这里设置为 l l l层相对于原始图片的尺寸缩小倍数再乘上一个 γ \gamma γ

除了segment的score和offsets,还需要输出link detection,包括层内部和层之间,层内部的很好理解,在 l l l层的feature map上,每个像素点对应着一个预测的segment,通过预测相邻的segment之间是否有link,我们可以在后续结合segment构成一个text line。每个segment在当前feature map上有8个邻居:
在这里插入图片描述
那我们就将得到16个相应的link scores。

层之间的是指,某个文本实例不一定只出现在 l l l层的feature map上,所以这里也增加了一个层之间的link预测,第 l l l层的feature map上的segment只会预测其和其低一层的feature map上的相邻segment的link,有四个邻居:
在这里插入图片描述
那我们就将得到8个相应的link scores。

因为第一层的feature map没有比它还靠前的feature map了,所以这8位输出只会在 l = 2 , 3 , … l=2,3,\ldots l=2,3,出现。

ground truth

相应的,我们需要得到 l l l层的feature map的每个像素点上default box的segment scores、segment offsets、16个相应的link scores以及8个相应的link scores
如果某个default box的中心在某个单词的bounding box内部,且default box的宽高 a l a_l al和单词的高度 h h h之间的比值不超过1.5,则认为该default box为正,否则为负。

在正的default box上,先计算default box真实的中心和宽高:
在这里插入图片描述
然后利用类似于bounding box regression的方式,求出offsets,作为segment offsets。

如果两个相邻的(同一层或者不同层)segments都是正的,且都属于一个word,那么相应的links会被标记为正。

loss function

在这里插入图片描述

inference

inference就是通过求得的default box的segment scores、segment offsets、16个相应的link scores以及8个相应的link scores,得到最终预测bounding box。

  • 使用预设的score阈值筛选segments和links;
  • 将筛选出的segments视作点,将links视作边,构建图;
  • 使用深度优先遍历得到各个连通分量。
    在这里插入图片描述

experienment

使用了online hard negative mining和数据增强。

Limitations

SegLink有两个手动调整的参数,也就是inference阶段提到的阈值(针对segment和link各有一个);
SegLink不能处理两个距离很远的单词。(很正常,这个目前其他方法也都不能完成)

TextBoxes

AAAI 2017
仍然是一篇魔改SSD的文章,但创新型个人认为没有SegLink强。

相对于SSD,修改了一些结构使得更符合文本检测的应用场景。

  • 修改了aspect ratios,设置的较大,但这会导致在水平方向上的default boxes很密集,
  • 使用1×5的不规则卷积核代替SSD的3×3的卷积,这样更符合文本的大aspect ratios的特点;
  • word spotting and end to end recognition:使用文本识别网络CRNN连接TextBoxes,来达到端到端的word spotting。

pipeline

在这里插入图片描述
从图上可以看出,一共有六个text box layers,每个layer具有不同的感受野,每个layer上预设12种default anchors,最终输出72个channels的信息:presence scores(2×12)和offsets(4×12)。

default anchors共有六种aspect ratios,并且考虑到在水平方向上的过于密集,而竖直方向上的较稀疏,解决办法是,每个default box都设置了一个竖直offsets。

在text box layers中,作者使用不规则的1×5的卷积核来代替标准的3×3的卷积核。

结合CRNN后,我们可以将default anchor对应的预测score改为 s = m a x w ∈ W p ( w ∣ I ) s=max_{w\in W}p(w|I) s=maxwWp(wI),也就是文字识别后,该单词是某个词典中的某个单词的概率。但如果直接用这个会使得计算很耗时,所以作者这里提出,可以使用多个阶段的训练。
#########################################################(手动分割)
首先,我们直接用TextBoxes来做文本检测,使用很低的score threhold(也就是筛选box为正的阈值),然后使用很高的NMS重叠阈值,从而在每个图片上保留大约35个bounding boxws;
然后,将default anchor对应的预测score改为 s = m a x w ∈ W p ( w ∣ I ) s=max_{w\in W}p(w|I) s=maxwWp(wI),再进行一次筛选核NMS。

ground truth

这部分论文好像并没有讲到。

loss function

在这里插入图片描述

inference

使用了NMS。

experienment

实验中作者还设计了multi scale inputs,将一张图片缩放不同的尺寸输入。

Limitations

很显然,没有考虑弯曲的文本区域。

TextBoxes++

AAAI 2018
从名字上就可以看出,这篇文章是TextBoxes的扩展版,回顾以下TextBoxes的特性:基于SSD,检测水平文本,修改了default box aspect ratios并增加了vertical offsets,用1×5的卷积代替3×3的卷积,结合recognizer达到端到端的word spotting。

TextBoxes++进一步拓展:基于SSD,检测任意方向的文本,用3×5的卷积代替3×3的卷积,用改进了网络结构核训练过程使得训练效果更好,改进了detector和recognizer之间的结合(提出一个新的score,同时利用了检测和识别的信息)。

pipeline

在这里插入图片描述
本文针对任意方向的文本,设计了两种输出:rotated rectangle bounding box和quadrilateral bounding box,前者使用左上角坐标,右下角坐标以及高表示(共5个值),后者用四个角的坐标表示(共8个值)。我们可以有选择性地选择其中一种来进行文本方向性的表示,但同时,作者提出还要预测一个horizontal bounding rectangles的中心点和宽高(共4个值),这个水平的长方形是包含ground truth bounding box的最小的长方形。所以每个text box layer的每个位置将会预测(5+4+2),或者(8+4+2)。2是score。

关于各种框框的表述有点复杂,可以参考下图:
在这里插入图片描述

  • b 0 b_0 b0表示defaut box,其中黑色的是不匹配的,绿色虚线的是匹配的;
  • G q G_q Gq是ground truth target quadrilateral ,是ground truth box之一,真正的,包含了文本的,旋转矩形或四边形。
  • G b G_b Gb是minimum horizontal rectangle ,是ground truth box之二,该长方形是包含了 G q G_q Gq的最小的水平长方形。

每个default box上会预测出该box到ground truth target quadrilateral(真正的bounding box) 和minimum horizontal rectangle(水平最小长方形) 的offsets,然后通过计算得到相应的坐标表示。default box和ground truth的对应仍然是采用box overlap来确定,而水平最小长方形能够使得较快地完成这个匹配工作。

由于文本可能出现任意的方向,所以这里修改了aspect ratios为:1, 2, 3, 5, 1/2, 1/3, 1/5,且也设置了vertical offsets。

在text box layers使用3×5的卷积来预测。

如果考虑结合recognizer,完成word spotting的工作,作者这里同样改进了TextBoxes相关的设计。
首先,这里可以允许有词典或者没有词典的文本识别。
另外,关于文本检测和文本识别的结合,需要一个统一个score来进行衡量,这里融合了识别的score s r s_r sr和检测 s d s_d sd,通过式子:
S = 2 × e s d + s r e s d + s s r S=\frac{2\times e^{s_d+s_r}}{e^{s_d}+s^{s_r}} S=esd+ssr2×esd+sr

ground truth

G b = ( x ~ 0 b , y ~ 0 b , w ~ 0 b , h ~ 0 b ) G_b=(\tilde x_0^b,\tilde y_0^b,\tilde w_0^b,\tilde h_0^b) Gb=(x~0b,y~0b,w~0b,h~0b)来表示the minimum horizontal rectangle(水平最小长方形),分别是该长方形的中心和宽高。 G b G_b Gb也可以用四个角的坐标表示, G b = ( b 1 , b 2 , b 3 , b 4 ) G_b=(b_1,b_2,b_3,b_4) Gb=(b1,b2,b3,b4)

G q = ( q 1 , q 2 , q 3 , q 4 ) G_q=(q_1,q_2,q_3,q_4) Gq=(q1,q2,q3,q4)表示ground truth target quadrilateral(包围文本的四边形),分别是该四边形的四个角的坐标。

且这里规定了,这两个gt box的坐标表示严格按照顺时针的方向进行,且对应的pair的距离的和应该最小。

关于default box和gt的对应情况,这里用一个矩阵 x x x表示, x i j = 1 x_{ij}=1 xij=1表示box i和gt j之间的overlap满足某个阈值,也就是认为这两个相匹配。

loss function

在这里插入图片描述
N N N是匹配了任意一个gt的default boxes的数量。

inference

cascaded non-maximum suppression
在测试阶段,需要从过多且冗余的文本框中筛选出score最高的文本框。由于四边形或者旋转的矩形的IOU计算很复杂,NMS也会相对耗时,因而这里作者提出了cascaded NMS。

首先,作者将所有text box layes预测的结果都resize回原来的图片尺寸,且将这个结果都融合在一个dense confidence map中。然后取一个相对较高的IOU threshold来进行水平最小矩形的NMS,这个操作能移除很多不需要的boxes。最后,取一个相对较低的IOU threshold来进行四边形或者旋转矩形的NMS。留下来的就是最终检测到的文本框。

experienment

Online hard negative mining
Data Augmentation
Multi-scale training

Limitations

不能处理大的字符检测、目标遮挡、弯曲文本。

RRPN

2018.03 arxiv
这篇论文算是魔改版的Faster RCNN来做任意方向的文本检测。

pipeline

在这里插入图片描述

ground truth

loss function

inference

experienment

Limitations

TextSnake

ECCV 2018
这篇文章解决了上面其他文章的一大缺点:弯曲文本检测。

regression based方法不能解决弯曲文本主要是因为,预设的表示方式的问题,上面讲到的方法,从水平的矩形逐渐演变成旋转矩形或四边形,但这种预设的bounding box形状,本身就无法完美的解决弯曲文本问题。

本文作者将文本设计为一系列的disks,这些disks的中心位于一条弯曲的轴线上,从而能够表示出弯曲的文本。

pipeline

在这里插入图片描述
S ( t ) = { D 0 , D 1 , … , D n } S(t)=\{D_0,D_1,\ldots,D_n\} S(t)={D0,D1,,Dn}表示一个文本实例t对应的多个字符序列。 D i D_i Di表示一个disk,且 D = ( c , r , θ ) D=(c,r,\theta) D=(c,r,θ),分别是center,radius和orientation。center是该圆的中心坐标,radius是文本实例的宽的1/2,orientation是中心所在的位置切线与水平方向的夹角的正切。

网络经过全卷积网络,得到五个map,分别是:TR(文本区域),TCL(文本中心线),radius(disk的半径),cos和sin。
由于TCL在TR的内部,所以最终可以筛选出在TR内部的TCL,也就是masked TCL。然后通过并查集得到instance segmentation,也就是文本实例分割后的结果。最后用striding算法结合radius以及角度信息得到中心线的point lists。

ground truth

本文的方法假设文本实例是snake形状的,也就是说,一个文本实例不会出现多个分支。
在这里插入图片描述
首先,找到文本区域的head和tail,这里选择两个最接近平行且方向相反的作为头部和尾部。

在头部和尾部之间,采样两组相等数量的点,如ABCD和HGFE(采样越多当然最终的轴线越平滑),ABCD和HGFE中间的线的中心作为TCL点。

为了让网络可以区分相邻的两个文本实例,作者这里设计,将TCL向内缩进一些。另外,单条线可能会倾向于产生噪音,所以作者将TCL的宽度扩展了。

radius map和cos sin map:在TCL区域,半径是该点到对应的边线的距离,而角度通过在邻域中的TCL点上拟合一条直线来计算的。因为没有看代码所以不清楚其中的细节。

loss function

在这里插入图片描述

inference

在这里插入图片描述
首先,使用disjoint set来得到一个个文本实例,然后使用striding算法提取顺序点集合,这些点集合表明了文本实例的形状和路径,且用于重建文本区域。

作者认为有两种策略看可以筛选出false positive文本实例:

  • TCL的像素点应该至少是它们平均半径的0.2倍;
  • 重建后的文本区域中至少一半的像素点应该和TR一样的分类。

striding algorithm:

  • 从segmented TCL中随机选择一个点;
  • Centralizing:画出该点的切线和法线,法线和TCL区域的相交的中心点就作为centralized point;
  • Striding:向两个方向走,且stride分别为: ( 1 2 × c o s θ , 1 2 × s i n θ ) (\frac{1}{2}\times cos\theta,\frac{1}{2}\times sin\theta) (21×cosθ,21×sinθ) ( − 1 2 × c o s θ , − 1 2 × s i n θ ) (-\frac{1}{2}\times cos\theta,-\frac{1}{2}\times sin\theta) (21×cosθ,21×sinθ)。如果下一步超过了TCL区域,就会缩小stride,直到到达的终点;
  • Sliding:在central axis上迭代地画圆,圆半径来自radius map。

experienment

Limitations

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值