然而,事实证明,卷积通常难以完成看似微不足道的任务。在我们的论文“卷积神经网络的有趣失效和 CoordConv 解决方案”(https://arxiv.org/abs/1807.03247) 中,我们演示并分析了卷积神经网络(CNN)在两种不同类型之间进行空间表示转换的糟糕表现:(i,j) 笛卡尔空间坐标和 one-hot 像素空间坐标。我们感到很震惊,因为任务看起来如此简单,但它可能又很重要,因为这样的坐标变换似乎是解决很多常见任务所必需的,例如检测图像中的物体,训练图像的生成模型,以及从像素中训练强化学习(RL)代理。事实证明,这些任务可能已经受到这种卷积失效的影响,我们使用了一个名为 CoordConv 的层在多个领域对性能进行改进。
我们在这个视频中对研究结果进行了总结:
假设我们要进行一个简单的监督渲染,我们给定一个 (i,j) 位置作为网络的输入,并要求它生成一个 64×64 的图像,该图像包含了一个以该位置为中心的正方形,如图 1a 所示。你将使用什么类型的网络来完成这个任务?
我们可以使用与其他很多研究工作中所采用的相同方法,生成图像并用一叠反卷积(转置卷积)层绘制正方形。为了测试这个想法,我们创建了一个数据集,这个数据集由在一个 64×64 的画布上随机放置的 9×9 正方形组成,如图 1b 所示。枚举所有可能完全可见的正方形将产生一个包含 3,136 个样本的数据集。为了评估模型的泛化性,我们定义了两个训练 / 测试分割:一个是均匀分割,将所有可能的正方形随机分为 80%/20%的训练 / 测试集;一个是象限分割,画布被分为四个象限:中心位置在前三个象限中的正方形被放入训练集,最后一个象限中的正方形被放入测试集。这两种数据集分割的分布情况如图 1c 所示:
图 1.(a) 监督渲染任务要求网络在给定 (i,j) 位置的情况下绘制正方形。(b) 样本数据点和 (c) 用于均匀分割和象限分割的训练与测试集的可视化。
我们假设 CNN 可以轻松地解决这个任务,因为任务非常简单(只需要两行 Python 代码就可以生成整个数据集),而且数据集非常小,我们可以很容易地过度参数化模型。但事实证明,CNN 的表现非常糟糕。即使使用了 1M 参数且训练时间超过 90 分钟的模型(图 2b)也无法在均匀分割上获得超过 0.83 的测试 IOU,以及在象限分割上超过 0.36 测试 IOU(图 2a)。
图 2.(a) 均匀分割和象限分割上的监督渲染任务的训练与测试 IOU。没有模型达到 1.0 的 IOU。(b) 训练其中一个更好的模型需要 90 分钟才能达到 0.8 的 IOU。
那么为什么监督渲染这么难?这值得我们深入挖掘以便更全面地了解其中的原委。如果直接监督训练的渲染如此困难,那么当改用无监督学习时,应该变得更具挑战性,例如在同样的数据集上训练生成对抗网络(GAN),并由学习的鉴别器提供损失。
让我们缩小问题的范围,把困难的部分独立出来。我们现在要求网络简单地绘制一个像素(而不是 9×9 的正方形)。我们认为,基于这个单像素任务的解决方案,反卷积网络可以很容易地将这样的像素扩展成更大的正方形,这是我们从实验验证中获得的直觉。因此,我们得出了监督坐标分类任务(图 3a),数据集由成对的 (i,j) 坐标和图像组成,其中图像激活了单个相应的像素,如下图 3b 所示:
图 3.(a) 监督坐标分类任务要求网络在给定 (i,j) 位置的情况下绘制单个像素。(b) 样本数据点和 (c) 训练与测试分割的可视化。
我们再次尝试了很多具有不同超参数的网络,并观察到,即使某些网络可以记住训练集,但它们都没有超过 86%的测试准确率(图 4a)。这个训练超过一个小时。
图 4.(a) 均匀分割和象限分割上的监督坐标分类任务的训练与测试精度。虽然有些模型记住了训练集,但是在测试集上没有一个达到高于 86%的准确率。这意味着卷积甚至无法泛化一个像素。(b) 这个 86%准确率的训练需要一个多小时。
卷积没有像我们所期望的那样奏效。 为什么会这样?为了弄清楚网络实际在做什么,我们选择了最好的训练过的网络,并检查它的预测结果。
我们要求网络绘制一个只有一个像素的图像(在 one-hot 表示中值为 1)。为了观察到底发生了什么事情,我们将目标像素周围的小区域放大。在图 5 中,目标像素以红色突出显示,图中显示了模型的 softmax 预测以及分对数。第一个像素(顶行)包含在训练集中,模型让它处在预期的位置上,尽管存在一些泄露到目标像素之外的概率。下一个像素(中间行)包含在测试集中,模型很少是正确的,捕获相邻像素的概率几乎一样大。再看最后一个像素(底行),这个模型完全是错误的。这令人感到很震惊,因为作为 80/20 分割的结果,几乎所有测试像素都被训练像素包围。
图 5. 几个相邻像素的模型预测。网络过拟合——当测试集是 86% 时训练准确率才是完美的——令人感到惊讶,因为大多数测试像素几乎完全被训练像素包围。此外,网络甚至难以适应训练集,有很大概率会泄露到目标像素之外。
那么为什么在给定位置突出显示一个像素对于网络来说如此困难呢?是因为将信息从小空间扩展到大空间很困难吗?如果反过来会更容易吗?如果我们训练一个卷积网络将图像信息折叠成标量坐标,类似于普通的图像分类又会怎样呢?
事实证明,这种监督回归任务的效果一样很糟糕。在图 10 中,左侧的点显示的是正确的像素坐标,中间的点显示的是模型的预测。这个模型在测试集上表现不佳,并且很明显难以对训练集进行预测。
简而言之,方向并不重要。
这个看似简单的坐标变换任务会导致两个方向的卷积问题:从笛卡儿 (i,j) 空间到 one-hot 像素空间,以及相反的方向。即使是在监督训练的情况下,如果仅绘制一个像素,并且训练样本都在周围时,卷积仍然无法学习笛卡尔空间和像素空间之间的平滑函数。另外,表现最佳的卷积模型通常是很大的,而且很少能够达到最佳的效果,需要很长的训练时间。
事实证明,要解决这个问题,只需要一个简单的解决方案。
卷积是等变的,这意味着在将过滤器应用于输入并生成输出时,它不知道每个过滤器的位置,但我们可以让过滤器知道卷积的位置。我们向输入中添加两个通道来实现此目的——一个带有 i 坐标,一个带有 j 坐标。我们把这个层叫作 CoordConv,如图 6 所示:
图 6. 卷积层和 CoordConv 层的比较。CoordConv 层将填充有坐标信息的附加通道作为输入,这里是 i 和 j 坐标。
CoordConv 层是标准卷积层的简单扩展,其中卷积将坐标作为条件。允许卷积过滤器看到坐标破坏了平移同变性,这可能不是个好主意。平移同变性不是卷积的独特优势吗?
我们认为,卷积的成功取决于三个重要因素:它使用相对较少的学习参数,在现代 GPU 上具有很快的计算速度,并且它学习了一种功能,也就是平移同变性。
CoordConv 层保留了这些属性中的前两个——较少的参数和高效的计算——以及同等程度的学习能力。如果来自坐标学习的权重为零,则 CoordConv 的行为与标准卷积类似。另外,如果平移依赖对于下游任务来说是有用的,那么它也能够学习它们。但正如我们即将看到的,最终的证据在于卷积。
CoordConv 与现有的一系列想法相关,如本地连接层、组合模式生成网络和语言建模中使用的位置嵌入。
首先,让我们重新回到之前的任务,看看 CoordConv 的表现如何。
如图 7 和图 8 所示,在训练集和测试集的分割上,CoordConv 模型在监督坐标分类和监督渲染任务中都获得了完美的训练和测试性能。此外,CoordConv 模型的参数减少了 10-100 倍,按照 CNN 最佳性能标准的要求,训练在几秒钟内完成,而不是一个多小时。
图 7. CoordConv 在监督坐标分类任务的两个分支上获得完美的性能。
图 8.CoordConv 模型在监督渲染任务的两个分割中获得完美的性能。
为了进行更仔细的检查,图 9 显示了绘制相邻像素时常规反卷积与 CoordConv 的区别:
图 9. 如前所述,反卷积难以处理监督坐标分类任务,而 CoordConv 获得 100%的训练和测试准确率。该解决方案明显更简单。
在使用卷积绘制像素时,我们观察到伪影和过度拟合。而 CoordConv 在训练集和测试集上都表现出了完美的性能。反过来也是一样的。卷积很难回归坐标,而 CoordConv 能够很好地建模函数,如图 10 所示:
图 10. 反卷积难以处理监督回归任务,而 CoordConv 可以很好地建模。
到目前为止,我们已经展示了卷积在解决一些简单问题上的糟糕表现,并提出了 CoordConv 层解决方案。我们不禁会想:这个问题是不是这种简单任务所特有的?还是说我们发现了一个核心问题,这个问题一直隐藏在其他任务中,阻碍了内部的表现?为了回答这个问题,我们在各种任务训练的网络中插入了 CoordConv 层。以下是我们发现的一些点。
因为物体检测模型是在笛卡尔空间中查看像素空间并输出边界框,所以它们看起来很适合使用 CoordConv。我们的直觉也得到了证实:在检测散布在画布上的 MNIST 数字时,我们发现,如果使用了 CoordConv,Faster-RCNN 网络的 IOU 提高了约 24%。
在所有的视觉任务中,当使用 CoordConv 代替卷积时,我们或许可以任务图像分类在性能变化上是最小的,因为分类更多地是关于图像中的内容而不是它的位置。实际上,当我们在 ResNet-50 的底部添加 CoordConv 层并在 ImageNet 上训练时,性能只有很小的改进。
在 GAN 和变分自动编码器(VAE)这样的生成模型中,像素是基于潜伏绘制的,在理想的情况下,可以编码像位置这样的高级概念。直观地说,CoordConv 可能在这方面有一定的作用。我们使用基于 Sort-of-CLEVR 的简单数据集来训练 GAN 和 VAE,并显示潜伏之间的插值。
我们选择了一个生成彩色形状的简单任务。对于普通 GAN(左)和 CoordConv GAN(右),图 11 所示的动画展示了 CoordConv 如何改善生成模型的性能。
使用生成模型,我们使用潜伏空间中点之间的插值作为研究 CoordConv 影响的方法,这是是评估生成模型泛化性的常用方法。
图 11. 使用普通卷积 GAN(左)和 CoordConv GAN(右)在潜伏空间中移动。在普通的 GAN 中,我们观察到与画布相关的视觉伪像,以及淡入和淡出的物体。而在使用 CoordConv GAN 时,物体是凝聚的,而且运动更加平滑。
对于左侧的普通 GAN,刚开始动画看起来很好。但当我们仔细观察动画时,我们会注意到并非所有的东西都在移动,伪影与画布粘在了一起,而且物体的一小部分时隐时现。当我们将 CoordConv 放入生成器和鉴别器时,物体的运动更加平滑。我们可以看到,物体保持凝聚,而且移动平稳。
在训练 VAE 时我们注意到了类似的模式。通过卷积,我们观察到图像中的部分物体会淡入和淡出,但是使用 CoordConv,物体可以更平滑地移动。
图 12. 使用普通卷积 VAE(左)和 CoordConv VAE(右)在潜伏空间中的另一种移动。普通的 VAE 物体会淡入和淡出,而 CoordConv VAE 让它们可以顺畅地移动。
当使用较大的 GAN 绘制 LSUN(大规模场景理解)卧室场景时,在使用卷积时我们再次看到淡入淡出的物体。而使用 CoordConv,我们可以看到平滑的几何变换,包括平移和变形。
图 13. 在潜伏空间中的第三次移动,普通卷积 GAN(左)和 CoordConv GAN(右)基于 LSUN 卧室数据集训练得出。在使用卷积时我们再次看到淡入淡出的物体。而使用 CoordConv,我们可以看到平滑的几何变换,包括平移和变形。
CoordConv 在 RL 领域可能也有一定的用处。我们训练了一些代理来玩 Atari 游戏,就像 Pac-Man。我们认为,如果卷积过滤器可以同时识别 Pac-Man 并提取她在迷宫中的位置,就有助于学习更好的策略。
我们尝试将 CoordConv 添加到我们自己实现的分布式优先体验重放(Ape-X)中,但 CoordConv 在性能方面的优势并没有立即体现出来。我们还尝试了 A2C,一种流行的策略梯度方法,这个时候 CoordConv 的用处开始体现出来。这可能反映了学习显性策略和学习 Q 函数之间的差异。在我们尝试的九场比赛中,有六场 CoordConv 训练得更快,或者比标准卷积有更好的最终得分。正如我们所预期的那样,Pac-Man 得分得到了提升。在两场比赛中,CoordConv 表现相似,而在一场比赛中表现稍差。总的来说,这些结果表明 CoordConv 在 RL 中可能会派上用场。
图 14. 使用 A2C 训练 Atari 游戏的结果。在 9 场比赛中,(a) 有 6 场 CoordConv 的表现超过了卷积,(b) 其中有 2 场中表现相似,而 (c) 有 1 场表现略差。
在本文中,我们已经证明了 CNN 在坐标转换任务方面的糟糕表现,并且引入了我们的 CoordConv 层解决方案。结果表明,包含这些层可以提高各种应用的性能。我们将在未来的工作中进一步评估 CoordConv 在大规模数据集中的优势,并探索它在检测、语言任务、视频预测、空间变换器网络以及尖端生成模型中的影响。
英文原文:
https://eng.uber.com/coordconv/
如果你喜欢这篇文章,或希望看到更多类似优质报道,记得给我留言和点赞哦!