- CVPR2023 港科大(广州)发的一篇denoising的论文,作者里面有上海AILab的董超老师(看introduction的时候看到有一段很像董超老师 Networks are slaching off 的论文的思想,说网络overfitting的时候学习了训练集的噪声模式而非图片内容,翻回去作者看,果然有董超老师),文章提出了一种提高现有denoising方法泛化性的方法,动机就是迫使网络学习图像内容而不要学习噪声模式,主要通过两种mask的方法,一个是input mask,一个是attention mask。通过提出的方法,网络用高斯噪声训练,可以泛化到各种各样的噪声类型,如speckle noise、poisson noise等等。
方法介绍
- 文章做了一个很有意思的动机实验:在非自然图像上训练高斯去噪,然后放到自然图像加高斯噪声上去测试,如果去噪成功,说明忘了学习的是训练集上的高斯噪声的模式,从而可以泛化到具有相同噪声却有不同图像内容的自然图像上。从下图的denoised by swinir可以看出来,确实去噪成功,也证实了网络在这次实验中只是在学习高斯噪声的模式,从而无法泛化到其它的噪声上。如果希望网络训练出来之后能够泛化到各种各样的噪声上,应该让网络学习自然图像是怎么样的而非学习噪声是怎么样的。
- 从而,文章提出,对输入的图像进行mask操作,使得网络在学习去噪的同时学习重建,这样就能迫使网络学习图像内容而非噪声模式,这样训练的泛化结果(以mask的图片作为输入)即上图的右下角,可以看出网络确实是企图去恢复一张细胞图像,从而确认网络学习到了图像内容。
- 文章使用了SwinIR这个backbone,input mask被加在最初的特征图上,也就是第一层1x1的卷积之后,把随机数量的特征更换成mask token,这一步有点像drop-out操作,只是不置0而是用一个mask token。mask token被初始化为0 vector并且是可学习的参数。(文章提到,其实不学习,直接用0 vector也ok)
- 然而,直接mask input的训练方式会使得测试的时候图片亮度被提高。这是由于train和test的做法的不同,test的时候是没有mask的,其实相当于,如果train的时候用了drop out,test的时候不用drop out,卷积核一次见到的非零值就会变多,最终的结果就会变得比train的时候大。针对这个问题有一个ECCV2018 inpainting的工作提出了mask的卷积(“Image Inpainting for Irregular Holes Using Partial Convolutions”),在卷积的输出乘以一个该卷积核当前区域被mask掉的像素数量成比例的因子,从而解决了这个问题,但这里是transformer,所以文章提出对特征进行mask。其实就是把网络中间的特征,也用随机的概率mask掉一些位置,换成另一个mask token。
实验
-
在高斯噪声上训练,在各种其它噪声上测试。
-
实验发现使用随机的ratio比使用固定的ratio好
-
另一个有意思的点是,随着mask ratio的增加,高斯噪声的去噪效果只有极缓慢的下降而其它噪声的去噪效果却可以增加,直到75%,所以选75%左右是最佳选择,存在一个泛化和拟合的trade off
- 与SOTA方法的比较在下面:
- 奇怪的是,这里的baseline model和dropout到底是什么,文章并没有明确指示。我猜测baseline是文章正文中描述的transformer网络结构去掉两个mask机制的模型,也就是说文章用的其实并不是swinir,而是一点修改,从结果也看出baseline比swinir效果好一点,而baseline加上两个mask机制效果又比baseline效果好。
- 文章做了很多泛化实验,这些实验有很好的借鉴性。比如,文章可视化了训练过程中在不同噪声上的psnr和ssim曲线,可以看出,随着训练进行,baseline对其它噪声的psnr下降了,而mask training的模型对其它噪声的psnr提高了,由此看出baseline在过拟合而mask training在有效拟合。
- 再比如下面这个图:
个人观点
- 我觉得对特征进行mask的操作,并没有很好的针对其提出的动机。如果是因为train和test的不匹配造成的,对特征进行mask也并没有解决这个问题,道理上讲不通。但是实验结果的展示上可以借鉴,当图像的亮度有变化却不明显时,可以借鉴直方图来展示使得读者能更直观地感受亮度的变化。
- 此外,这方法也太简单了,虽说动机很有意思,但是方法好像很容易就能想到,难道审稿人不会质疑创新点不够/工作量不够吗。。。methods章节除去motivation部分和对transformer的architecture介绍部分,真正介绍到自己的方法就只有半页,两自然段的文字量。。
- dropout模型从附加材料看到一点描述,但还是模棱两可,到底是直接用dropout这个inpainting模型作为denoising方法进行去噪计算指标,然后baseline模型用了dropout的思路,还是说表格里的dropout指标就是把baseline模型用了dropout的思路计算的结果。并且,这里说dropout layer放在模型的output convolution layer前面,这也很奇怪,如果是放在每个module的output convolutional layer前面还能解释,但又不应该这么写,如果真的是放在整个模型的最后一层前面,就很不合理。