概述

对DnCNN算法进行优化

DnCNN算法基于残差思想进行降噪,那么利用手工方法将“大概率噪声”“大概率非噪声”“其他”分类后进行训练,可能会有更好的效果

分析

原先拟通过修改loss函数的方式来完成上述过程,但实际上DnCNN的loss函数直接调用了pytorch的mse方法,如下:

1
torch.nn.functional.mse_loss(input, target, size_average=None, reduce=None, reduction='sum').div_(2)

其loss函数是对图像整体进行黑盒运算,所以现在采用一种等效方法。

原图X + noise = 噪声图Y

Y中必然含有“大概率噪声A”“大概率非噪声B”“其他C”,那么可以简单生成三张子图,如取“大概率噪声A”和X中与B、C对应的像素就可以生成一张子图,当取B或C时,也以此类推

若如此做,便在实际意义上也是对这三类像素分开进行训练

训练结果

没有修改原训练参数,默认训练180 epochs

1
180 1860 / 1862 loss = 1.2376

测试结果

本次训练

1
2
3
4
2022-10-17 02:27:21: Datset: Set68      
PSNR = 29.23dB, SSIM = 0.9019
2022-10-17 02:27:23: Datset: Set12
PSNR = 30.45dB, SSIM = 0.9300

原模型

1
2
3
4
2022-10-17 02:32:16: Datset: Set68      
PSNR = 29.24dB, SSIM = 0.9020
2022-10-17 02:32:16: Datset: Set12
PSNR = 30.46dB, SSIM = 0.9300

对于本套测试集来说测试结果没有明显差异

由于python版本、pytorch版本、noise随机差异等的不同,此种变化在误差范围内