SuperResolution by FSRCNN

以下内容基于本人阅读理解

arXiv:1608.00367v1 [cs.CV] 1 Aug 2016

作为卷积网络实现超像素任务的开山鼻祖,虽然已经不是state-of-the-art的网络,但是新的论文还是会把srcnn拿出来diss一轮。


论文简介

srcnn是第一篇用卷积网络做超像素的,效果超过了传统方法,但是计算量大,不能做到实时。fsrcnn基于srcnn,提出了新的网络结构。

srcnn的短板

预处理过程

srcnn在第一步就通过bicubic interpolation将输入图像放大n倍(n为超像素的倍数),因此此后进行的非线性映射过程,计算量以n^2倍提升。

非线性映射过程

非线性映射过程的层数越多,卷积核越大,效果越好,但是计算量也随之增大。

fsrcnn的改进

引入deconvolution层

deconv层作为输出层,这样mapping的过程都在low resolution space完成,计算量以n^2倍减少。

引入shrinking和expending

shrinking减少通道数,expending扩充通道数。因此mapping过程可以叠加多次卷积而计算量也不会很大。

沙漏状的architecture

一堆卷积操作的叠加实现end-to-end的超像素任务

速度很快

比srcnn-ex快40倍,fsrcnn-s可以在cpu上做到实时而且效果不比srcnn差

迁移学习

训练好的网络只需要fintune deconv层就可以实现其他scale factor的sr

fsrcnnArchitecture

Trick

  1. 网络按scale factor = 3训练,收敛后只fintune deconv层即可得到其他scale factor(如2,4)。
  2. Augmenation,缩小了0.9到0.6倍以及旋转,数据集增大了20倍
  3. 输入的图片需要根据scale factor剪裁成10像素左右的patch(约定俗成?)
  4. 论文作者自制了一个数据集:General1000,图片中比较少纯色块的,适合训练sr任务(可是剪出来的patch还是很多色块啊)。训练时用General1000和91images。
  5. BSD500是jpg格式的,不适合做sr
  6. feature extraction用5x5,deconv用9x9
  7. 激活函数用PReLU,据说不会导致dead kernel
  8. 每层的权重初始化采用不同的mean和stdev,weight和bias采用不同的learning rate
  9. 只采用了MSE作为loss函数,目前state-of-the-art是perceptual loss以及adverserial loss

实验结果

result

Conclusion

将convNet应用到超像素任务,并且非常快,结构非常精简,论文简单易懂。

可是源码是陈旧是caffe,重现实验效果花了我1个月(其实是我太渣…)。忽略了源码中各层权重采用了不同的初始化参数,忽略了data需要做patch,忽略了网络是按scale factor = 3训练后再fintune到其他scale factor的。

曾经是state-of-the-art的超像素网络,但是李飞飞的新论文显示,超像素的效果,不完全是基于psnr判断的,提出一个perceptual loss,替换掉MSE的loss function之后,输出的图片psnr较低,但是感官效果更好。