GAN Dissection: Visualizing and Understanding Generative Adversarial Networks

GAN Dissection: Visualizing and Understanding Generative Adversarial Networks 该论文介绍了一个可视化和理解生成网络学得结构的框架,通过定义一些可解释的单元并通过干涉这些单元来探究生成网络中的因果关系。

GANpaint工具

本文还提供了一个非常有意思的demo,只要鼠标划过,GAN 就可以立即在你指定的地方画出云彩、草地、门和树等景物,并直接改变构图以保持图像的「合理性」。


可以去demo地址
选中「draw」功能和特定的对象,如tree,就能在图中随意用画笔涂抹,GAN会在涂抹区域自动生成树木。选中「remove」功能和特定的对象,如grass,GAN会在涂抹区域自动删除草地。读者可以自己尝试一下。
GAN paint app 的工作原理是直接激活或者去激活深度网络中的神经元组,这些神经元被训练用来生成图像。左边每个按钮(如 door、brick 等)都对应20个神经元。该app表明,通过学习绘画,GAN网络还能学习树、门还有屋顶等对象。通过直接切换神经元,你可以观察该网络建模的视觉世界的结构。
下面来看看这篇论文。


Abstract

生成对抗网络(GAN)近期在很多现实世界任务中取得了巨大成就,很多 GAN 的变体都在样本质量和训练稳定性上获得了很大的进展。然而,对GAN的可视化和理解仍然是缺乏探究的课题。AN 网络是如何表征视觉世界的?导致GAN输出结果失真的原因是什么?架构选择如何影响GAN学习?回答这些问题能够帮助我们发展新的理论洞察和更好的模型。
在 MIT CSAIL 主导的这项工作中,研究者展示了在单元、对象和场景级别上可视化和理解GAN的框架。研究者首先通过基于分割的网络剖析方法(network dissection method)识别出一组和对象概念很相关的可解释单元。然后通过评估人类干预(控制输出中的对象)的能力来量化可解释单元的因果效应。最后,通过将发现的对象概念嵌入到新图像中来测试这些单元和周围事物之间的语境关系。研究者展示了通过该框架实现的多种实际应用,从对比不同层、模型和数据集的内部表征,到通过定位和移除导致失真的单元来改善GAN,从而实现交互式地控制场景中的对象。


大体思路

先看下网络结构:


作者的目的是为了探究在生成器的生成过程中Object(e.g tree)是如何被encode的。
z是从低纬空间中采样的一个latent vector
x是生成器生成的图像
r是生成器中某一个层的输出。
r=h(z) 并且 x=f(r)=f(h(z))=G(z)
既然r包含了生成图像x的所有信息,那么r中就包含了可以推理并且生成出c类(e.g tree)的信息。
之前的问题就变成了这些信息是如何被encode到r中的。
作者试图理解r是否以某种方式明确地表示c,其中可以将位置P处的r分解为两个分量

在位置P处是否生成Object c主要取决于

作者将feature map的每一个channel定义为一个nuit U表示所有感兴趣(与Object c相关)的unit的集合,
是它的补集。
主要通过以下两种方式来探究r的结构:

  • Dissection: 通过计算每个class与独立的unit之间的一致性来验证在r中是否有c的显示表示。
  • Intervention:通过激活/抑制unit来验证units的因果集和units与Object class之间的因果关系。

CHARACTERIZING UNITS BY DISSECTION

首先关注表示中的各个独立单元,是unit u的feature map中一个通道,大小为hxw。
之前的分类网络发现,当对unit进行上采样和阈值处理时,许多单元和分类任务相似。收到这个启发,作者选择了一个概念世界(universe of concepts)c∈,我们为每个类都有一个语义分割Sc(x)。之后用下面的公式计算unit的thresholded map与class的segmentation map的IoU


之后将
上采样到output img的大小得到
,并通过(
>
)得到一个binary mask,如Figure 2a所示。Sc(x)是img中是否存在class c的binary mask。
之后就可以根据IoU的大小得到concept 与unit的关联度,并用和unit最相关的concept标记unit。
这里concept和unit有点绕,我个人的理解是将concept理解为一个类(e.g tree),就是将该unit标记为tree。

当我们发现某个类与一些units很匹配,那么之后就要问到底是哪个unit来触发该类的生成了。


MEASURING CAUSAL RELATIONSHIPS USING INTERVENTION

为了回答上面的问题,作者通过抑制/激活r的中部分unit来验证是否生成c。
通过设置 = 0来抑制这些units,设置=k来激活。k是一个常量,且每个class不同。


如果
包含Object而
中不包含,则该Object是由这些units生成的。

作者定义生成class c时units的作用average causal effect(ACE)



因为obj的生成依赖的是多个units的集合,所以我们需要找到使ACE最大的units set。


Finding sets of units with high ACE

因为U有太多的子集,使用贪心算法是不现实的。于是定义了一个∈其中每个维度表示对unit u的干预程度。


是位置P的所有channel的featuremap
应用到

并用L2loss来约束


Result

更多细节请参考论文地址
代码已经开源项目地址

你可能感兴趣的:(GAN Dissection: Visualizing and Understanding Generative Adversarial Networks)