Mask-ShadowGAN通过非成对的图像学习去除图像阴影

Mask-ShadowGAN通过非成对的图像学习去除图像阴影

论文地址:

代码地址:

作者介绍:

figure -1

Abstract

作者提出了一种新的用于去除图像阴影的方法,它用到的是非配对的图像,这样就省去了标注步骤,同时可以获得多样的训练数据。因为有阴影的图像与无阴影的图像有着潜在的关系,它们不是简单的一对一的关系,仅仅依靠对抗训练和循环一致性是远远不足。因此作者提出了一个指导模块,用于指导阴影生成器来生成阴影部分。需要注意的是,作者提出的方法是同时生成阴影部分和移除阴影这两个过程。在实验上的表现说明了方法的有效性,并且方法是在非配对的数据上训练。

Introduction

阴影去除是一个巨大的挑战,因为在去除阴影的同时还要保留阴影区域的背景部分。现在的一些深度学习的方法是去除阴影的标准方法,其主要是运用在配对的阴影图像和非阴影图像的数据集上,利用的是一种监督的方式。

但是这种主流的方法有一些弊端:首先需要标注大量的训练数据,这种方式是很耗费时间与体力的,重复的机械运动是很无聊和厌烦的。其次得到阴影图像的方式是有限的,容易受到大目标的影响,比如一些树和建筑物之类。最后一点是训练的数据受到颜色与光照的不一致的影响或者相机视角的移动。作者为了解决这些弊端的影响,采用了一种非监督的方法。

通过非监督的方式,这种方法是从非配对的数据中去除图像中的阴影。这种方法的主要的一点是,如何学习有阴影的图像与无阴影图像的潜在的联系,其中有阴影图像数据集和无阴影图像数据集中的单一图像之间没有明显的关联。通过对抗学习,作者先训练生成器 G_{f} ,其将阴影图像作为输入得到一张不能被 D_{f} 判别器区分的无阴影的图像。但是呢,这个方法很大的局限性,这种映射是高度约束不足,因此在训练期间网络容易模式崩塌,生成单一的图像。于是作者采用了另外一个相反的网络,得到一种逆映射。有一个生成器 G_{s} ,由无阴影的图像生成判别器 D_{s} 不能区分的有阴影的图像。然后利用循环一致性约束使得最终得到原来的图像。如何理解这个循环一致性呢?我以斑马于马的例子来说明,分别有两个生成器 G_{h} ,G_{z} ,和两个判别器 D_{h},D_{z} ,首先 horse_{a} 通过 G_{z} 得到 zebra_{a} ,判别器 D_{z} 判断生成的斑马是否真实,接着将 zebra_{a} 输入到生成器 G_{h} 得到 \bar{horse_{a}} ,判别器 D_{h} 判断生成的马是否真实,循环一致性是通过比较 horse_{a}\bar{horse_{a}} 之间是否相同来体现。

作者又指出,根本上呢,在深度神经网络中,相同的一个输出,总是得到独一无二的输出,也就是说。对于相同的一张无阴影的图像,总是能得到相同内容的阴影图像。但是对于去除阴影领域来说这是不现实的,因为对于同一块背景,同时可能有不同的阴影区域。如figure -1(a)所示。两种不同的阴影区域,拥有相同的背景下,是得不到与阴影区域相同的图像。因此仅仅依靠循环一致性损失远远不够。

于是作者为了解决这个问题,提出了用掩码指导生成对抗网络来生成无阴影的图像,也即Mask-ShadowGAN,其方法是通过学习产生阴影掩码,接着利用掩码指导 生成器G_{f} 来生成阴影区域,因此可以通过给定无阴影区域的图像,在不同的阴影掩码下,得到不同阴影区域的图像。进一步说明,可以通过一张有阴影的图像,得到相应的无阴影的图像,而且能生成合适的阴影区域来得到与输入相对应的输出图像。如figure -1(b)所示。

作者指出这是首次使用数据驱动的方式来训练无配对数据的网络来去除阴影区域的方法。作者通过对不同的实验得到的结果表明,方法是有效的,能取得与现行方法取得可以比较的结果或能超过其他的一些方法,即使其方法是用在非配对的图像数据集上。接下来我们来看看相关工作部分。

Relate Work

这部分主要包括阴影去除方法和无监督学习方法,里面主要介绍了方法的发展过程,感兴趣的话可以去了解相关部分。

figure -2

Methodology

如上figure -2所示,Mask-ShadowGAN framework主要分为两个部分,一部分是通过阴影学到无阴影图像,另一部分则相反。每一部分包括了3个损失,1、循环一致性损失 2、同一性损失 3、对抗损失。

首先先看到从阴影图像学习部分,真实阴影图像 I_{s} 图像先通过一个生成器 G_{f} 得到一张无阴影部分的图像 \tilde{I_{f}} ,然后使用判别器 D_{f} 来判别 \tilde{I_{f}} 是否是真实地无阴影的图像。大致的公式表示如下:

具体的优化目标函数如下:

其中 \varepsilon 代表损失(error), p_{data} 代表数据分布, I_{f} \sim p_{data}(I_{f})I_{s} \sim p_{data}(I_{s}) 表示被选择的无阴影图像 I_{f} 与有阴影图像 I_{s} (非生成得到)。但是,仅仅使用对抗损失来优化生成器是不够的,因为生成的图像可能存在一些人工特点(即不真实),这或许能疑惑判别器,但是远远不够,因此再将生成的图像通过另外一个生成器 G_{s} ,来得到无阴影的图像,通过这种方式来得到的最终的图像与最初的输入在内容上一致。

接下来作者为了保持生成的图像和最初输入内容的一致性,使用了 M_{l} 阴影掩码来指导生成图像,将 M_{l} 与生成得到的无阴影的图像 \tilde{I_{f}} 作为生成器 G_{s} 的输入,得到阴影图像 \tilde{I_{s}} ,大致公式如下:

其中 M_{l} 是不同于真实阴影图像 I_{s} 和生成的无阴影图像 \tilde{I_{s}}M_{l} 是二值图,0代表无阴影区域,1代表阴影区域。接下来作者使用阴影循环一致性损失是的重构得到的 \tilde{I_{s}} 与其对应的原图 I_{s} 一致,损失函数如下:

通过L1损失来计算每个像数值上的不同得到,生成器 G_{s} 最终能学会生成阴影图像和捕获阴影图像和阴影掩码之间的联系。0代表无阴影区域,1代表阴影区域。

再次关注到figure -2(a)部分, M_{n} 是全是0值的二值图,与真实阴影图像 I_{s} 作为 G_{s} 的输入,得到 \tilde{I_{s}^{i}} ,它不包含新加入的阴影区域。公式如下:

接着,使用阴影一致性损失来正则化使得 \tilde{I_{s}^{i}}I_{s}越接近越好,公式如下:

因此在 M_{n} 的指导下,阴影区域将不会被加到输入阴影图像上,同时还保留了输入和输出图像的颜色信息。

接下来我们来看看从无阴影图像学习部分,如figure -2(b)所示,在给定的一张无阴影图像 I_{f} 上,使用生成器 G_{s} 得到有阴影图像 \bar{I_{s}} ,通过判别器 D_{s} ,判断生成的图像是否真实。对于生成器 G_{s} ,需要一个阴影掩码作为输入,来表示阴影区域,作者用 M_{r} 指导生成器 G_{s}生成 \bar{I_{s}} ,公式如下:

为了使得生成的阴影区域看起来真实,作者随机选取了阴影掩码,这些掩码是通过从真实阴影图像学习到的,通过利用不同的阴影掩码作为指导,可以得到拥有不同形式的阴影的图像,这样也产生了大量的阴影图像,同时增加了深度模型的泛化能力,作者利用对抗损失来优化判别器和生成器,公式如下:

为了利用循环一致性约束,采取了生成器 G_{f } 来生成无阴影区域的图像 \bar{I_{f}} ,利用的是生成阴影图像 \bar{I_{s}} ,公式如下:

接着使用无阴影循环一致性损失来优化网络,具体公式如下:

最后,通过将真实无阴影图像作为生成器 G_{f} 的输入,生成无阴影图像 \tilde{I_{f}^{i}} ,公式如下:

然后利用无阴影一致性损失来使得输入和输出图像的内容一致,优化函数如下:

通过利用一致性损失作为约束,生成器 G_{f} 将通过在无阴影区域上不改变颜色变化,学会到如何去除阴影区域。

模型的损失部分即上面提到的损失相加,但是加入了一些超参数,具体总损失如下:

其中,根据经验,将 \omega_{1},\omega_{2},\omega_{3} 分别设置为1,10,5,最终的模型的通过最大最下化的方式优化,公式如下:

接下来看看作者是怎么产生掩码的。

通过计算真实阴影图像与生成的无阴影图像之间的不同来得到掩码M,然后将结果二值化,公式如下:

其中B代表二值化操作,当计算的值大于一定的阈值t,其值就设为1,反之为0。

Otsu’s algorithmt算法是计算能将两类分开的最佳阈值,使得它们的类内方差最小,得到阈值t。因为阴影掩码是由真实图像得到,于是作者用以一个列表来保存阴影掩码,阴影掩码的质量是通过生成的无阴影图像的质量的提升而提升,因此通过将高质量的掩码(最新)加入到列表和移除低质量的掩码(最久)的方式来更新列表。通过队列的数据结构,采取先进先出的方式,其中根据经验设置列表的长度为真实阴影图像数据集的1/4大小。如figure -2所示的 M_{l}M_{r} 分别表示最新得到和随机选择得到。

方法部分就介绍完了,对于网络的结构和训练策略感兴趣的话,可以从原文了解。

figure -3
table -1
table -2
figure -4
table -3
figure -5
figure -6

Experimental Results

通过实验结果表明,Mask-ShadowGAN取得的实验结果是很不错的,能取得与现行方法取得可以比较的结果或能超过其他的一些方法,即使其方法是用在非配对的图像数据集上。

Conclusion

提出了用于去除阴影区域的Mask-ShadowGAN,它将不确定的图像转换关系转化成确定的图像转换,通过阴影掩码指导的方式完成。同时首次构建了非配对的阴影去除数据集USR,通过对比与其他数据集进行的实验表此明数据集的质量,不管是定量的方式和视觉观察的方式。但是呢,一小部分的域差(阴影图像与无阴影图像)认为是方法的不足。未来作者将计划展开对阴影编辑的研究,不仅仅能去除阴影区域还要操纵阴影区域,比如通过非配对的雨或雪的图,生成去除雨或雪的图像。

发布于 2019-12-27 15:40