Spatially Adaptive Self-Supervised Learning for Real-World Image Denoising 论文阅读笔记

Spatially Adaptive Self-Supervised Learning for Real-World Image Denoising 论文阅读笔记_第1张图片

  • CVPR2023的一篇哈工大发表的真实世界图像去噪的论文,代码开源,nice
  • 文章两大要点,一个是BNN一个是LAN。
  • 文章的intro中提到,现有的很多方法虽然设计上与噪声的分布无关,但是实际上却只能处理空间独立的噪声。这一部分的介绍很流畅,对现有的一些SSID方法带过的同时,也逐个揭示了其缺点,为后续自己方法的提出进行铺垫。无论是写法上,还是内容上,都可以借鉴,并且其带过的论文,没读过的后续也可以去读一读。这一段的行文流程是这样的,先从image denoising任务入手,讲到real world image pairs是很难获取的,从而引入SSID方法(self supervised image denoising),随后介绍普通的ssid方法,说明这些方法只能处理spatially independent noise。从而自然引进处理spatially dependent noise的方法,这些方法有的难优化而性能受限,有的影响了图像的质量,有的time-consuming。从而接下来介绍自己的方法。相比pixel-shuffle downsampling的方法和blind-spot network的方法,文章提出的是一种spatially adaptive supervision的方法。

方法

  • 文章两个模块的动机是,如果噪声具有空间相关性,那么越远的地方具有噪声相关信息的可能性就越小,那么相比blind-spot取相邻像素点导致噪声相关信息干扰,文章提出blind neighborhood,取远一点,孔洞大一点,就减弱了噪声空间相关性导致的影响。这样做在平坦区域是安全的,因为没有复杂的纹理和大的变化,孔洞大一点就大一点,但是在复杂的区域就会导致信息丢失。为了找补,文章提出了一个locally aware network来从相邻像素提取信息补全BNN在非平坦区域的信息丢失。

  • 这两个模块其实只是为了在训练的时候产生准确的训练数据给自监督网络,而测试的时候可以把这两个模块丢掉,只留基础网络。说仔细点,就是,自监督网络是用noisy的image作为输入和gt,训练一个blind spot的网络,因为噪声不可预测所以这个blind spot网络最终学会预测干净的图片。但噪声具有空间相关性导致噪声可以预测,所以网络最终还是学到了预测有噪声的图片。为了解决这个问题,文章首先train这两个提出的新模块,然后用这两个新模块的输出作为gt来train这个blind spot的网络,从而避免直接以输入作为监督让网络学会预测噪声的问题。所以两个模块其实只是为了网络的训练服务的,是为了避免网络从相邻像素推测噪声使得blind spot训练失效的问题。从下图就可以看到,先train一个BNN,再train一个LAN,把BNN和LAN生成的图片作为gt来train一个普通的denoising network。
    Spatially Adaptive Self-Supervised Learning for Real-World Image Denoising 论文阅读笔记_第2张图片

  • BNN是直接那HQ-SSL提出的BSN网络改的,直接把pixel shift size从1改成k来使得输入点不再是相邻点从而避免噪声的空间相关性,k根据AP-BSN这个工作的分析设为5,来产生一个9x9的blind-neighborhood。这一点,其实我另一篇blog介绍的一篇工作LG-BPN(同样是CVPR2023)也用到了这个思想,不过人家是直接当作网络用了,而本文聪明了一些,太大的孔洞会影响网络的性能,本文仅用来产生训练用的gt。修改后的网络直接就用self-supervised 的训练策略,先train一个BNN出来,然后用train好的BNN生成的图片作为gt来train后面的LAN。
    在这里插入图片描述

  • 对于非平坦区域,用孔洞会导致细节丢失,为了解决这个问题,首先对BNN的输出取通道平均后进行局部方差的统计,方差大的区域任务是非平坦的有纹理区域:
    Spatially Adaptive Self-Supervised Learning for Real-World Image Denoising 论文阅读笔记_第3张图片

  • 然后用sigmoid函数(S就是sigmoid)根据上面的方差计算一个平坦指标, l = 1 , u = 5 l=1,u=5 l=1,u=5
    Spatially Adaptive Self-Supervised Learning for Real-World Image Denoising 论文阅读笔记_第4张图片

  • 为了找回在BNN中丢失的细节信息,文章又train了一个用几层3x3卷积和一层1x1卷积堆叠起来的LAN。LAN的输入还是噪声图片,gt是BNN的输出。但是,BNN的输出丢失了细节信息,所以用上面的公式来对区域进行加权,细节丢失严重的区域,损失的权重较低,也就是鼓励LAN在平坦的区域像BNN一样去噪,在其它区域正常去噪不要模仿BNN。
    在这里插入图片描述

  • 按顺序train好一个BNN和一个LAN后,就可以用BNN和LAN的输出来train 任何现有的网络了(文章用的是Unet。注意,这里就不需要blind spot network了,因为不是自监督训练了,gt不是原噪声图片,而是前面两个网络的去噪结果,是不带噪声的)。同样还是利用前面获得的alpha图进行加权:
    在这里插入图片描述

实验

  • 实验结果如下,在自监督的方法中确实取得了sota: Spatially Adaptive Self-Supervised Learning for Real-World Image Denoising 论文阅读笔记_第5张图片
  • 消融实验解决了我的一个疑惑,就是大费周章用两个网络的结果去train一个新的网络,为什么不直接用这两个网络的结果的融合作为结果呢。从table3 可以看到,融合两个结果不仅不如用这两个结果来train的网络,而且inference time也比较长。就测试来说,能用一个网络做的事情,当然只用一个网络好了。而至于为什么用融合结果train出来的网络取得了比融合结果更好的性能,这个是一个很重要的启发,我放在后面的个人总结里了:
    Spatially Adaptive Self-Supervised Learning for Real-World Image Denoising 论文阅读笔记_第6张图片

个人

  • 对我个人而言,文章提出的方法虽然很有启发,但更重要的是用网络的结果来train网络这个范式对我的启发。按理来说,用一个网络A的结果作为gt,来train另一个网络B,B的性能一般来说是不可能超过A的性能的。但文章通过以下四个关键的点,实现了超越:
    • 首先是用了两个网络的输出的融合来train第三个网络。只要融合方法得当,那么融合的结果就会比网络A和网络B的结果都好,那么就能train出来一个性能超过网络A和网络B的网络。但仅有这一点是不够的,因为如果仅有这点,那么train出来的网络可能会发生这种情况,理论上其对每张图片的结果,都会不如网络A和网络B的融合结果。那么网络C的必要性就仅仅剩下把两个网络加一个融合完成的事情变成一个网络完成的事情,可能效率上有提高,但结果上没有提高,并且这种做法一点也不美。
    • 重点是第二点,就是利用blind spot和自监督这个事情,设计了不同的网络。其实我们从结果就可以看到,BNN的结果已经很好了。但是BNN是blind spot的,机制上就一定会丢失细节,但不blind spot又没法自监督地train。我又想要整个流程是自监督的,又不想要网络是blind spot的,怎么办呢:先自监督地train一个blind spot网络,再用这个blind spot网络的输出来train一个非blind spot的网络,就解决了这个事情。由于我新的网络不是blind spot的,所以我新的网络从机制上,是超过原网络的性能的,现在只剩下训练数据不足以激发我这一潜能这个问题。如果我的网络特别好,那他就会对训练数据过拟合,导致连丢失细节这一步也拟合了进去,但是如果我的网络太简单,虽然不会学到丢失细节,但是在平坦区域可能又无法达到BNN同样的精度,那怎么办呢。
    • 第三点就是解决这个问题,我用一个简单的网络LAN,来避免对丢失细节这一步的过拟合,仅仅学去噪,通过对细节区域的损失权重的下调,这个简单的网络就有监督地学到了去噪这件事情。现在我这个简单的网络,相比BNN,在平坦区域表现得不够好(因为太简单了,并且没有blind spot这个机制的强约束),但在细节区域又比BNN要好(BNN有blind spot的固有缺陷在细节区域一定表现不好),那么我就可以融合这两个网络的结果,生成的训练数据,就可以解决上一点提到的训练数据质量不高的问题。从而我就实现了通过一个整体上自监督的流程,来有监督地训练一个非blind spot的网络。它比LAN大,在平坦区域又用的几乎是和LAN一样的训练数据,所以在平坦区域做得比LAN好;它非blind spot,所以在非平坦区域做得比BNN好。所以这个网络的总体性能,就会比这两个网络好。
    • 而它能不能比融合结果,也就是自己的训练数据好,就要看任务的定义是否合理,使得训练数据揭示出一种模式,网络如果学习到了这种模式,而非对训练数据的过拟合,那么网络就有可能通过对训练数据一定程度上的欠拟合,来超越训练数据,学得一种更合理的去噪的模式。这一点就是玄学了,但前面三点为这一点的出现创造了条件。
  • 我认为,这样一种自监督范式的成功,是很具有启发意义的,不过,可能之前也有这样的方法出现,我还是第一次读到这种范式,原先如果我看到用一个网络的生成结果去train一个网络(通常都是用GAN来生成训练数据,解决数据量不足的问题,在医学图像处理领域尤其常见),我都会有点嗤之以鼻,但这篇文章确实说服了我,让我觉得这个十分合理。
  • 此外,发现了一个有意思的盲点,同一句话在related works和intro中各出现了一次,仅仅是把applies改成propose(甚至不是proposes,语法错误没有加三单),把seek for改成make。严重怀疑这一段背景介绍是祖传的,哈哈哈:
    • intro中是这样的:“AP-BSN [27] applies asymmetric PD factors and post-refinement processing to seek for a better trade-off between noise removal and aliasing artifacts, but it is time-consuming during inference.”
    • related work中是这样的:“AP-BSN [27] propose asymmetric PD factors and post-refinement processing to make a better trade-off between noise removal and aliasing artifacts, but it is time-consuming during inference.”

你可能感兴趣的:(论文阅读笔记,论文阅读,笔记)