Learning a Single Convolutional Super-Resolution Network for Multiple Degradations论文阅读

Learning a Single Convolutional Super-Resolution Network for Multiple Degradations论文阅读

IRCNN这篇论文我感觉对后面做超分+去噪+去模糊三合一这个思路是一种启发,SRMD应该是一篇受了启发后的成果。

这篇文章的成果在NTIRE2018上参加了比赛,考虑到它本身速度很快,层数比较少,虽然成绩不是最好的,但效果我觉得也很不错了。

理论+实现

超分+去噪+去模糊三合一,退化模型就有了三种参数:

y=(xk)s+ny=(x \otimes k) \downarrow_{s}+n

其中k描述的是模糊核,s\downarrow_{s}描述的是下采样,n描述的是噪声,相比于IRCNN的分析+设计网络,SRMD就比较粗暴了,直接显式地将k,s,n都作为数据加入网络进行训练(不过事实上只是针对k进行了训练)训练)。

当然了,直接往里硬塞是不行的,模糊核一般都很小(论文里用的15x15和7x7),图片就大多了,所以论文里做了一个挺有意思的trick。
Learning a Single Convolutional Super-Resolution Network for Multiple Degradations论文阅读

它首先把模糊核拉直(一维化),然后做一个PCA(只留下15个主成分,论文中说可以保留下99.8%的能量(信息),然后把它们拉成一张纯色图,和输入图片等大。令我惊讶的不是作者的脑洞,敢想敢拼,而是这样子居然真的能训练出来,看来是我真的低估了网络的能力。
Learning a Single Convolutional Super-Resolution Network for Multiple Degradations论文阅读
SRMD整体网络结构如图,它的网络结构比较朴实,只有12层,每层128channels,但是有两点不太一样:

1、它没用shortcut,给出的理由是训练方法得当,用不着。我想大概就是网络不是很深吧。

2、它用了BN,低级特征中很多图像处理相关的任务不喜欢用BN,理由是这样会去除一些颜色等信息。举个例子来说,如果有A=1,B=2,容易有A-B=1,但是只知道A-B=1是不能得到A=1,B=2的。用图像来说就是,我知道这里有个边缘,但是不知道原来两侧的颜色,这种感觉。不过它用了BN,我觉得可能是因为这些concat上来的’模糊核’实在是和正常图片差别太大了吧。

训练+实验

各向同性模糊核的宽度(应该就是σ\sigma吧):2x范围[0.2,2],3x范围[0.2,3],4x范围[0.2,4],每隔0.1抽一次样,大小15x15

各向异性模糊核,看不懂,用上了再说吧。

加性噪声水平[0,75]

训练集BSD400张,DIV2k800张,WED4744张,切割成40x40的图片,共128*3000张。

训练方法batchsize128,优化器Adam,初始学习率10310^{-3},loss不下降了就减到10410^{-4},如果又连续五个epoch不下降了,就做这样一个操作:

When the training error keeps unchanged in fifive sequential epochs, we merge the parameters of each batch normalization into the adjacent convolution fifilters. Then, a small learning rate of 10510^{-5} is used for additional 100 epochs to fifine-tune the model.

这个我完全没懂,我给作者在github上发了个issue,如果有哪位大佬清楚这个操作具体是怎样的,或者在哪里有它的出处,麻烦告诉我一声…在https://github.com/cszn/SRMD这里。

为了让训练接近真实的情况,作者还使用了一种方式来逼近(模拟)真实的degradation过程

kb=argminkb(xkb)sb(xkd)sd2,x\boldsymbol{k}_{b}=\arg \min _{\boldsymbol{k}_{b}}\left\|\left(\boldsymbol{x} \otimes \boldsymbol{k}_{b}\right) \downarrow_{s}^{b}-\left(\boldsymbol{x} \otimes \boldsymbol{k}_{d}\right) \downarrow_{s}^{d}\right\|^{2}, \quad \forall \boldsymbol{x}

简单来说就是,用训练集来学习,学习出来一个模糊核,使得学习出的模糊核+bicubic下采样最接近真实模糊核+真实下采样,然后再用这个模糊核去训练SRMD。

为了公平比较(不欺负那些纯超分网络),作者还训练了一个没有噪声的网络SRMDNF,在训练好的SRMD的基础上,去掉那些concat的模糊核图片再微调一下网络,学习率也是10510^{-5}

最后测试真实图像效果时,作者不是使用现有的模糊核估计方法,而是进行了一波地毯式搜索来寻找恢复出来效果最好的图,嘛…不过应该比赛时不是这么干的,不然速度就不会这么快了(以重建一张1024x1024的图片为例,2x要84ms,3x要42ms,4x要27ms)

具体的实验效果我就不放了,感兴趣就看一眼论文吧。