GAN Dissection: Visualizing and Understanding Generative Adversarial Networks
论文地址:
https://arxiv.org/pdf/1811.10597.pdf
GitHub code:https://github.com/CSAILVision/gandissect
首先要介绍的是第一篇,这篇文章的对于GAN的可解释性研究有较大贡献,我把它称为可控GAN。主要看点在于,之前的GAN我们我们可以生成非常逼真的图像,虽然我们可以一定程度上选择生成的多样性,但是我们不能控制生成的对象里面包括哪些,又包括哪些。因为我们不知道GAN里面究竟是如何控制每个类别!
而这篇文章的方法不仅能够控制是否包含某个类别,还能控制生成该类别的数量,如下图所示:
从左到右,控制生成的树的数量由多到少,直到一棵树都没有。这就是这篇文章的突破性的之处,这项研究向理解GAN迈出了非常重要的一步。
这是该文章的demo,大家可以自己体验一下,它不仅可以控制生成什么,不仅可以控制生成多少,还能控制生成的位置(我刚试时有点激动):
http://gandissect.res.ibm.com/ganpaint.html?project=churchoutdoor&layer=layer4
从视频中可以看到,他可以做到增加某些类别,去除某些类别,也就是GAN已经成为可控的。想想真的有些激动(感觉应用前景很大,比传统的P图快太多,而且更逼真)。
上面介绍这篇文章方法的强大之处,下面介绍它是如何实现的。
具体实现分为两个步骤:解剖(Dissection)和干预(Intervention),为每个类别寻找一套“因果”单元。
首先是第一个阶段:解剖
看着上面的图来讲更直观,整个结构的目的是找出特征图中,具体哪些通道和生成的某个类别的关系,而想要达到控制这个类的生成效果,那么这个关系可以称为因果关系。
更具体地,我们要找出生成图X和特征图r的哪些通道有关。SC(X)是X的语义分割结果只取一个类,即为一个二值图;
取特征图r的某一个通道(文中称为单元),先进行上采样恢复到原始图像尺寸,然后对其进行阈值处理以确定哪个像素被该特定单元“点亮”。阈值通过下面这个公式计算:
得到了右上角的图和右下角的二值图,我们就可以衡量该通道的特征和该类别的空间一致性。判别指标采用IOU:
V代表或运算,另一个是与运算,r(u,p)的箭头指上采样操作。
经过,第一阶段解剖过程,我们知道哪些通道的特征和类别的对应关系,接下来就是如何去干预这个特征,从而通过控制这些特征控制生成。
第二个阶段:干预
为了测试是否真的存在这样的因果关系(即在特征图r中的通过IOU筛选出来的一系列通道或者称单元,是否对生成图X起到决定性作用),作者做了一个干预实验。强制让这些通道处于ON或者OFF状态,具体实现如下:
干预的操作的对象是特征r,特征图r有两个参数,一U通道,二P位置,我们想要对某个位置 的某个类别干预(例如右上角的云彩,左边的树),文中的做法是如果想要这部分处于OFF状态,就将该像素为对应的特征置零,如果想要在某个位置生成某个类,就将该像素位置对应的特征通道的特征置为k。这样就实现我们前面看到的,在某个图中我们可以控制在某个位置生成树,也可以去掉。
另一个限制来自这样的事实,即某些对象固有地链接到某些位置,因此无法从图像中删除它们。例如:人们不能简单地从会议大厅移去椅子,只能减少它们的密度或大小。
总结来看,文章整体的思路,我认为是找到特征和生成的图的对应关系,从而可以实现通过操作特征,控制图里特定位置生成特定类别。