以下内容基于本人阅读理解
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
Trick
- 网络按scale factor = 3训练,收敛后只fintune deconv层即可得到其他scale factor(如2,4)。
- Augmenation,缩小了0.9到0.6倍以及旋转,数据集增大了20倍
- 输入的图片需要根据scale factor剪裁成10像素左右的patch(约定俗成?)
- 论文作者自制了一个数据集:General1000,图片中比较少纯色块的,适合训练sr任务(可是剪出来的patch还是很多色块啊)。训练时用General1000和91images。
- BSD500是jpg格式的,不适合做sr
- feature extraction用5x5,deconv用9x9
- 激活函数用PReLU,据说不会导致dead kernel
- 每层的权重初始化采用不同的mean和stdev,weight和bias采用不同的learning rate
- 只采用了MSE作为loss函数,目前state-of-the-art是perceptual loss以及adverserial loss
实验结果
Conclusion
将convNet应用到超像素任务,并且非常快,结构非常精简,论文简单易懂。
可是源码是陈旧是caffe,重现实验效果花了我1个月(其实是我太渣…)。忽略了源码中各层权重采用了不同的初始化参数,忽略了data需要做patch,忽略了网络是按scale factor = 3训练后再fintune到其他scale factor的。
曾经是state-of-the-art的超像素网络,但是李飞飞的新论文显示,超像素的效果,不完全是基于psnr判断的,提出一个perceptual loss,替换掉MSE的loss function之后,输出的图片psnr较低,但是感官效果更好。