上篇主要介绍了一些基本的超分辨率的方法,这篇给大家介绍一下EDSR方法。
EDSR和MDSR(17年冠军模型)
模型架构
EDSR的根本出发点还是希望增加网络的深度(卷积层的层数)和宽度(卷积核的通道数)来提高计算的准确度。而其更多的可以看作是对SRResNet的改进,去掉其对应的多余计算(主要是指BN和Relu)。其具体的Residual Block结构如右(图中a表示最原始的结构,c表示经过改变后本文提出的结构)。由结构可以看出,在使用的时候去掉了BN层。由于BN层占用了和卷积一样的内存,去掉之后可以节约40%的内存消耗,这样在相同的计算资源下,就可以训练更深的网络结构。除此之外还去掉了残差之后的Relu层操作。通过掉这些不必要的操作,EDSR可以训练更深的网络结构获得更高的精确度。
BN是深度学习中一个重要的操作,为什么在分类的时候加入BN往往会存在较好的效果,而在低分辨率的时候需要去掉呢。主要由以下几方面的原因:
- 对于超分辨率的问题我们解决的是低层的计算机视觉问题,而分类问题属于高层的计算机视觉问题,对于底层问题的解决不需要使用高层问题时使用的结构策略。
- 虽然BN是深度学习中非常重要的技术,不仅可以训练更深的网络,还可以正则化训练的过程避免过拟合。但是实验表明在低分辨率的处理过程中很少会出现过拟合现象,不仅BN方法其他的一些防治过拟合的方法(dropout等)也是不适用的。
- BN是在图像分类过程中被提出来的,而图像分类和图像生成是两个完全不同的概念。BN之所以在图像分类任务上如此有效,主要是因为图像分类不需要保留图像的对比度信息,利用图像的结构信息就可以完成,所以,将图像都通过BN进行归一化,可以降低训练难度,甚至一些不明显的结构,在BN后也会被凸显出来(对比度被拉开了)。BN会忽略图像像素(或者特征)之间的绝对差异(因为均值归零,方差归一),而只考虑相对差异,所以在不需要绝对差异的任务中(比如分类),有锦上添花的效果。
- 在图像超分辨率和图像生成方面,网络输出的图像在色彩、对比度、亮度上要求和输入一致,改变的仅仅是分辨率和一些细节,而BN对图像来说类似于一种对比度的拉伸,任何图像经过BN后,其色彩的分布都会被归一化,也就是说,它破坏了图像原本的对比度信息,所以BN的加入反而影响了网络输出的质量。对于图像超分辨率这种需要利用绝对差异的任务,BN只会添乱,还不如直接不用。
- 我们简化BN的计算公式为:对超分辨率问题往往输入的图片比较小,批量也不大,这样就会导致均值和方差的差异太大,使得统计量不在起作用。
根据上述思想,其对应的结构为:
总共使用了32个Residual Block,256个特征通道数(每一层)来进行计算。上采样采用的是亚像素卷积(ESPCN的思想),并且对于4倍上采样是在2倍上采样的基础上进行的(所有较大的分辨率都是在较小的分辨率预训练好的模型上进行进一步训练得到的)。该策略可以提高大分辨率图片训练的速度。
由于该方法采用的结构过深,训练过程容易引起数值的不稳定性,为了解决这个问题,作者采用了redisual scaling的方式进行处理。即:在残差模块的最后一个卷积层的输出上乘以一个系数0.1,个人觉得应该是对于256个通道数取0.1的比例(25.6)来进行下一步计算。至于具体是不是这样还有待研究。
除了在结构上进行改进之外,该模型还根据LapSRN的思想采用了L1范数来计算对应的误差,这样也提高了模型的准确度。
MDSR是EDSR的多尺度模型,其出发点主要是为了解决一个可以完成多个不同比率的模型,关于该模型的结构如下
该模型的共享主网络使用了80个Residual Block,64个特征通道数(每一层),增加了特征提取时候的共享机制,考虑到了不同尺寸之间的相互作用。其上采样的过程和EDSR一样,损失函数也使用的是L1范数进行。最终取得了相当不错的效果。