去雨指的是:对于一张雨中的图片,去除画面中的雨滴,得到还原后的图片,与图片去雾、超分辨率等同属CV领域中图像处理的范畴。去雨作为一种偏向low level的图像处理,本质上是分离图片中的内容与叠加的雨滴模式,并加以去除。这一问题以往多采用字典学习、稀疏编码等方法加以建模。在今年的CVPR中同时出现了2篇使用deep learning处理去雨问题的文章,而思路各不相同,故分别介绍供大家参考。
第一篇Removing rain from single images via a deep detail network(下称deep detail),对于雨滴模型的创新主要是提出了2点insights。
1、类似ResNet的思路,回归带雨图像与原图的残差,而不是直接输出还原图像。这样一来可以使算法操作的图像目标值域缩小,稀疏性增强。实际上这一点在超分辨率等很多问题中已经被广泛应用。
2、使用频域变换,分离图像中的低频部分和高频部分,只对高频部分做去雨操作。原因是雨滴基本只存在于高频部分,分离后可以使得操作目标进一步稀疏化,实验效果显著优于不做这一操作的结果。
实现上作者使用了一个26层的ResNet,为了保证输出分辨率不变,去掉了所有的Pooling操作。实验表明:与直接输入带雨图像、输出原图相比,一个26层的ResNet效果已经与原始方法50层的ResNet效果相近,并显著优于其他旧方法。这证明了两个技巧的有效性。
第二篇Deep Joint Rain Detection and Removal from a Single Image(下称joint detection)对于雨滴建模如下:
其中B是原图,O是带雨的图片,其他的量代表雨滴带来的影响。S指叠加的雨滴的强度,R指含雨滴范围的一个 binary mask,A对雨雾进行建模。之所以将S、R分别描述并分别用网络预测,是为了避免只回归S影响了图中不含雨滴的部分,R实际上描述了雨滴存在的区域,这也是标题中rain detection的含义。S、R预测的例子可见下图。t指的是图片中多个方向的雨叠加的效果,训练所用的合成雨的图片就是多次叠加的结果。最后A描述了一个图像整体的偏移,这是由大雨中远处大量雨滴叠加造成的类似雾的效果,实际算法中也用了去雾算法做处理。
在训练时作者使用了多分支的dilated convolution网络,以在节约计算量的同时扩大网络的感受,也获得更多的context信息。网络级联地预测S和R,在训练时都提供loss,在测试时得到S、R后,按之前的模型进行去雨处理。在实际实验中还发现采用去雨1次 – 去雾1次 – 再去雨1次的流程得到的结果是最好的。
此外两篇文章在训练数据和测试方法上都是沿用之前工作的方法。训练数据都是使用不带雨的图片人工合成带雨的图片,并从图中抽取patch进行训练。在测试流程上,对于合成图片,主要比较衡量图片结构相似度的SSIM指标。对于真实环境的带雨图片,主要是视觉上的qualitative比较。
对于去雨算法的应用领域,join detection论文作者表示,主要可以用于监控视频、比赛视频等场景中,需要增强画质的时候应用。此外deep detail论文的作者还表示,他们的框架在其他画质增强的应用实验中也得到了不错的效果,包括透过玻璃观看景物而玻璃上有大量雨滴等情形。