总体上分为两部分,detection和recognition,前者的代表是CTPN等一系列模型,后者则主要为CRNN+CTC
Detection
CTPN(1609)
https://arxiv.org/pdf/1609.03605.pdfarxiv.org
想法:
文本不同于一般物体,是个Sequence,因而要在CNN后面加上RNN获取上下文信息。
固定宽度,找到不同高度的文字,因为文中认为预测文本竖直边界比较容易。
这是Top-down的方法。
网络结构:
Feature Map是CVGG16的conv5,每个点提出10个anchor,长和高分别为
然后过BiDirectionLSTM,过FC之后得到5k个输出(分别为2k纵坐标修正,2k预测概率[相加为1],1k边界修正[在一些复现里将这里换为2k横坐标修正])
后处理很繁琐
- score阈值设置:0.7 (+NMS)
- 与真值IoU大于0.7的anchor作为正样本,与真值IoU最大的那个anchor也定义为正样本,这个时候不考虑IoU大小有没有到0.7,这样做有助于检测出小文本。
- 与真值IoU小于0.5的anchor定义为负样本。
- 只保留score大于0.7的proposal
损失函数为
具体的可见 白裳:场景文字检测—CTPN原理与实现
EAST(1704)
https://arxiv.org/pdf/1704.03155.pdfarxiv.org
想法:是一个简单快速的模型,只有two-stage 其实主要优势只是速度....
模型结构:
前一部分和FPN一样,后面根据不同label生成5维(有角度的长方形)或8维(四边形)的文本框
Label的生成:
对于不同的scale,生成不同的label;对于QUAR提出了一种shrink的方式
损失函数:
,文中λ设为1
其中score map loss由下式计算
Geometry loss 分为RBOX和QUAD两种情况
RBOX情况下Loss = -log(IOU)+λ(1-cos(θ-θ‘))
QUAD情况下,N_Q是最短边长度
后处理用来一种改良的NMS:先通过相近的WeightedMerge再通过标准的NMS
PSENet(1806)
https://arxiv.org/pdf/1806.02559.pdfarxiv.org
想法:指出两个问题:1、原始方法只能处理长方形的文字;2、现有语义分割方法难以区分相临近的文字块
通过语义分割做文本检测,具体预测多个分割结果,然后用小的进行Progressive Scale(基于BFS)扩张到正常文本大小。
网络结构:
左边就是FPN,右边是PSE。PSE的具体算法如下
即先找到连通域,然后对连通域进行扩张,由此区分临近文字。
Label生成:
对于不同scale生成不同的ground truth,具体而言就是进行shrink
图中
和
之间的距离
,
损失函数:
其中
是text loss,定义为
,M为OHEM Mask
是shrink text loss,定义为
,
这个距离D用的是DiceDistance
实验结果:
hypermeter:lambda=0.7,OHEM=3
Augment:rescale&flip&rotation&crop
FPN的效果
关于n和m的取值
总体而言相比之前有较大提升(-4s 是指output 大小为原图1/4)
Recognition
https://arxiv.org/pdf/1507.05717v1.pdfarxiv.org
任务的输入就是识别出的文字区域,因此可以认为resize到固定高度之后,文字大小相差不大
CRNN+CTC(1507)
CRNN首先把图像resize到32*W*3,然后通过CNN后变为1*W/4*512,concat之后经过深层双向LSTM得到结果。
模型结构:
注意最后一个卷积 padding=0相当于高度2->1,Map-to-Seq就是concatenate。
CTC:
CTC是可以认为是一种Loss function。考虑到字之间宽度不定,所以先构建函数B将预测结果转换为最终输出,比如
B maps “--hh-e-l-ll-oo--” (’-’ represents ’blank’) onto “hello"。
然后可以计算得分(y为上面的输出,D*W/4,D为要识别的字符数量)
CTC运用了backward-forward加速这一计算。
如果是lexicon-based CTC,考虑BK Tree来获得
SAR (1811)
https://arxiv.org/pdf/1811.00751.pdfarxiv.org
想法:想要识别irregular文本
已有的方法分为三类:rectification-based,难以处理复杂形状;attention-based,需要字符级的标注来训练; multi-direction 需要encode arbitrarily-oriented text in four directions
主要贡献:1、easy and strong recognization;2、not rely on sophisticated designs to handle text distortions; 3、保证了regular text的效果
网络结构:
height 设定为 48 pixel, width限定48-160 pixel
31层ResNet + LSTM encoder-decoder + 2d attention
注意这里有个1*2的max-pooling是为了更好地处理i和l之类的
然后按列max-pooling输入LSTM(大哥:为什么能work?)
如上,encoder是2-layer 512-hidden-state LSTM
如上,decoder是另一个2-layer 512-hidden-state LSTM,
LSTM的输入为 one-hot
经过线性变换
LSTM输出之后
output为94个class,包括10个数字、52个字母和31个标点
训练中input 的y被ground truth代替(能保证1-1对应?)
上图中的attention是“tailored attention” 具体流程如下
其中
是(i,j)的local feature vector,
是相邻的八个点
(其实相当于是个卷积)实验结果:
使用cross-entropy loss,(大哥:这里和CRNN的CTC完全)
使用几个数据集randomly sample构建distinct data groups训练
结果在irregular text方面提升较大
ablation study: Tailored Attention比传统Attention提高了约2个点
(怎么inference?)