KernelGAN: Blind Super Resolution Kernel Estimation using an Internal-GAN
1. 介绍
论文的出发点是要发掘patch上的自相关分布,通过生成器G生成LR downsample后的版本和LR自己相应的patch在分布上更相似(通过D网络判别学到),从而学习出LR的降质过程,和ZSSR一样,这个工作也是在单图上进行训练和测试,不同的是,这里像ZSSR一样使用bicubic作为默认降质,而是利用GAN利用自身分布去学习自己降质的过程。其中G网络用来学习降采样,当G网络被训练好之后,可以获得降质的kernel参数,该参数可以被用来引导进行超分辨(类似于ZSSR)。论文提出的方法是image specific的,即可以根据测试图片自身的特性生成相应的核,并利用该核作用在自己使用如ZSSR的方法进行超分辨,这应该是论文最大的insight(之前的方法image specific的sr都是使用默认bicubic核进行降质,而通用SR方法都是事先训练好然后再用在测试图片上,这样它们的分布可能不一样)。整体的框架如下所示:
2. 算法细节
2.1 生成网络
生成网络主要模拟降采样核:
由于非线性网络和实际理论不符,故使用线性网络(不加激活函数)。同时,作者发现 deep linear network 在优化上,比单层网络好很多。所以最终,生成网络是stride 2的6层线性全卷机网络:前3层卷积核为 7x7, 5x5, 3x3,后3层卷积核为 1x1,最后一层顺便做stride 2的下采样;整体相当于感受野为 13x13 的卷积核。
对于G网络,这里是一个深度线性网络,虽然理论上一层的stride网络也会work,但是实际其表现不行,可能是因为一层网络更难优化。其次也去除了relu层,因为加入其中不符合G网络downsample缩放的目的,会引入额外的artifacts(作者也不放实验说明这点)。
2.2 判别网络
判别网络是为了学习区域像素的分布,以判别是否来自真实图像分布。作者使用了全卷积 Patch Discriminator,通过输出一个heat-map(D map)来判别每一块 7x7 图像块的分布。其中包含操作:Spectral normalization,Batch normalization,ReLU激活层,Sigmoid输出层,但不包含 stride、pooling等操作。
D网络输入的是label(从LR中直接crop出来)或者是generator里输出的结果,输出是一个0-1矩阵,反映的是否该像素周边的patch(判别器感受野计算出来是7x7大小的patch)是真正LR里crop出来的。
2.3 损失函数
整体训练的loss如下所示:
其中R是对kernel进行约束,使其更符合kernel分布的先验规律,该部分如下所示:
最后,对G网络里的卷积层参数进行矩阵连乘,从而生成一个kernel,使用这个kernel可以对图像进行downsample,从而进行SR。一些实验结果如下所示: