论文:Scene Text Image Super-Resolution in the Wild 参考:TSRN超分辨网络
重点提要
目标:针对文字图像做超分辨率提升,以提高文字识别的精度。 数据集:TextZoom。用双机位,在不同焦距的情况下拍摄得到的真实HR-LR图像对。 方法创新点:图像中心对齐模块、序列残差模块、梯度损失模块。 对比超分方法:BICUBIC、SRCNN、VDSR、SRResNet、RRDB、EDSR、RDN、LapSRN。 衡量标准:在CRNN、ASTER、MORAN三种文字识别网络上的识别精度。 损失函数:L2损失、梯度损失。
数据集
数据集被分成easy、medium、hard三种难度级别。在补充材料中,作者也展示了超分前后的PSNR和SSIM情况。
网络结构
这篇文章并没有用一般基于GAN的超分辨方法,而是直接用生成网络对图像进行超分辨,不进行对抗训练。由于训练图像对(HR-LR)是两架相机拍摄的图像,因此就涉及到了图像的对齐问题,所以网络中增加了图像对齐模块;因为网络学习的是文字图像的超分辨,所以在网络中用双向LSTM对图像的语义信息进行提取;同时,针对训练图像是文字这一要点,损失函数除L2损失外,还增加了梯度损失,以锐化文字边缘。 首先将RGB三通道的图像转灰度,然后将灰度图叠加到RGB三通道图上重构为4通道图像,此4通道图像将作为网络的输入图像。然后将输入图像进行中心对齐后,用一层CNN进行低级图像特征提取。然后将此低级特征输入5个SRB模块(由SRGAN中的res block为基础,加入BLSTM构成)中进行高级特征提取。最后经Pixel Shuffle进行分辨率提升。网络的全程训练,由L2和梯度损失共同监督。序列残差块、中心对齐模块、梯度损失三个模块,具体说来如下:
序列残差块
由于这个方法的目标是构建能够对文字图像进行超分的网络,因此借鉴文字识别中的RNN网络就很有意义。通过这个思路,就可以引入双向LSTM对输入图像从两个方向上进行语义信息的提取,从而加强文字图像超分效果的提升。通过以上思路构成一个基本的SRB单元,然后堆叠一系列的SRB便可构成网络的主体结构。 SRB块的基础是SRGAN中的生成网络中的Res block,保留Res block中的跳层连接,但是去除了Res block中的BN和激活层,在模块末端添加了BLSTM,便可构成SRB块。SRB块的输入通道数和输出通道数是一致的,因此,理解作者提出的SRB模块的根本就在于理解BLSTM。下面我们粗略介绍循环神经网络(RNN),具体的LSTM于RNN类似,解析点这里。
针对我们的问题,可以想象把一幅图像分为若干列(x1,x2,x3…)作为上图中的输入序列x1,x2,x3…。然后将输入序列中的一个元素(如x2)和上个隐藏层结果(如h1)作为函数f的输入,得到新的隐藏层结果(如h2)和输出(y2)。这便是一个节点的工作原理,其他节点同理。需要注意的是,隐藏层结果h是上个节点传递过来的记忆信息,有助于下个节点参照上个节点的信息产生更好的输出结果y。我们最终获取的是输出序列y。 关于LSTM原理我是在CRNN文章中学到的,具体公式我就不列举了,不深究LSTM而只要求会用的我觉得没必要深究LSTM具体原理,大家可以参考一下。TSRN这篇文章提到的如下公式:
其实就是我上边讲的,将输入x和上个隐藏层结果h作为函数f的自变量,因变量是新的隐藏层结果。其实按理说应该还有一个因变量是输出y,只是公式没写。
中心对齐模块
作者从一篇文章中借过来一个叫做STN的模块作为中心对齐模块,名字很响亮,论文没过多介绍,但其实看代码很容易理解其构成。由于我现在手上没有代码,我也用不到TextZoom这个数据集,因此就不分析具体的机理了。
梯度损失
这个损失还是有点意思的,属于那种比较小众玩家爱玩的。 我们计算图像梯度,最常用的两种方法,一是直接将图像进行错位相减,二是用sobel算子进行卷积计算。本文选择的就是错位相减发,因为思路很简单,稍有图像处理功底的应该都知道,我就不详细介绍了。损失函数的计算如下:
图中左侧want为SR,右侧want为HR,分别计算梯度后做减法,便可的梯度差,这便是梯度损失。
最小化这一梯度损失,便可优化SR的文字边缘。
实验数据
|