论文阅读笔记-Real-World_Super-Resolution_via_Kernel_Estimation_and_Noise_Injection
KernelGan提取下采样核
解决问题
通过学习图像的内部分布生成的降采样核,可以避免使用理想的下采样核(bicubic downsampling)得到的LR图像训练出的SR模型,应用到现实数据时,模型性能会急剧下降。
网络结构
算法细节
生成器
生成器是多层线性网络(不加激活函数),根据输入的图像下采样两倍(或多倍)。六层全卷积网络前三层的kernel size分别为7 5 3,最后三层均为1。整体的网络结构的感受野相当于是在原图像上作13×13的卷积后得到的下采样图。最后将所有的卷积核卷积成一个SR kernel,就是KernelGan提取的下采样核。
生成器的训练过程要将生成的假数据label打为true,欺骗判别器我生成的是真实数据,迫使判别器增强自己的判别能力。同时加入了四个先验约束:
loss function = GanLoss + R
判别器
判别器学习图像中的像素的概率分布。使用全卷积的Patch Discriminator,输出一个heap map来判断原图每一个7×7的patch真假概率分布。loss function无先验约束R。
判别器试图正确分类真实数据和生成器生成的假数据,以迫使生成器提升自己的生成能力更好的欺骗判别器。
loss function = 1/2(GanLoss_true + GanLoss_false)
生成器、判别器源码
kernelGAN.py
loss.py
本文细节
本文中使用KernelGan提取下采样核,并对loss function做了简单修改:
利用kenel进行downsampling操作:
Noise Injection
对于特定数据集给定一个Min_Mean和Max_Var,将大于Min_Mean、小于Max_Var的image patch的定义为noise patch并提取出来。并将它加在downsampling操作后的图像上:(随便选取kernel和noise patch):
kernelGan+noise 算法流程图
通过kernelGan和noise injection计算出n和k,并对I_HR使用n和k生成I_LR,得到(LR,HR)图像对。
Clean 操作
将I_src进行bicubic downsampling生成I_HR
RRDB(Residual in Residual Dense Block)
取消了BN,同时将Residual Block和Dense Block结合在一起。
RRDB github源码
SR-Model
生成器:RRDB
判别器:patch discriminator
generator loss function = pixel loss(L1)+ perceptual loss(VGG19)+ adversarial loss
discriminator loss function = adversarial loss(detach G 避免BP)
网络结构&总结
- 对real image做bicubic downsampling得到的I_HR
- 对real image做kernelGan和提取noise patch,并随机引用这些kernel和noise得到I_LR
- 通过SRGAN进行训练,Generator网络结构为RRDB,Discriminator网络结构为patch discriminator
loss_Generator为pixel loss(L1) + feature loss(vgg19) + adversal loss
loss_Discriminator为adversal loss