基于TensorFlow的代码下载:https://github.com/yifanw90/FSRCNN-TensorFlow
文章链接:
(Accelerating the Super-Resolution Convolutional Neural Network
, ECCV2016)
环境配置:深度学习(一):虚拟机Linux系统搭建CPU TensorFlow
基础理论学习方便理解:deeplearning.ai 吴恩达网上课程学习(十五)——卷积神经网络及其TensorFlow代码实现
- FSRCNN
FSRCNN仍然是由港中文大学的Dong Chao, Tang XiaoOu等人做出来的文章,是SRCNN(将CNN引入超分辨率处理的开山之作)之后的又一力作。
该文章发表在CVPR2016上的文章,声称能在CPU上进行实时处理视频超分辨率。
FSRCNN是对之前SRCNN的改进,主要在三个方面:一是在最后使用了一个反卷积层放大尺寸,因此可以直接将原始的低分辨率图像输入到网络中,而不是像之前SRCNN那样需要先通过bicubic方法放大尺寸。二是改变特征维数,使用更小的卷积核和使用更多的映射层。三是可以共享其中的映射层,如果需要训练不同上采样倍率的模型,只需要fine-tuning最后的反卷积层。
由于FSRCNN不需要在网络外部进行放大图片尺寸的操作,同时通过添加收缩层和扩张层,将一个大层用一些小层来代替,因此FSRCNN与SRCNN相比有较大的速度提升。FSRCNN在训练时也可以只fine-tuning最后的反卷积层,因此训练速度也更快。
1.1 FSRCNN结构
FSRCNN可以分为五个部分。
特征提取:SRCNN中针对的是插值后的低分辨率图像,选取的核大小为9×9,这里直接是对原始的低分辨率图像进行操作,因此可以选小一点,设置为5×5。
收缩:通过应用1×1的卷积核进行降维,减少网络的参数,降低计算复杂度。
非线性映射:SRCNN中,采用的是5×5的卷积核,但是5×5的卷积核计算量会比较大。用两个串联的3×3的卷积核可以替代一个5×5的卷积核,同时两个串联的小卷积核需要的参数3×3×2=18比一个大卷积核5×5=25的参数要小。FSRCNN网络中通过m个核大小为3×3的卷积层进行串联。
扩张:作者发现低维度的特征带来的重建效果不是太好,因此应用1×1的卷积核进行扩维,相当于收缩的逆过程。
反卷积层:可以堪称是卷积层的逆操作,如果步长为n,那么尺寸放大n倍,实现了上采样的操作。
FSRCNN中激活函数采用PReLU,损失函数仍然是均方误差。对CNN来说,Set91并不足够去训练大的网络结构,FSRCNN提出general-100 + Set91进行充当训练集。并且进行数据增强,1)缩小尺寸为原来的0.9, 0.8, 0.7和0.6。2)旋转 90°,180°和270°,因此获得了数据量的提升
① Feature extraction
在SRCNN中,feature extraction选的kernel size 为9,然而SRCNN是针对ILR(插值后的低分辨率图像)进行操作的。而FSRCNN则是对LR进行操作,因此在选取kernel的时候,可以选取小的一点。作者选取为5×5
② Shrinking
在mapping过程中,一般是将LR feature进行map到HR feature中,因此LR feature maps的维数一般非常高。作者通过选取1×1的卷积核进行降维,从而减少后面的计算量。
③ Non-linear mapping
在SRCNN中,作者选取了一个5×5的map layer,然而5×5会带来比较大的计算量,作者将选取3×3的kernel,通过m个3×3的卷积layer进行串联。
④ Expanding
作者发现低维度的HR dimension带来的重建效果并不是特别好,因此作者通过1×1的卷积layer,对HR dimension进行扩维,类似于Shringk的反操作。
⑤ Deconvolution
转置卷积则是实行上采样操作。这个操作可以看作是conv的逆操作,因为stride=k时的cov卷积操作会将feature map缩水k倍。所以stride为k的deconv则会将feature map进行放大k倍。
⑥ PRelu
作者定义了一个激活函数PRelu activation function as f(xi) =max(xi; 0) + aimin(0; xi),
where xi is the input signal of the activation f on the i-th channel,
and ai is the coefficient of the negative
We choose PReLU mainly to avoid the“dead features” [11] caused by zero gradients in ReLU.