Learning a Single Convolutional Super-Resolution Network for Multiple Degradations论文阅读
Learning a Single Convolutional Super-Resolution Network for Multiple Degradations论文阅读
IRCNN这篇论文我感觉对后面做超分+去噪+去模糊三合一这个思路是一种启发,SRMD应该是一篇受了启发后的成果。
这篇文章的成果在NTIRE2018上参加了比赛,考虑到它本身速度很快,层数比较少,虽然成绩不是最好的,但效果我觉得也很不错了。
理论+实现
超分+去噪+去模糊三合一,退化模型就有了三种参数:
其中k描述的是模糊核,描述的是下采样,n描述的是噪声,相比于IRCNN的分析+设计网络,SRMD就比较粗暴了,直接显式地将k,s,n都作为数据加入网络进行训练(不过事实上只是针对k进行了训练)训练)。
当然了,直接往里硬塞是不行的,模糊核一般都很小(论文里用的15x15和7x7),图片就大多了,所以论文里做了一个挺有意思的trick。
它首先把模糊核拉直(一维化),然后做一个PCA(只留下15个主成分,论文中说可以保留下99.8%的能量(信息),然后把它们拉成一张纯色图,和输入图片等大。令我惊讶的不是作者的脑洞,敢想敢拼,而是这样子居然真的能训练出来,看来是我真的低估了网络的能力。
SRMD整体网络结构如图,它的网络结构比较朴实,只有12层,每层128channels,但是有两点不太一样:
1、它没用shortcut,给出的理由是训练方法得当,用不着。我想大概就是网络不是很深吧。
2、它用了BN,低级特征中很多图像处理相关的任务不喜欢用BN,理由是这样会去除一些颜色等信息。举个例子来说,如果有A=1,B=2,容易有A-B=1,但是只知道A-B=1是不能得到A=1,B=2的。用图像来说就是,我知道这里有个边缘,但是不知道原来两侧的颜色,这种感觉。不过它用了BN,我觉得可能是因为这些concat上来的’模糊核’实在是和正常图片差别太大了吧。
训练+实验
各向同性模糊核的宽度(应该就是吧):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,初始学习率,loss不下降了就减到,如果又连续五个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 is used for additional 100 epochs to fifine-tune the model.
这个我完全没懂,我给作者在github上发了个issue,如果有哪位大佬清楚这个操作具体是怎样的,或者在哪里有它的出处,麻烦告诉我一声…在https://github.com/cszn/SRMD这里。
为了让训练接近真实的情况,作者还使用了一种方式来逼近(模拟)真实的degradation过程
简单来说就是,用训练集来学习,学习出来一个模糊核,使得学习出的模糊核+bicubic下采样最接近真实模糊核+真实下采样,然后再用这个模糊核去训练SRMD。
为了公平比较(不欺负那些纯超分网络),作者还训练了一个没有噪声的网络SRMDNF,在训练好的SRMD的基础上,去掉那些concat的模糊核图片再微调一下网络,学习率也是。
最后测试真实图像效果时,作者不是使用现有的模糊核估计方法,而是进行了一波地毯式搜索来寻找恢复出来效果最好的图,嘛…不过应该比赛时不是这么干的,不然速度就不会这么快了(以重建一张1024x1024的图片为例,2x要84ms,3x要42ms,4x要27ms)
具体的实验效果我就不放了,感兴趣就看一眼论文吧。