笔记|Real-SR超分辨网络

对超分有兴趣的同学们可直接关注微信公众号,这个号的定位就是针对图像超分辨的,会不断更新最新的超分算法解读。笔记|Real-SR超分辨网络
文章图片

正文开始
着重分析track1和track2的方法,训练DF2K_jpeg模型的方法,欢迎大家和我讨论。
论文:Real-World Super-Resolution via Kernel Estimation and Noise Injection
**参考:**Real-SR超分辨网络
NTIRE 2020比赛超分辨任务track1和track2的冠军,腾讯优图
1. 重点提要 这篇文章可以看做提供了三种构建数据集的方法(文章中只提到了前2种方法,但第3种JPEG模型更能够适应真实场景的图像超分辨,文章却没介绍,在这里我们做简单介绍。),论文虽使用2种构建数据集的方法,但使用的超分辨重建的生成对抗网络是同一个。
数据集的构建:bicubic方法(track1)、kernel_GAN方法(track2)、JPEG方法。
超分网络backbone:ESRGAN的生成网络+vgg128 discriminator判别器 / patch discriminator判别器。
损失函数:L1 loss,perceptual loss,生成对抗损失。
主要对比方法是:EDSR、ESRGAN、ZSSR、K-ZSSR以及2020年NTIRE比赛的其他方法;
图像质量评价指标:有参:PSNR、SSIM、LPIPS、MOS。无参:NIQE、NRQM、PI、BRISQUE、PIQE;
2.Track1构建数据集 一些数据集的说明:
本方法用到的数据集是DF2K数据集;
DF2K数据集=DIV2K数据集+Flick2k数据集;
DIV2K数据集 = 目标域图像 = target域 = HR = HR images set Y = 纯净的高分辨图像;
Flick2K = 源域图像 = source域 = src = https://www.it610.com/article/real images set X = 含噪声的高分辨图像;
DIV2K和Flick2K数据集都是高分辨数据集,但DIV2K的HR数据是可以直接作为训练的HR使用的,Flick2K的src数据需要进行clean up才能变成训练时的HR图像。
2.1概述 笔记|Real-SR超分辨网络
文章图片

track1类似于一般的深度学习超分辨制作数据集的方法,对HR图像,使用双三次插值进行降采样s操作,但不使用模糊核k,注入的噪声n来自于高分辨Flick2k含噪图像数据集cut下来的噪声块。具体结合下图做解析。
2.2详解 笔记|Real-SR超分辨网络
文章图片

Constructing Data部分。track1的Real-world Images 为Flick2K数据。获取Degradation Pool 的过程就是论文中提到的噪声n提取部分(从src图像中提取,即从Flick2K中提取),但并不获取模糊核k。噪声的提取方法为:设置噪声patch size(默认256*256),遍历Flick2K数据集的每张图像,在每张图像中提取出若干个patch大小区域,并将其均值和方差与设定的阈值比较,符合要求则保存该噪声patch,遍历结束便可获得噪声池,也就是获得了Degradation Pool。clean up操作通过使用2倍缩小的bicubic方法,对Flick2K数据进行去噪,便可获得HR图像。
Training Phase部分。将Flick2K做过clean up操作获得的HR和DIV2K原本的HR融合为最终的HR图像。对HR图像再进行Degradation操作,即进行bicubic降采样和噪声注入操作(上步获得的噪声池),即可获得LR图像,此时便获得了LR-HR成对的训练数据,扔进网络训练即可。
Testing Phase部分。通过生成网络,测试模型效果。
此时,论文中提到的算法流程图就很好理解了,只是不要管模糊和K的相关操作即可。
笔记|Real-SR超分辨网络
文章图片

3.Track2构建数据集 一些数据集的说明:
这个方法用的数据集是DPED,类似于Flick2K,本身是含有噪声的;
DPED = 源域图像 = source域 = src = https://www.it610.com/article/real images set X = 含噪声的高分辨图像;
DPED的src数据需要进行clean up才能变成训练时的HR图像。
3.1概述 笔记|Real-SR超分辨网络
文章图片

track2首先对DPED图像,使用kernel_GAN方法获取一些列的模糊核k(同时具有模糊k和将采样s的效果)。然后对clean up后的HR图像进行降采样s操作和模糊k操作,注入的噪声n来自于高分辨DPED数据集cut下来的噪声块。具体结合下图做解析。
3.2详解 笔记|Real-SR超分辨网络
文章图片

Constructing Data部分。相对于track1的处理,track2在这部分仅多获取了一系列的模糊核k,其他部分于track1中操作完全相同。模糊核k的获取细节可以看原论文,它的核心思想时通过kernel_GAN网络对src图像降采样,使降采样前后图像的分布信息一致,来获取真实的低分辨率图像(此步获得的低分图像没有用),同时将生成低分辨图像的网络参数提取出来,最终形成一系列的模糊核k(这是真实有用的)。此时便获得了Degradation Pool。这里简单讲一下kernel_GAN的损失函数(建议看原文或者RealSR的解析):
笔记|Real-SR超分辨网络
文章图片

第一项保证了生成图像在外形上和理想的降采样核得到的图像一致(因为kernel_GAN的直接目的仅保证了生成图像前后的分布一致);第二项保证了所有获得kernel的整体分布;第三项时对获得所有kernel的惩罚项;第四项时kernel_GAN的对抗损失,即保证生成的低分图像的分布更接近真实图像。
Training Phase部分。将上步经clean up后的HR图像进行Degration操作(模糊,降采样,噪声注入。其中模糊核噪声注入通过kernel_GAN提取到的模糊核一步到位),即可获得LR图像,此时便获得了LR-HR成对的训练数据,扔进网络训练即可。
【笔记|Real-SR超分辨网络】Testing Phase部分。通过生成网络,测试模型效果。
此时,论文中提到的算法流程图就很好理解了,只是不要管HR images set Y的相关操作即可。笔记|Real-SR超分辨网络
文章图片

4.JPEG构建数据集 这部分我不过多介绍了,毕竟作者没有提供具体的实施流程,我也不能亵渎作者。我自己做了一些实验得到了类似的结果(视觉效果和作者在GitHub上提供的预训练模型的效果一致),感兴趣的同学可以和我交流。
5.超分辨训练的生成对抗网络 生成网络用的都是ESRGAN的模块,track1对抗网络用的VGG-128网络,track2对抗网络用的patch discriminator。感知特征提取网络用的VGG19(5-4)
6.Real-SR方法和其他方法的对比结果图 笔记|Real-SR超分辨网络
文章图片
笔记|Real-SR超分辨网络
文章图片

    推荐阅读