小言_互联网的博客

论文解读: Double DIP

325人阅读  评论(0)

论文解读:Double-DIP” : Unsupervised Image Decomposition via Coupled Deep-Image-Priors


Unsupervised Image Decomposition via Coupled Deep-Image-Priors)

之前介绍过一篇非常有意思的论文,deep image prior,论文作者认为,生成网络的结构本身就是一种很好的先验,这种网络结构的先验,不需要经过大量的数据训练,就可以捕获很多 low-level 的图像统计知识,这篇文章的作者因此提出了一种基于神经网络结构本身做先验,来实现图像恢复或者图像生成的任务,完全依赖一张图像和网络结构,实现图像超分,图像降噪,图像 inpainting 等各种任务。

这篇论文的作者,基于 DIP 的工作,也发表了一些有意思的研究,作者发现,很多看似无关的计算机视觉的任务,都可以看成是图层分离任务,比如图像分割,可以看成是前景与背景的分离,透明图像的分离,可以看成是反射层和透射层的分离,图像的去雾,可以分解成一张清晰的图像和有雾的图像,所有这些问题,都可以用一个无监督的网络,配合 DIP 的方式来完成,作者把这个架构称为 double DIP,基本思路就是为图像的每个图层都用一个 DIP 去学习,同时两个图层的混合系数,用一个 mask 表示,也需要去学习。如下图所示:

作者在论文中提到,在一张自然图像中,小的 patch 是有很高的重复性的,这个也是很好理解的,纹理或者结构的尺度越小,重复的概率越大,都是一些很小的边界或者平滑区域,同时,根据数据统计发现,自然图像的纹理具有一定的规律和自相似性,同一区域的小 patch 的 empirical entropy 会小于不同区域的 empirical cross-entropy,基于自然图像纹理结构的内在相关性,作者提出了一种无监督的图层分离方法,将多个 DIP 应用于重建一幅融合图像时,这些 DIP 倾向于将这张复合图像进行分离,将一张融合图像,分成两张相对 simple 的图层。

作者也列举了两个例子,用两张简单的纹理进行混叠,如果纹理图像 X , Y X,Y 融合成图像 Z Z ,一般来说,纹理或者颜色在单个图像 X , Y X, Y 里的分布比在混合图像 Z Z 里分布要简单, 根据概率论,我们知道,两个相互独立的变量的熵,小于两者之和的熵:

max { H ( X ) , H ( Y ) } H ( Z ) \max \{ H(X), H(Y) \} \leq H(Z)

基于这个原理,一张混合图像,可以分离成两张简单的图层。


上图中,橙色和蓝色曲线表示单个图层的拟合 loss,绿色曲线表示混合图像的拟合 loss,从中可以看出,单个图层的拟合比混合图像的拟合要容易,这也间接说明了混合图像的熵比单个图层的熵要大,单个图像的纹理结构有更多的自相似性,混合图像破坏了这种内在的相似结构,所以拟合会更困难。

为了对混合图像进行图层分离,需要设定分离目标,那就是什么样的图层分离是好的,也就是说如果我们知道 Z Z 是由 X , Y X , Y 组成的,但我们只知道 Z Z ,如何得到合理的 X , Y X, Y ,作者首先给出了一个重建假设,也就是说分离之后的 X , Y X, Y 是可以重构回 Z Z 的, X , Y , Z X, Y, Z 满足一定的线性组合关系:

Z = α X + ( 1 α ) Y Z = \alpha * X + (1 - \alpha) * Y

另外,每个单图层的内部纹理的相似性要尽可能地高,与此同时,不同图层之间的相关性要尽可能地低,总结一下,就是以下三点:

  • 分离的单个图层能够重构出混合图像
  • 单个图层的内在相似性要高
  • 不同图层的相关性要低

基于这三条准则,作者提出了如下的 loss 函数:

L o s s = L r e c + α L e x l + β L r e g Loss = L_{rec} + \alpha L_{exl} + \beta L_{reg}

L r e c L_{rec} 是重构 loss, L e x l L_{exl} 是一种互斥 loss,让分离出来的图层,尽可能地不相关, L r e g L_{reg} 是一个与 task 相关的正则项,主要是用来约束融合 mask 的,不同的 task,所设置的正则项也不同,比如图像分割中,mask 希望尽可能二值化,而在图像去雾中,mask 希望是平滑而且连续的。

训练的时候,为每个图层构建一个 DIP 网络,每个网络的输入都是随机噪声, y i = D I P ( z i ) y_i = DIP(z_i) ,两个图层用一个 mask 进行融合:

I ^ = m y 1 + ( 1 m ) y 2 \hat{I} = m \cdot y_1 + (1-m) \cdot y_2

作者在训练的时候,如上图所示,为每个图层分配了一个 DIP,并且为 mask 也分配了一个 DIP,DIP 本身是一个 U 型网络结构,每个 DIP 的输入都是随机噪声,训练的时候,作者也用了一些 trick,比如增加输入噪声的随机扰动可以让重建变得更加 robust,同时也对图像和输入噪声做了增广,包括旋转和水平及垂直翻转,利用 Adam 优化方式进行 BP。

作者也在 github 上发布了代码,有兴趣的同学可以下载下来试试,GitHub 代码的网址在博客最后给出了,我下载下来跑了一下,从给出的样例来看,Transparent Layers Separation 的效果还可以,dehazing 的效果要看迭代次数。

这种方法的优势就是无监督,可以利用图像本身的信息进行学习,劣势就是泛化能力不足,每次都要现学现用,时效上也比较慢。

最近两年,基于单张图像的无监督学习也是非常火热的,我们之前也讲解过类似的文章,比如 DIP 和 Single GAN,都是基于这种理念,只利用图像本身的纹理信息及统计信息进行学习,往往能获得一些意想不到的效果,不过这种通用架构在单一任务上,可能还是比不过经过大量数据学习到的 specific 架构。

有兴趣的同学可以参考我们之前的博客

参考文献:
@article{DoubleDIP,
author = {Gandelsman, Yossi and Shocher, Assaf and Irani, Michal},
year = {2019},
month = {6},
booktitle = {The IEEE Conference on Computer Vision and Pattern Recognition (CVPR)},
title = {“Double-DIP”: Unsupervised Image Decomposition via Coupled Deep-Image-Priors}
}
Github: https://github.com/yossigandelsman/DoubleDIP
Project page: http://www.wisdom.weizmann.ac.il/~vision/DoubleDIP/


转载:https://blog.csdn.net/shinian1987/article/details/105322294
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场