这是两篇文章,因为这两篇文章大部分是相同的所以写一块了。
TextBoxes
《TextBoxes: A Fast Text Detector with a Single Deep Neural Network
》发表于AAAI2017
github地址:https://github.com/MhLiao/TextBoxes
这篇文章是借鉴SSD的网络用于文字检测,创新也不是太大。还有一点要清楚的是作者设计该网络的时候是将该网络作为word-based这一类来做的,就是说该算法设计初衷是针对词分割的,这里说的词应该是对于英文来说的。
一、网络结构
网络结构如下图所示,该网络结构就是将SSD中的全连接去掉换成卷积,并且为了适应文字检测的任务(考虑到文字的长宽比不同于物体,可能长宽比较大)使用1*5的卷积核代替3*3的卷积核。还有default boxes的比例也不同于SSD,采用1、2、3、5、7、10几种。得到的default boxes后使用SSD一样的回归方式回归出可能的结果。

还有一个不同于SSD的地方,因为文中采用了不一样尺寸的default boxes,这些尺寸都是细长形的,这样可能导致default boxes在水平方向密集在垂直方向上稀疏,从而导致检测不准确。为了解决上述问题,文中给每个default box加上垂直偏移,如下图所示。下图中为了便于观看只显示了宽高比为1和5的default box,其余比例的box以此类推。图中黑色框(宽高比为5的框)和蓝色框(宽高比为1的框)是中心在cell中心的default box,绿色(宽高比为5的框)和红色(宽高比为1的框)的框中心位于cell中心加上cell一半高的位置。

二、损失函数的定义
文章中的损失函数与SSD的损失函数一样,定义如下:
L(x,c,l,g)=N1(Lconf(x,c)+αLloc(x,l,g))
其中,x表示匹配指示矩阵(match indication matrix),对于第i个default box和第j个ground truth,如果二者匹配则xij=1反之亦然,c表示预测的置信度,l表示预测的位置,g表示真实的位置。α这里为1,N为与ground truth匹配的default boxes的总数,Lloc为L1 loss,Lconf为2值得softmax分类。
文章还有加了CRNN组成的end to end等等实验,可以观看原文。
TextBoxes++
《TextBoxes++: A Single-Shot Oriented Scene Text
Detector》发表于AAAI2018
github地址:https://github.com/MhLiao/TextBoxes_plusplus
从名字就可以看出,该文章是上面TextBoxes的一个扩展,扩展在TextBoxes只可以检测水平文本,而TextBoxes++可以检测多角度的文本,但该方法也是基于SSD结构且是针对词来检测的(word-based)。
一、网络结构
不同于TextBoxes,为了更好的对多角度文本进行检测,文章做了三个改动,一是改了default box的宽高比,使用1、2、3、5、1/2、1/3、1/5;二是将1*5的卷积核改为3*5用来生成text box layers,三是网络的输出不同(这点会在ground truth中介绍)。框架与TextBoxes是一样的,如下图所示。

类似于TextBoxes,因为使用的是细长形的default boxes,这样可能导致default boxes在水平方向密集在垂直方向上稀疏,从而导致检测不准确。为了解决上述问题,文中给每个default box加上垂直偏移,如下图所示。

二、网络的输出及ground truth的表示
网络输出
网络的输出是为了适应多角度的文本而相对于SSD和TextBoxes做了一些更改。网络输出一系列的多角度文本框使用{q}或者{r}集合表示,同时输出对应与多角度文本框的最小外界水平矩形框使用{b}集合表示。
多角度文本框是通过default box回归得到的,如下图表示,图中绿色虚线表示与ground truth匹配的default box,黄色框表示ground truth,红色箭头表示回归的方向,黑色框表示未匹配到真值的default box,绿色实线框表示对应与ground truth的最小外界水平矩形框。

default box可以用公式表示为b0=(x0,y0,w0,h0),回归出来的多角度文本框有两种表示方式,一种是使用四个点表示q0=(x01q,y01q,x02q,y02q,x03q,y03q,x04q,y04q),另一种是使用四边形的左上点、右上点和旋转矩形的高表示r0=(x01r,y01r,x02r,y02r,h0r),其中(x0,y0)表示default box的中心点,w0和h0表示default box的宽和高。上述各个参数间的关系如下列公式表示:
x01q=x0−w0/2,y01q=y0−h0/2,
x02q=x0+w0/2,y02q=y0−h0/2,
x03q=x0+w0/2,y03q=y0+h0/2,
x04q=x0−w0/2,y04q=y0+h0/2,
x01r=x0−w0/2,y01r=y0−h0/2,
x02r=x0+w0/2,y02r=y0−h0/2,
h0r=h0.
与SSD做法一样,不是直接输出文本检测框的坐标而是输出回归的信息。
对于使用四点坐标表示文本框的表示方法来说,网络输出的是(Δx,Δy,Δw,Δh,Δx1,Δy1,Δx2,Δy2,Δx3,Δy3,Δx4,Δy4,c),最终输出的水平矩形b=(x,y,w,h)和文本框q=(x1q,y1q,x2q,y2q,x3q,y3q,x4q,y4q)计算方式如下所示,c表示置信度:
x=x0+w0Δx,
y=y0+h0Δy,
w=w0exp(Δw),
h=h0exp(Δh),
xnq=x0nq+w0Δxnq,n=1,2,3,4
ynq=y0nq+h0Δynq,n=1,2,3,4
上面是对于输出检测文本框使用四点坐标表示的,如果采用的是第二种方式表示(旋转矩形),则网络输出为(Δx,Δy,Δw,Δh,Δx1,Δy1,Δx2,Δy2,Δhr,c),对于最终输出r=(x1r,y1r,x2r,y2r,hr)计算方法为:
xnr=x0nr+w0Δxnr,n=1,2
ynr=y0nr+h0Δynr,n=1,2
hr=h0rexp(Δhr).
ground truth的表示
a) 对于采用四点坐标表示的文本框
水平框的ground truth就是标定框的外界水平矩形,且该矩形的四个点是顺时针排列的,第一个点为矩形的左上角点
文本框的ground truth就是标定的框,但是规定文本框的四个点也为顺时针排列,第一个点为左上角点,这里左上角点的定义为将文本框与水平框的四个点按照顺时针方向计算四点的距离和(这里需要计算四次)。当距离和最小的那次,与水平框左上角点对于的点为文本框的第一个点。
b)对于采用两个点和一个高来表示的文本框(旋转矩形)
水平框获得方法同a)
文本框的获得,先按照a)中的方式确定出文本框的左上和右上点,高为旋转矩形的高
三、损失函数的定义
损失函数同TextBoxes
TextBoxes++还有一些数据增强的方法和其他实验,详细可以查看原文
中文本定位与识别的评测方法
欢迎加入OCR交流群:785515057