Insight
首先,介绍一下文章的insight也就是作者针对这个任务的一个观察或者是假设提出他的观点。
本文基于的假设是:去模糊网络如果去模糊的效果足够好,那么去模糊结果中没有残余的运动线索,所以网络是难以识别剩余的模糊核并且进行模糊放大从而得到重新模糊的结果。
可以看到a图是干净的锐利图像,不存在模糊因此也无法识别得到模糊核;f是模糊图像,很容易识别图中的模糊核。b、c、d是三种去模糊算法生成的去模糊结果,他们对于模糊图像的去模糊处理不够好,结果中还有剩余的运动线索,因此可以很容易进行模糊核识别并对模糊进行放大,得到相应的重模糊结果g、h、i。最后的e是本文训练策略下生成的去模糊结果,由于去模糊效果较好,剩余的运动线索少,因此无法进行重模糊。文章也就是基于这个实验结果的观察提出了假设:去模糊越好,去模糊结果越难重新模糊。
为了验证这一假设,本文做了两组实验:
第一组实验,计算了去模糊结果与干净锐利图像之间的PSNR值,PSNR值越高代表去模糊的效果越好;第二组实验,计算了重模糊结果与原始模糊图像之间PSNR值,PSNR值越高代表重模糊的效果越好。从表格中可以看到,去模糊效果越好的结果,进行重新模糊的效果就越差,这验证了本文的假设是成立的。
Method
本文的主要贡献在于提出了一个适用于去模糊任务的训练策略,以及一个重模糊损失函数。网络训练过程如下所示:
整个网络由两部分组成,分别是去模糊模块MD和重模糊模块MR,在训练过程中交替训练这两个模块。网络训练刚开始的时候训练MD模块,将重模糊MR模块的权重固定,利用干净的锐利图像作为监督信息进行训练;经过一段时间训练之后交替训练MR模块,此时固定去模糊模块MD的权重。如a部分所示,重模糊模块的训练有两个支路,分别对应假设中,有残余运动线索的去模糊结果能够进行重模糊得到模糊图像,以及去模糊得到的足够干净的去模糊结果没办法进行重模糊。所以上支路的MR的输入是去模糊结果L,下支路对应的输入是干净图像经过去模糊网络之后的去模糊结果,下支路这个输入是为了保证经过去模糊处理之后是完全不存在残余的运动线索。
由于本文的创新点不在于网络结构,而在于训练策略以及损失函数,因此文章中所采用的去模糊网络可以是U-NET也能是目前性能比较好的去模糊网络。本文的去模糊网络用的是U-NET,重模糊网络用的是几个ResBlock的堆叠。
损失函数部分,如下所示:
首先是重模糊模块,其训练过程由两部分约束组成,分别是LBlur和LSharp。LBlur是迫使网络在去模糊图像存在残余运动线索的时候对这部分模糊进行放大,LSharp则是约束该模块在不存在运动线索的时候无法放大剩余的模糊。其次是去模糊模块,去模糊模块的损失函数由L1和LReblur组成,L1是利用干净图像S作为监督信息进行监督学习,LReblur则是约束去模糊结果进行重模糊之后的输出要与干净图像经过重模糊之后的结果尽可能接近,相当于去模糊模块在训练过程中存在着两级约束,能够实现更好的去模糊。
值得一提的是,本文的训练策略与对抗训练相似,但是又存在着些许不同。如下图所示:
首先是a图中,作者提到了网络训练中的两个优化方向,Fake到Real以及Blurry到Sharp。模糊图像B位于Blurry和Real的象限,去模糊结果L位于Fake和Sharp的象限等等。从b图中可以看到对抗loss的优化方向是从L到S,其中有两个优化方向,Blurry到Sharp和Fake到Real;本文提出的LReblur则是只有Blurry到Sharp这个优化方向。这使得相比于对抗训练,本文的优化较为简单,能够取得较好的去模糊结果。下面是可视化结果:
本文在推理阶段针对每个测试实例进行了自适应的去模糊模块权重调整以达到更好的去模糊结果。推理阶段通常情况下只需要去模糊网络MD,但是本文利用了重模糊模块MR针对每个实例对于去模糊模块MD的权重进行了自适应更新。具体的步骤如下所示:
先利用去模糊模块对于模糊图像进行初步的去模糊处理,然后进行迭代。利用重模糊模块对于去模糊模块MD的去模糊结果进行重模糊,并且每一轮迭代重模糊网络的监督信息是上一轮迭代产生的去模糊结果,如右图所示,一步步的逼近潜在的干净锐利图像。下面是可视化结果:
Experiment
本文的可视化结果,可以看到去模糊的效果有一定程度的提升,推理阶段的自适应权重调整能够获得具有更锐利边缘的去模糊结果。