GAN学到了什么?我们都看到了GAN产生的令人惊叹的结果,在某些情况下几乎与人类工作无法区分。但他们如何代表学到的知识仍然是一个谜。他们只是学习像素模式并合成他们看到的内容吗?或者他们真的从训练数据中捕获了某种复杂的关系?
本文试图破译GAN的表示,并说明可视化和调试它们的技术。它分为两个阶段。
解剖
解剖旨在识别生成器中图层输出所代表的对象类。例如,G中的特定单位是否代表树木?
一些术语:
unit:生成器G的特征图的每个通道
r:生成器层的一个输出
过滤器的特征映射给出了对象类的分割的良好近似(Bau et al.)。对于我们感兴趣的每个对象类,我们首先计算生成的图像中类的分割掩码。我们使用下面的公式对单位u的特征映射进行上采样和阈值处理。然后,我们在这个阈值化的上采样特征映射和类的分段掩码之间进行IOU。
∧表示交集,∨表示并集。s_c(x)表示图像x中特定类c的分割掩码。以上还提到了用于计算特定单元和类的阈值的公式。简而言之,上面的公式给出了一个单位u代表c类的量度。您可以在本文中详细了解阈值公式背后的直觉。
因此,通过对每个类c获得的值排序这些分数,对单元表示的排名概念(对象类)进行排序。
TLDR; 解析允许您发现与对象类紧密匹配的单元。但这并不一定意味着他们有责任产生它们。
干预干预旨在找出一组单元是否导致对象类c。这是通过打开和关闭单元并观察对生成的图像G的影响来完成的。
r:来自G的特定层的张量输出(激活图)
U:单元组
P:生成的图像G中的像素
消融是指通过将U设置为0来关闭U中的单位。另一方面,插入强制U中的单位等于k,每个类常数。通过获取导致c的单位的特征映射的平均值来计算类c的k。
上面的公式给出了单元U负责生成c类的量度。该度量被称为平均因果效应(ACE)。这里,s_c(x)表示像素P处的图像x中的类c的分割图。因此,基本上插入和消融时G中的类c的分割图的因果效应之间的差异。
但是我们怎么知道如何选择最佳的单元U?通过详尽的搜索来选择最佳组合是很棘手的。这是通过使用聪明的目标函数并将这项工作外包到梯度下降来完成的。
我们将U设置为整个单元集,但使用参数向量alpha对它们进行权衡。然后使用随机梯度下降来最大化目标函数(ACE)并最小化最优集合中的单元数量(通过对α使用L2正则化项)。
添加L2正则化项以最小化最优集合中的单元数量
下图显示了导致树成功的消融单元如何从生成的图像中成功删除树。
消融单元以移除树木
结果简而言之图层之间的差异:根据结果,第一层与井对象类不匹配。这具有直观意义,因为早期层通常代表原始特征。中间层有许多与语义对象和对象部分匹配的单元。结束图层匹配局部像素图案,例如材质,边缘和颜色。
GAN架构之间的差异:本文还讨论了不同架构如何通过检查单元来比较内部表示。
通过插入的上下文关系:本文还描述了通过强制单元将特征插入到生成的图像的特定位置。一个有趣的观察是,像门这样的物体只能插入视觉上有意义的特定位置(例如,靠近窗户,砖块的建筑物)。这表明GANS实际上捕获了对象之间的关系,而不仅仅是像素模式。
上图说明了对象类的生成如何高度依赖于本地上下文。插入的实际效果因其发生的位置而异。
诊断GAN通过使用干预技术,我们可以研究生成的图像中错误/不良部分和伪影的原因。通过手动注释和消除引起的单位,可以显着提高GAN的结果。下图说明了消融伪影导致单元如何产生可见结果。
使用此框架,您可以手动定制和影响GAN的结果。增强或减少某些对象类的存在(在一定程度上)相对简单。
最后的想法这篇论文做了一个很好的尝试,揭开了GAN的神秘面纱,这是一个相对未开发的话题。他们的框架使研究人员和从业人员能够更好地调试,改进和理解他们的模型。
讨论的调试方法主要基于人工监督。但是,我相信本文中提出的推理和技术可能会用于开发更多自动化技术来改进GAN。