介绍
由于最近一直在做scene text recognition方面的任务,所以不断在阅读最新的论文,这一篇论文"Focusing Attention: Towards Accurate Text Recognition in Natural Images"是17年9月8号出的新论文,由海康威视视觉实验室联合几个上海高校发出,提出了"attention drift",具有一定的思考意义。
目前存在的问题
自然图片的文本识别一直是一个热门的研究领域,目前主流的做法由之前的CNN+RNN+CTC变成了CNN+attention-based encoder-decoder framework,这也是受到了机器翻译中seq2seq模型的影响。
但是目前的模型存在着一些问题,对于复杂图片,比如有重叠,复杂背景,不同字体,大小或者是低像素的图片,模型都没有办法很好的识别,下面就是几个小例子。
对于出现的这种问题,论文提出了一种观点,即注意力偏移,可以看看下面这张图片。
图a所示就是一般的 attention-based 网络结构,图中有一些黄色的十字,这表示在识别每一位字符的时候注意力集中的位置,可以发现前面"8"和"3"的注意力机制还比较好,但到了后面"K"和"M"的时候,注意力已经偏掉了,所以导致最后识别出现错误。而本篇论文提出的Focusing Network能够成功的纠正注意力的偏移,让注意力重新集中到正确的位置,这是本文最大的创新。
FAN Method
本篇论文的模型分为两个,第一个是Attention Network,第二个是Focusing Network,下面我们来依次解释一下这两个网络。
Attention Network(AN)
目前都是先使用CNN和LSTM的encoder,得到图片的特征向量Encoder(I) = ($h_1, \cdots, h_T$)然后使用attention-based decoder从图片I直接生成目标序列($y_1, \cdots, y_M$)。
在生成$y_t$的第t步,使用注意力机制,将第t-1步的隐藏层$s_{t-1}$传入,然后使用下面的公式将其和特征向量h结合在一起。
$$
e_{t, j} = v^T tanh(Ws_{t-1} + V h_j + b) \
\alpha_{t, j} = \frac{exp(e_{t, j})}{\sum_{j=1}^T exp(e_{t, j})}
$$
这里得到的$\alpha_{t, j}$就是注意力权重,其中v,W,V和b都是需要训练的参数。然后应用注意力机制到特征向量上,将注意力权重和特征向量做线性组合。
$$
g_t = \sum_{j=1}^T \alpha_{t, j} h_j
$$
然后将前一时间步的隐藏状态$s_{t-1}$和$g_t$还有输入一起传入RNN中,通过一个线性变化将RNN的输出转换到最后的类别输出上。
$$
s_t = RNN(y_{t-1}, g_t, s_{t-1}) \
y_t = Generate(s_t, g_t)
$$
这样就得到了最后的预测结果。
Focusing Network(FN)
在attention model,通过CNN提取出来的每个特征向量都可以映射到图片中的一个部分,那么对于每一个字符的输出,我们可以反向定位会其注意力在图片中的位置,定位之后我们就可以对其进行纠正。所以Focusing-mechanism的主要步骤是下面两个:1)计算每个预测label的注意力中心; 2)对注意力中心生成一个概率分布来进一步调整注意力的位置。这个过程可以由下面的图片清晰的描绘出来。
计算注意力中心
由卷积网络的机制,我们可以通过下面的公式来求出在L层中的(x, y)点在L-1层中感受野的bounding box。
$$
x_{min} = (x - 1) \times stride_W + 1 - pad_W \
x_{max} = (x -1) \times stride_W - pad_w + kernel_W \
y_{min} = (y - 1) \times stride_H + 1 - pad_H \
y_{max} = (y - 1) \ times stride_H - pad_H = kernel_H
$$
通过上面的公式,在t步,我们能够计算出每个特征向量$h_j$的在原始图片中感受野的中心点$c_{t, j}$,然后通过注意力权重计算出t步label在原图中的注意力位置$c_t$,$c_t = \sum_{j=1}^T \alpha_{t, j} c_{t, j}$。
目标区域的注意力集中
有上面的步骤,在生成字符的每一步我们都能够得到一个注意力中心,下面我们对这个中心取一个小patch $F_t = Crop(F, c_t, P_H, P_W)$,这个patch的大小要大约能够框住这个字符。
我们可以通过下面的公式计算出他的能量分布
$$
e_{t}^{(i, j)} = tanh(R g_t + S F_t^{(i ,j)} + b)
$$
其中R,S和b都是训练的参数。
最后,我们通过softmax能够将其转变为区域上的概率分布。
$$
P_t^{(i, j, k)} = \frac{exp(e_t^{(i, j, k)})}{\sum_{k'}^{K} exp(e_t^{(i, j, k'))}}
$$
其中K表示label的类别数。
FAN Training
FAN可以进行端到端的训练,使用传统的反向传播算法,AN和FN可以合在一起,最后的loss是由这两个loss的凸组合构成,$L = (1-\lambda)L_{attn} + \lambda L_{focus}$,经过实验,$\lambda$取0.01比较好。最后在公开数据集上测试的结果发现FAN比其他的模型都有较大的效果提升。
总结
在本篇文章中,作者针对encoder-decoder网络结构中的一些bad case,对这些bad case进行分析,找到了一些可能存在的原因,同时根据这个原因进行网络的构建,在原结果上有了一定的提升,这给我们做科研一些启发,即在现有的模型上进行复现结果,然后对结果中的一些错误加以分析,根据这些分析想一些改进方法。
欢迎查看我的知乎专栏,深度炼丹
欢迎访问我的博客