因为在网上实在是找不到RealESRGAN的数据处理代码解析 但是又需要这部分的代码生成降质图像来训练 所以就自己浅康了以下 记录一下 有错请大家指正~
这是文章的降质过程的流程图 对应的代码应该是在
Real-ESRGAN-master\realesrgan\models\realesrgan_model.py下的feed_data部分
文章将图像降质过程分为两个order四个部分 所以我也对四个部分的代码分别进行阅读 以下也通过四个过程进行书写
Blur:
在Blur部分需要注意的是在将数据传入feed_data的时候需要提前对模糊核进行设定,例如在Real-ESRGAN-master\Real-ESRGAN-master\tests\test_model.py下的随机生成模糊核:
kernel1 = torch.rand((1, 5, 5), dtype=torch.float32) kernel2 = torch.rand((1, 5, 5), dtype=torch.float32) sinc_kernel = torch.rand((1, 5, 5), dtype=torch.float32)
其中kernel1用于第一次降质模糊,剩余相应对应。
将gt和几个模糊核相应传入feeddata后 调用filter2D进行模糊。两次Blur的操作相同。
Resize:
这里的Resize包括上、下采样和保持,并且都是随机选择的;上下采样的系数和三种采样方式同样也是随机的,采样系数的最大最小值在train_realesrnet_x4plus.yml中的resize_prob。上下采样放大缩小的操作在第二次order的JPEG压缩处理(包括sinc核产生振铃)前通过下面的语句恢复需要的大小。
out = F.interpolate(out, size=(ori_h // self.opt['scale'], ori_w // self.opt['scale']), mode=mode)
AddNoise:
灰阶噪声和彩色噪声的比例由gary_noise_prob控制,使用高斯/泊松产生噪声同样也是随机选择的,调用random_add_gaussian_noise_pt或者random_add_poisson_noise_pt增加噪声。
JPEGcompress:
JPEG的压缩算法调用的是cv2的标准算法。sinc核产生振铃效应是作者认为JPEG等图像压缩算法可能会导致图像边缘出现明显的振铃效应,同样也是通过filter2D做卷积生成最后的图像。在文中也有提到有sinc核产生振铃效应的图像对训练出的网络对纹理的恢复会有更好的效果(不知道,准备去试试),对应的是文章中所提及的sharpening operation或者sharpened ground-truths。这里我也没有仔细看论文,应该是这么对应的吧?
经过以上两个order之后使用归一化生成tensor文件,所以在归一化生成的文件将其或转为PNG或直接接着下面的代码进行随机crop等操作产生训练图像对直接对网络进行训练就是之后的事了。
差不多就是这些,准备去生成图像对训练了。
———————————————————————————————————————————
降质的过程可以直接从这里下载:
(16条消息) realESRGAN的图像降质过程-深度学习文档类资源-优快云文库
其中
filepath = r"F:\DATASET\DRealSR\x4\Train_x4\Train_x4\train_realLR" filepath2 = r"F:\DATASET\DRealSR\x4\Train_x4\Train_x4\realLR_de"
filepath是需要降质的文件 filepath2是降质后文件储存的位置 需要安装basicSR库哦