反卷积与棋盘伪影:生成模型图像缺陷解读
原文Deconvolution and Checkerboard Artifacts作者Augustus OdenaGoogle Brain、Vincent DumoulinUniversité de Montréal、Chris OlahGoogle Brain发布日期2016 年 10 月 17 日许可说明Distill 原文页脚说明除另有标注外图示和正文采用 Creative Commons Attribution CC-BY 2.0 许可该文章 GitHub 仓库 README 也说明文章内容采用 CC BY 4.0 许可、代码采用 Apache 2.0 许可。本文为基于该开放许可的中文翻译保留原文结构、引用和图示语义。原文中的交互式图示已转为静态截图用于 Markdown 展示。反卷积与棋盘伪影Augustus OdenaGoogle BrainVincent DumoulinUniversité de MontréalChris OlahGoogle Brain2016 年 10 月 17 日引用Odena 等2016当我们非常仔细地观察神经网络生成的图像时常常会看到一种奇怪的棋盘格状伪影。有些情况下它更明显但最近相当一部分模型都会表现出这种现象。来源图像示例局部/对比Radford 等2015 [1]Salimans 等2016 [2]Donahue 等2016 [3]Dumoulin 等2016 [4]神秘的是这种棋盘格图案往往在颜色很强烈的图像中最突出。到底发生了什么神经网络讨厌鲜艳的颜色吗这些伪影真正的成因其实非常简单避免它们的方法也同样简单。反卷积与重叠当我们让神经网络生成图像时通常会让它从低分辨率、高层次的描述开始逐步构造图像。这样一来网络可以先描述粗略图像再填入细节。为了做到这一点我们需要某种方法把低分辨率图像变成高分辨率图像。通常我们会使用反卷积操作。粗略地说反卷积层允许模型用小图像中的每一个点在更大的图像中“涂抹”出一个方块。反卷积有许多解释方式也有不同名称包括“转置卷积”。为了简洁本文使用“反卷积”这个名称。关于反卷积的精彩讨论见 [5, 6]。不幸的是反卷积很容易产生“不均匀重叠”也就是在某些位置堆上更多这种比喻意义上的颜料 [7]。更具体地说当卷积核大小输出窗口大小不能被步幅上层点之间的间距整除时反卷积就会出现不均匀重叠。原则上网络可以非常小心地学习权重来避开这个问题后文我们还会更详细地讨论这一点但在实践中神经网络很难完全避开它。原文此处为交互式图示一维反卷积中的不均匀重叠。Markdown 静态页面无法复现交互可在原文对应位置查看。重叠模式也会在二维中出现。两个坐标轴上的不均匀重叠会相互相乘形成一种具有不同强度的典型棋盘格状图案。原文此处为交互式图示二维反卷积中的棋盘格重叠。Markdown 静态页面无法复现交互可在原文对应位置查看。事实上不均匀重叠在二维中往往会更加极端。由于两个方向上的模式相乘不均匀性会被平方。例如在一维中步幅为 2、大小为 3 的反卷积会让某些输出位置拥有的输入数量是其他位置的两倍但到了二维中这个差异会变成四倍。现在神经网络在生成图像时通常会使用多层反卷积通过一系列更低分辨率的描述迭代地构建出更大的图像。这些堆叠起来的反卷积当然有可能相互抵消伪影但它们常常会相互叠加在多个尺度上产生伪影。原文此处为交互式图示多层一维反卷积伪影叠加。Markdown 静态页面无法复现交互可在原文对应位置查看。步幅为 1 的反卷积很擅长削弱伪影我们经常在成功模型的最后一层看到它例如 [2]。它可以消除频率能被其大小整除的伪影也可以削弱频率小于其大小的其他伪影。不过伪影仍然可能泄漏出来许多近期模型中都能看到这一点。除了上面观察到的高频棋盘格伪影外早期反卷积还可能产生低频伪影后文我们会更详细地讨论它。这些伪影在输出不寻常颜色时往往最明显。由于神经网络层通常有偏置项加到输出上的一个学习值输出平均颜色很容易。某种颜色越偏离平均颜色例如亮红色反卷积需要贡献的部分就越多。重叠与学习用不均匀重叠来思考这个问题虽然是一个有用的框架但也有些过于简单。无论好坏我们的模型都会为反卷积学习权重。从理论上说模型可以学会非常小心地写入那些不均匀重叠的位置让输出保持均衡。这是一个很难完成的平衡动作尤其是在多个通道相互作用时。避免伪影会显著限制可用滤波器的范围牺牲模型容量。在实践中神经网络很难学会完全避免这些模式。事实上不仅有不均匀重叠的模型没能学会避开这个问题即使重叠均匀的模型也常常会学到造成类似伪影的卷积核。对于均匀重叠来说产生伪影并不像不均匀重叠那样是默认行为但它仍然非常容易造成伪影。彻底避免伪影仍然会对滤波器形成很强的限制。在实践中这些模型里仍然存在伪影只是看起来更轻一些。例如 [4] 使用了步幅为 2、大小为 4 的反卷积。这里可能有很多因素共同起作用。比如在生成对抗网络GAN的情形中一个问题可能来自判别器及其梯度稍后我们会讨论这一点。但问题的很大一部分似乎确实来自反卷积。最好情况下反卷积也是脆弱的因为即使仔细选择大小它也很容易表示会制造伪影的函数。最坏情况下制造伪影就是反卷积的默认行为。有没有另一种上采样方法更不容易产生伪影更好的上采样为了避免这些伪影我们希望找到一种替代普通反卷积“转置卷积”的方法。和反卷积不同这种上采样方法不应该把伪影作为默认行为。理想情况下它还应该进一步对这类伪影形成偏置上的抑制。一种方法是确保卷积核大小能够被步幅整除从而避免重叠问题。这等价于“子像素卷积”一种最近在图像超分辨率中取得成功的技术 [8]。不过虽然这种方法有所帮助反卷积仍然很容易落入制造伪影的状态。另一种方法是把“上采样到更高分辨率”和“通过卷积计算特征”拆开。例如可以先调整图像大小使用 最近邻插值 或 双线性插值然后再做一个卷积层。这看起来是一个自然的做法而且大致相似的方法已经在图像超分辨率中表现良好例如 [9]。反卷积和各种 resize-convolution 方法都是线性操作都可以解释为矩阵。用这种方式观察它们之间的差异很有帮助。反卷积会为每个输出窗口拥有独特的条目而 resize-convolution 以一种隐式权重共享的方式抑制高频伪影。我们得到的最好结果来自最近邻插值而让双线性 resize 工作良好则更困难。这可能只是说明在我们的模型中最近邻恰好更适合那些原本为反卷积优化过的超参数。它也可能指向朴素使用双线性插值时更棘手的问题双线性插值对高频图像特征的抑制可能过强。我们并不认为这两种方法中的任何一种一定是上采样的最终答案但它们确实能修复棋盘格伪影。代码在 TensorFlow 中可以用tf.image.resize_images()很容易地实现 resize-convolution 层。为了得到最好的结果在用tf.nn.conv2d()做卷积之前请先使用tf.pad()以避免边界伪影。图像生成结果我们的经验是在很多不同语境中最近邻 resize 后接一个卷积都工作得很好。我们发现这种方法有帮助的一个场景是生成对抗网络。只需把标准反卷积层换成最近邻 resize 后接卷积不同频率的伪影就会消失。设置图像 1图像 2图像 3图像 4最后两层使用反卷积其他层使用 resize-convolution。频率 2 和 4 的伪影。只有最后一层使用反卷积其他层使用 resize-convolution。频率 2 的伪影。所有层都使用 resize-convolution。没有伪影。事实上在任何训练发生之前就已经能看到伪影上的差异。如果我们观察生成器在随机权重初始化时生成的图像就已经能看到这些伪影设置随机初始化示例 1随机初始化示例 2最后两层使用反卷积。训练前就出现伪影。只有最后一层使用反卷积。训练前就出现伪影。所有层都使用 resize-convolution。训练前后都没有伪影。这说明伪影来自这种图像生成方法而不是来自对抗训练本身。这也暗示或许我们不用经历训练模型那种缓慢的反馈循环就能学到很多关于优秀生成器设计的东西。另一个让我们相信这些伪影并不只属于 GAN 的原因是我们在其他类型的模型中也看到了它们而且发现切换到 resize-convolution 上采样后它们同样会消失。例如可以考虑实时艺术风格迁移 [10]其中神经网络被训练为直接生成风格迁移后的图像。我们发现这类模型很容易受到棋盘格伪影影响尤其是在损失函数没有显式抵抗它们时。不过把反卷积层换成 resize-convolution 层后伪影就会消失。方法图像说明使用反卷积严重棋盘格伪影使用 resize-convolution没有棋盘格伪影Google Brain 团队即将发表的论文会在更完整的实验和最先进结果中展示这种技术的收益。我们选择单独介绍这项技术是因为我们认为它值得更详细的讨论也因为它横跨多篇论文。梯度中的伪影每当我们计算卷积层的梯度时都会在反向传播中执行反卷积转置卷积。这可能在梯度中造成棋盘格图案就像我们用反卷积生成图像时一样。图像模型梯度中存在高频“噪声”这在特征可视化社区中已经是已知问题而且是一个重大挑战。特征可视化方法必须以某种方式补偿这种噪声。例如DeepDream [11] 似乎通过多种方式让伪影之间产生破坏性干涉比如同时优化许多特征并在许多偏移和尺度上优化。尤其是在不同偏移上优化时使用的“jitter”会抵消部分棋盘格伪影。DeepDream 只在固定位置应用神经网络。严重伪影。DeepDream 每一步在不同位置应用网络。伪影减少。虽然其中一些伪影是我们标准的棋盘格图案另一些则是组织性较弱的高频图案。我们认为后者由最大池化导致。最大池化此前已经在 [12] 中与高频伪影联系起来。特征可视化中的近期工作例如 [13]已经明确识别并补偿这些高频梯度成分。人们不禁会问更好的神经网络架构是否能让这些补偿工作变得不再必要这些梯度伪影会影响 GAN 吗如果梯度伪影能在特征可视化中影响一个由神经网络梯度优化出来的图像那么我们也可以预期在 GAN 中当判别器优化由生成器参数化出来的一族图像时它们也会受到影响。我们发现在某些情况下确实会发生这种情况。当生成器既没有倾向于也没有倾向于反对棋盘格图案时判别器中的步幅卷积会导致这些图案。判别器设置图像 1图像 2图像 3判别器第一层有步幅为 2 的卷积。强烈的频率 2 伪影。判别器第一层是普通卷积。非常轻微的伪影。这些梯度伪影的更广泛影响还不清楚。一种理解方式是某些神经元会得到比相邻神经元多很多倍的梯度而且这种差异基本上是任意的。等价地说网络会没有充分理由地更加关心输入中的某些像素而不是其他像素。这两种说法听起来都不理想。某些像素对网络输出产生大得多的影响可能会放大对抗样本。由于导数集中在少数像素上这些像素上的小扰动可能产生过大的效果。我们还没有研究这一点。结论使用反卷积生成图像的标准方法尽管已经取得了成功却存在一些概念上很简单的问题会在生成图像中导致伪影。使用一种没有这些问题的自然替代方法会让伪影消失。类似的论证也暗示标准的步幅卷积层可能同样存在问题。这在我们看来是一个令人兴奋的机会。它说明只要仔细思考神经网络架构即使是那些看起来已经有干净可用方案的架构也可能还有低垂的果实可摘。与此同时我们提供了一种容易使用的解决方案可以改善许多用神经网络生成图像的方法的质量。我们期待看到大家会如何使用它也想知道它是否会帮助音频等领域因为在那里高频伪影会尤其麻烦。致谢我们非常感谢 Shan Carter 对第一个交互式图表做出的精彩改进也感谢他的设计建议和编辑品味。我们也非常感谢 David Dohan他向我们提供了一个判别器中步幅卷积造成伪影的例子还要感谢 Mike Tyka他最早向我们指出 DeepDream 中 jitter 与伪影之间的联系。也感谢 Luke Vilnis、Jon Shlens、Luke Metz、Alex Mordvintsev 和 Ben Poole 的反馈与鼓励。这项工作得到了 Google Brain 团队的支持。Augustus Odena 的工作是在 Google Brain Residency Program 期间完成的。Vincent Dumoulin 在 Brain Team 实习访问期间完成了这项工作。作者贡献Augustus 和 Chris 发现了反卷积与伪影之间的联系。Augustus 运行了 GAN 实验。Vincent 运行了艺术风格迁移实验。Chris 运行了 DeepDream 实验创建了可视化并撰写了文章的大部分内容。参考文献Unsupervised representation learning with deep convolutional generative adversarial networksPDFRadford, A., Metz, L. and Chintala, S., 2015. arXiv preprint arXiv:1511.06434.Improved techniques for training gansPDFSalimans, T., Goodfellow, I., Zaremba, W., Cheung, V., Radford, A. and Chen, X., 2016. Advances in Neural Information Processing Systems, pp. 2226-2234.Adversarial Feature LearningPDFDonahue, J., Krahenbuhl, P. and Darrell, T., 2016. arXiv preprint arXiv:1605.09782.Adversarially Learned InferencePDFDumoulin, V., Belghazi, I., Poole, B., Lamb, A., Arjovsky, M., Mastropietro, O. and Courville, A., 2016. arXiv preprint arXiv:1606.00704.A guide to convolution arithmetic for deep learningPDFDumoulin, V. and Visin, F., 2016. arXiv preprint arXiv:1603.07285.Is the deconvolution layer the same as a convolutional layer?PDFShi, W., Caballero, J., Theis, L., Huszar, F., Aitken, A., Ledig, C. and Wang, Z., 2016. arXiv preprint arXiv:1609.07009.Conditional generative adversarial nets for convolutional face generationPDFGauthier, J., 2014. Class Project for Stanford CS231N: Convolutional Neural Networks for Visual Recognition, Winter semester, Vol 2014.Real-time single image and video super-resolution using an efficient sub-pixel convolutional neural networkPDFShi, W., Caballero, J., Huszar, F., Totz, J., Aitken, A.P., Bishop, R., Rueckert, D. and Wang, Z., 2016. Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, pp. 1874-1883. DOI: 10.1109/cvpr.2016.207Image super-resolution using deep convolutional networksPDFDong, C., Loy, C.C., He, K. and Tang, X., 2014. arXiv preprint arXiv:1501.00092.Perceptual losses for real-time style transfer and super-resolutionPDFJohnson, J., Alahi, A. and Fei-Fei, L., 2016. arXiv preprint arXiv:1603.08155.Inceptionism: Going deeper into neural networksHTMLMordvintsev, A., Olah, C. and Tyka, M., 2015. Google Research Blog.Geodesics of learned representationsPDFHenaff, O.J. and Simoncelli, E.P., 2015. arXiv preprint arXiv:1511.06394.DeepDreaming with TensorFlowlinkMordvintsev, A., 2016.更新与更正查看本文自首次发布以来的全部修改。如果你发现错误或想提出修改建议请在 GitHub 上创建 issue。引用与复用除另有标注外图示和正文采用 Creative Commons Attribution CC-BY 2.0 许可源码可在 GitHub 获取。从其他来源复用的图不属于该许可范围在图注中会以 “Figure from …” 标明。在学术语境中引用本文时请使用Odena, et al., Deconvolution and Checkerboard Artifacts, Distill, 2016. http://doi.org/10.23915/distill.00003BibTeX 引用article{odena2016deconvolution, author {Odena, Augustus and Dumoulin, Vincent and Olah, Chris}, title {Deconvolution and Checkerboard Artifacts}, journal {Distill}, year {2016}, url {http://distill.pub/2016/deconv-checkerboard}, doi {10.23915/distill.00003} }