基于像素点分类优化DnCNN
概述
对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 | 2022-10-17 02:27:21: Datset: Set68 |
原模型
1 | 2022-10-17 02:32:16: Datset: Set68 |
对于本套测试集来说测试结果没有明显差异
由于python版本、pytorch版本、noise随机差异等的不同,此种变化在误差范围内
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Clerk.Max(well);!
评论