超分数据制作方案 - yubo105139/paper GitHub Wiki

超分数据制作方案

内容主要涉及2021年超分辨率的论文以及部分其他部分经典论文,如要涉及如下:

kernelGAN、realSR、ESRGAN、BSRGAN、Real_ESRGAN、ADDSR、ClassSR、MANet等论文

制作数据(主要介绍通过代码制作数据的方案)

一、退化模型:(根据$I_{HR}$获得$I_{LR}$)

核心思路

围绕以下公式:

$ I_{LR}=({I_{HR}}⊗B)↓S+N$

围绕上述退化模型的3个因子:B为模糊核,S为下采样倍数,N为噪声

模糊核可以采用 各向同性高斯模糊核各向异性的高斯模糊核、**自设定模糊核(kennelgan、MANet)**等;

降采样可以采用 双线性插值、最近邻插值、双三次插值等方法;其中cv2.resize()底层也是前三种方式

噪声可以采用 高斯模糊JPEG压缩噪声传感器噪声、采集噪声

二、各篇论文的方式方法

1、kernelGAN

Kernel的生成器是一种线性模型且不含任何激活层;

采样核获取 ​ 制作的kernel 想满足的标准 ​ 1)kernel总和需要为1; ​ 2)kernel的几何中心必须在正中央位置(确保图像不会几何变形); ​ 3)kernel需要有稀疏性,不至于过度平滑; ​ 4)kernel希望越接近边界越接近零,不希望非零值靠近边界。

噪声获取

​ 噪声收集代码中的滑动窗口预设值为128,灰度图方差最大值为32,灰度图方差最小值为0.001,如若截取图像灰度图方差在二值之间,则减均值收集为噪声。

数据制作

​ 获取数据时,首先减除原始图像部分边缘(eg:长宽各减20,上下左右各10),再次裁剪图像获得图A(确保图像尺寸能够被比例因子scale_factor整除);以避免代码错误

​ 最后从图A中获取64*64的图像块;通过裁剪图A经过双三次下采样下降scale_factor倍,再通过最近邻插值上采样scale_factor倍 得到26*26的图B(26由生成器计算模型output_size得来)。图B添加了自身噪声(crop_im += np.random.randn(*crop_im.shape) / 255.0)。

训练结果保存内容

hr_image表示去噪后的高分图; 
lr_image_xn表示n倍低分叠加噪声图; 
kernel_xn表示n倍降质核;  
noise_patch表示噪声子图块;
noise表示噪声子图减去其均值后的噪声分布;  
optimal_kernel_x2表示GAN判别器loss最接近0.5,并且GAN生成器loss最小时候的对应的Kernel, 而kernel_xn为迭代次数终止时候的Kernel  

结论

​ KernelGAN适用于空间不变核估计,对小图像块无法进行有效核估计

2、RealSR

​ 思路:统计 模糊核 与真实噪声 分布 用于 制作训练对

采样核噪声是从原图(非HR图)中获得的,采样核可通过kernelgan获得,噪声是通过滑动计算方差和均值获得。HR图通过原图无噪声下采样获得。

​ 下采样方式采用bicubic。

​ 原噪声收集代码中滑动窗口大小预设是256,灰度图均值预设是50,灰度图方差预设是20,噪声判定条件为滑动窗口灰度图方差小于20且均值大于50,则定为噪声。

实验设置:
 	由于从浙江档案网站上获取的图片普遍较小,故将滑动窗口大小、灰度图均值、灰度图方差分别设置为64、60和30,判定条件不变;
	HR图的制作只与采样核和下采样倍数有关,通过原图经过无噪声下采样获取,LR在HR的基础上进行二次下采样获取,噪声在代码运行过程中添加给LR图。

3、ESRGAN

​ 论文详情见地址

4、BSRGAN

​ 作者认为退化模型的影响因素和一些前提:

​ 1)模糊、下采样、噪声会真实影响图像的退化;

​ 2)HR和LR图均存在噪声和模糊;

​ 3)传统退化模型的模糊核空间随尺度变化,利用小尺度的模糊核的分析计算设计大尺度因子;

​ 在退化模型中加入随机置换策略,即随机执行模糊、噪声和下采样来获得退化的LR图像

​ 作者训练数据方面采用DIV2K、Flickr2K、WED以及源自FFHD的2000人脸图像,图像块采用72*72

KAIR具体实验代码(只与数据处理有关)

数据预处理位置:./data/dataset_blindsr.py
需要设定参数:patch_size(图像尺寸),lq_patchsize(小图图像尺寸),默认256(64×4)和64
注意事项:
	1、若传入HR图尺寸小于patch_size,则将随机生成纯色图作为原HR图,LR图在此基础上获得。
	2、数据处理中会原图切割成正方形图,另根据照片是否有人脸将图像分别进行旋转、翻转等数据增强操作
图退化模型位置:./utils/utils_blindsr.py
需要设定参数:lq_patchsize(小图图像尺寸),默认64,可传参;scale2_prob,默认0.25;sf缩放倍数,默认4;
注意事项:
	1、首先从整图上随机截取sf的整数倍作为原HR图,截取尺寸为lq_patchsize×sf;
	2、当sf=4且随机值小于scale2_prob时,采用执行cv2.resize()随机采样核获取两倍下采样图,或采用双三次下采样获得两倍下采样图,并将sf置为2,此处操作等价于数据增强;
	3、确保downsample3 在downsample2 之后运行,此处是上采样和下采样联合操作;
	4、在随机置换过程中的下采样四分之三执行cv2.resize()随机采样核进行下采样,剩下四分之一高斯核卷积模糊,并使用最近邻下采样

论文详情见地址

两步训练法

5、Real_ESRGAN

优点:

Real-ESRGAN 在去除伪像和恢复纹理细节方面都优于以前的方法。

​ 增加振铃过冲伪像的处理;(像像素点左右摇摆留下的虚影)我觉得这种模糊对图片上有文字、或者有线条的图片处理比较明显。

论文中的数据处理流程为:

​ Blur->Resize->Noise->JPEG->Blur->Resize->Noise->JPEG+2D sinc sfilter ​ Blur包括高斯模糊和sinc滤波 ​ Resize采样方式包括双三次和双线性; ​ Noise包括高斯噪声、泊松噪声、颜色噪声和灰噪声 ​ JPEG是JPEG压缩 ​ 2D sinc sfilter表示 使用 sinc滤波器 模拟 振铃过冲伪像

​ 详细参数设置见论文介绍

​ 两步训练法

6、classSR

​ 未对数据有什么特别改动,主要着重于网络模型

​ 论文详情见地址

7、ADDSR

​ 未对数据有什么特别改动,主要着重于网络模型

​ 主要是对ADDNet网络在超分辨率上的实现,适用于特定的CPU处理器,故不过多介绍。详情见地址

8、DASR

​ 训练数据采用的DIV2K和Flickr2K,着重于网络模型

​ LR图在训练过程中获取,不保存LR图,数据退化过程比较简洁:下采样:bicubic、模糊:高斯;退化详情见代码/utils/util.py

​ 特点是退化过程采用torch、np、math仓直接对数据图像操作,基本都有重写代码,感觉代码作者思维比较清晰

​ 论文详情见地址

9、D2C-SR

​ 未对数据有什么特别改动,主要着重于网络模型,论文详情见地址

10、MANet

​ 未完待续