Removing rain from single images via a deep detail network

纪念一下第一篇仔细研究的论文

先简单梳理一下整个文章的逻辑,以及主要应用的方法。

以CNN为基础,通过ResNet激励简化学习过程,增加深度

clean image 和通过电脑合成的rainy image分别作为label与input,文中通过卷积层进行不断迭代,直至达到效果最优,既与clean image的SSIM值最大。

下图是论文提出的5种训练过程,其训练结果的图片与训练过程一一对应,其效果最好的便是论文中所提到的方法。

      

 

根据5个过程对比,final network的一大特点便是对于输入的图片进行了分解处理,下图为论文中展现的效果图

通过下面的柱状图可以很清晰的看到,通过这样的分解细节处理,把整个像素点的范围都缩小了,集中在一定范围之内,整个网络的效果得到提升。

这里的分解处理是通过导向滤波实现的,以自身作为引导图像,其实此时这个导向滤波就变成了一个Edge-perserving的滤波器。

当导向滤波就变成了边缘保持的滤波操作,此时原来求出的和的表达式就变成了: 

考虑两种情况:

  • 情况1:高方差区域,即表示图像在窗口中变化比较大,此时我们有,于是有和。
  • 情况2:平滑区域(方差不大),即图像在窗口中基本保持固定,此时有,于是有和。

也就是说在方差比较大的区域,保持值不变,在平滑区域,使用临近像素平均(也就退化为普通均值滤波)。这也就是为什么会达到Edge-perserving的原因。

处理好输入图片,卷积BN。在CNN中,Batch就是训练网络所设定的图片数量batch_size。BN主要目的是为了解决梯度消失与梯度爆炸的问题。

关于BN的解释,可以参考这篇博客,真的写的非常好。https://blog.csdn.net/Fate_fjh/article/details/53375881

标准化后,采用relu函数,它的作用就是增加了网络各层之间的非线性关系,否则,如果没有激活函数,层与层之间是简单的线性关系,每层都相当于矩阵相乘,这是无法完成整个过程的。

final network的第二大特点便是采用ResNet。ResNet的特点,Residual,残差,名字就体现了,不学绝对值,而学差值。学习映射后相对于原来的偏差,即和identity的差值,绝对变相对。前向,容易学习,后向,有了梯度高速通道,更好训练,能避免梯度消失。

ResNet是通过引入一个深度残差学习框架来解决退化问题(degradation,就是指非常深的网络的性能反而比较浅的网络差,而且越深越差)。通过拟合残差映射来代替之前的拟合底层映射,假设我们最后要求的映射为H(x),但求H(x)并不容易,我们转而去求F(x)≔H(x)-x,然后再通过F(x)+x来求解最后的H(x)。而残差的思想便是去掉相同的主体部分,从而突出微小的变化,可以理解为差分放大器。

到这里整个训练过程便结束了。

根据文章中的内容,我重新模拟了前面4种训练模型,论文中共进行了2100次迭代,由于时间原因,我每一个模型大约都只执行了40次左右的迭代,效果图如下。

                             

                             

                              

不难看出最后一幅效果是比较不错的。

猜你喜欢

转载自blog.csdn.net/ltd0924/article/details/86522567