论文发表于TIP2017,第一次将深度学习用于单张图像去雨
论文链接
本文的主要贡献如下:
-
使用CNN,从数据中直接学习干净图和雨图的detail层之间的非线性映射;同时使用图像增强来提升视觉效果;速度快
-
使用图像处理领域知识来修改目标函数提升去雨性能,而不是通过增加神经元数量或者加深隐藏层
-
合成数据集上训练,真实场景中的泛化性能也很好
模型
在detail层上进行去雨
假设输入的雨图和相应的干净背景图分别为
I
I
I和
J
J
J。去雨的目标函数可以表示为下式:
W是模型参数,N表示图片数量。模型的目标即为尽可能地减小去雨结果和干净背景图之间的差别
但是作者发现,在图像领域(image domain)训练模型得到的效果不好,如下图(b)中深度为3的模型得到的结果所示。但直接加深模型也不会带来很好的效果,反而使得图片变得模糊,因为去雨是个低层次的图像处理任务,而深层次模型一般用于获取高层次的特征,所以单纯地加深模型不会带来太多效果
作者考虑使用图像处理的先验知识来解决问题。先使用低通滤波器(low-pass filter)将图像分为低通的base层和高通的detail层两个部分:
base层和detail层可视化结果如下。可以看到base层可视为一幅模糊的背景信息图像,几乎看不到雨水的存在,因此雨图的base层应当和干净背景图的base层几乎一致;detail层的像素值几乎都为0,抹去了绝大部分的细节,仅仅留下边缘信息和雨水信息
因此作者选择在detail层上训练CNN进行去雨,目标函数相应的变为衡量两张图像detail层上的差别:
最后去雨图像即为base层加上经过去雨的detail层
在detail层上训练好处在于,detail层中的大部分区域的值趋近于0,数据比原图更加稀疏。在稀疏数据上训练可以在不需要更大数据集或者更多计算资源的情况下加快收敛
CNN
作者采用的CNN结构很简单,共三层,前两层feature map数量为512,带有tanh激活函数,最后一层输出层feature map数量为3,kernel size 分别为16,1,8
使用图像增强去除雾效
作者发现在大雨情景下,直接将base层加上经过去雨的detail层得到的去雨结果较为模糊,如图(b)所示:
于是作者提出对base层和detail层进行图像增强,采用对前者使用非线性函数、对后者将CNN的输出加倍的方式减轻图像的雾效,得到最终的去雨结果
实验
作者通过对收集的350张真实图像分别用PS合成14种雨图得到包含2400对图像的数据集
与其他方法的去雨结果相比,从图像细节上可以看到,该论文的方法可以有效去雨、避免模糊
作者也给出了与部分模型对比的SSIM指标结果,可以看到效果很不错
在真实雨图上进行测试的去雨效果也还不错,但是出现了一些模糊