转载请注明作者和出处: http://blog.csdn.net/john_bh/

论文链接: An intriguing failing of convolutional neural networks and the CoordConv solution
作者及团队:Uber AI Lab
会议及时间:NeurlPS 2018
code(原作者): https://github.com/uber-research/CoordConv
code: https://github.com/mkocabas/CoordConv-pytorch

文章目录

  • 1.主要贡献
  • 2. Not-so-Clevr dataset
  • 3. CoordConv
  • 4. Supervised Coordinate tasks
    • 4.1 Supervised Coordinate Classification
    • 4.2 Supervised Coordinate Regression
    • 4.3 Supervised Rendering
  • 5 Applicability to other tasks
  • 6. CoordConv layer Code

1.主要贡献

但凡涉及像素或空间表示的任何问题,直觉都认为卷积神经网络可能是合适的。所以作者揭示并分析了卷积神经网络在变换两种空间表征(笛卡尔空间坐标(i,j)(i, j)(i,j)和 one-hot 像素空间坐标)时的常见缺陷,通过看似简单的坐标变换问题:只是需要学习坐标(x,y)(x, y)(x,y)在笛卡尔空间与坐标在 one-hot像素空间之间的映射,就证明了卷积网络在这个任务上的缺陷。

  • 提出CoordConv,该解决方案通过使用额外的坐标通道使卷积访问其自身的输入坐标而起作用;
    在不牺牲普通卷积的计算和参数效率的情况下,CoordConv允许网络根据最终任务的要求学习完整的平移不变性或不同程度的平移依赖性。 CoordConv用完美的泛化方法解决坐标变换问题,比卷积少10-100倍的参数,速度快150倍。

  • 这种卷积的无能在多大程度上潜伏在其他任务中,从而从内部隐蔽地妨碍了性能? 将卷积交换为CoordConv可以改进多种任务集上的模型。
    目标检测任务 中,在一个简单的检测空白背景中零散 MNIST 数字的问题中,他们发现,使用 CoordConv 时 Faster R-CNN 的 IoU 提升了大约 24%;
    图像分类任务 中,当添加一个 CoordConv 层到 ResNet-50 的底层并在 ImageNet 上训练时,发现仅有小量的提高;
    生成模型任务 中,在诸如 GAN 和 VAE 的生成式模型中,在GAN中使用CoordConv可以减少模式崩溃,加入 CoordConv 后,几何变换变得更加平滑,包括平移和变形;
    强化学习(RL) 中,玩Atari游戏的域代理从CoordConv层的使用中获益良多。

Contributions

  1. 定义了一个简单的toy Not-so-Clevr 数据集,它由随机放置在画布上的正方形组成;
  2. 定义CoordConv操作,该操作允许卷积过滤器通过添加额外的硬编码输入通道(包含卷积过滤器看到的数据坐标)来知道它们在笛卡尔空间中的位置。该操作可以通过Tensorflow的几行额外代码来实现;
  3. 检查坐标转换问题,从最简单的场景开始,以最复杂的场景结束。(尽管对toy问题的结果通常应该持一定程度的怀疑态度,但从小处着手可以查明问题所在,探索和理解细节)

设想一个简单的任务——监督渲染,在该任务中,给出一个 (i,j)(i, j)(i,j) 位置作为网络的输入,使其生成一个 64×6464\times 6464×64 的图像,并在确定位置绘有一个正方形,如图 1第二行所示:

2. Not-so-Clevr dataset

Not-so-Clevr 数据集是Sort-of-CLEVR的单对象灰度版本,它本身是渲染3D形状的Clevr数据集的简单版本。 请注意,一系列Clevr数据集通常用于有关关系和视觉问题解答的研究,但是在这里将它们用于监督学习和生成模型。 Not-so-Clevr 由放置在 64×6464 \times 6464×64画布上的 9×99 \times 99×9个正方形组成。 限制正方形位置,以使整个正方形位于64×6464 \times 6464×64网格内,以便正方形中心落在 56×5656\times 5656×56的可能较小范围内。枚举这些可能的中心位置将得到一个包含3136个示例的数据集。 对于每个示例正方形 iii,数据集包含三个字段:

  • Ci∈R2C_i \in R^2Ci​∈R2,其中心位置在(x,y)(x,y)(x,y)笛卡尔坐标
  • Pi∈R64×64P_i \in R^{64\times64}Pi​∈R64×64,中心像素的 one-hot 表示
  • Ii∈R64×64I_i \in R^{64\times64}Ii​∈R64×64, 在画布上绘制的64×6464 \times 6464×64正方形图像的结果

为评估模型的泛化能力,定义两种训练/测试分割:

  • 一种是均匀分割,即将所有可能的中心区域随机分为训练集和测试集,二者的比例为 8:2;
  • 另一种是象限分割,即画布被分为四个象限:集中在前三个象限中的小方块被放入训练集,最后一个象限中的小方块被放入测试集。

两种数据集分割方法的分布见下图:

3. CoordConv

卷积是等变的,意味着当每个滤波器被应用于输入以产生输出时,它并不知道每个滤波器的位置。我们可以通过让滤波器了解自己的位置来帮助卷积。为此,我们在输入中添加了两个通道——一个 iii 坐标,一个 jjj 坐标。将由此产生的层称为 CoordConv,如下图所示:

CoordConv层可以实现为标准卷积的简单扩展,其中实例化了额外的通道并填充了(恒定,未经训练的)坐标信息,然后将它们按通道级联到输入表示形式并应用了标准卷积层。图3描述了将两个坐标 iii 和 jjj 相加的操作。

允许卷积滤波器观察到坐标会破坏平移等变性,这似乎是个坏主意。平移等变性不是卷积的标志性优势吗?我们认为,卷积获得成功的重要因素有三:使用的学习参数相对较少;在现代 GPU 上计算速度快;学习了平移等变性函数。CoordConv 层保留了前两个属性——参数较少和计算效率高,并且它的等变程度也可以学习。如果坐标中的权重学习为零,CoordConv 的表现将与标准卷积一样。另一方面,如果平移依赖对下游任务有用,那它也能学习这个。

具体而言,iii 坐标通道是一个h×wh\times wh×w 矩阵,其第一行填充为0,第二行填充为1,第三行填充为2,依此类推。jjj 坐标通道类似,但列填充为常数值而不是行。在所有实验中,对 iii 和jjj 坐标值都进行最终的线性缩放,以使它们落在[−1,1][-1,1][−1,1]。对于二维卷积,两个(i,j)(i,j)(i,j)坐标足以完全指定一个输入像素,但是如果需要,还可以添加其他通道以使模型偏向于学习特定的解决方案。在随后的一些实验中,作者还为 rrr 坐标使用了第三条通道,其中r=(i−h/2)2+(j−w/2)2r = \sqrt{(i-h/2)^2+(j-w/2)^2}r=(i−h/2)2+(j−w/2)2​。

  • Number of parameters:
    忽略 bias 参数,具有核大小为 k×kk \times kk×k,ccc 个输入通道,c0c_0c0​个输出通道的标准卷积层,权重参数量是c⋅c0⋅k2c\cdot c_0 \cdot k^2c⋅c0​⋅k2,而相应的 CoordConv 层将包含(c+d)⋅c0⋅k2(c + d) \cdot c_0 \cdot k^2(c+d)⋅c0​⋅k2权重,其中 ddd 是使用的坐标尺寸的数量(例如2或3)。
  • Translation invariance:
    具有通过初始化或学习为零设置的权重连接到输入坐标的CoordConv将是平移不变的,因此在数学上等效于普通卷积。 如果权重不为零,则该函数将包含某种程度的转换依赖性,理想情况下,其精确形式将取决于要解决的任务。 类似于具有非共享权值的局部连接层,CoordConv允许学习的转换依赖,但相比之下,它需要的参数要少得多:对于空间输入大小 h×wh\times wh×w,(c+d)c′k2vs.hwcc′k2(c + d)c^{'}k^2\ \ vs.\ \ hwcc^{'}k^2(c+d)c′k2  vs.  hwcc′k2。 请注意,所有CoordConv权重,甚至是坐标权重,都在所有位置上共享,因此平移依赖性仅来自于坐标规范; 结果是,与普通卷积一样,但与局部连接层不同的是,如果适当的坐标被外推,那么运算可以扩展到原始的空间域之外。

4. Supervised Coordinate tasks

4.1 Supervised Coordinate Classification

原本以为 CNN 可以轻而易举地完成该任务,因为第一,这一任务如此简单(整个数据集可能只需要两行 Python 代码就能生成,如论文所示),第二,这个数据集如此之小,可以轻易使用过参数化的模型。但结果表明,CNN 的表现令人大跌眼镜。

图5显示了训练集和测试集预测的总和,直观地显示了卷积模型的记忆和缺乏泛化。

与之形成鲜明对比的是,CoordConv模型在数据分割上都能获得完美的性能,而且只需要7.5k参数,只需10-20秒。参数的简捷性进一步证实了它们是更适合于坐标变换任务的模型。

图S3展示了用CoordConv学习到的概率质量有多精确和光滑,而用Deconv则没有那么多。首先展示logits的完整的64×6464\times 6464×64 map,接着展示了softmax的结果和Target(图中红色框)。

其中Deconv中第一个像素(顶行)是训练集中的结果,如预期那样模型有比较正确的预测,虽然在目标像素外还是存在一些概率。下一个像素(第二行偏右)在测试集中也是正确的,但因为目标的周围像素捕获了相差不大的概率,所以模型仅仅只是勉强正确。而最后的像素(底第三行偏右)则是完全错误的。同时可以看到CoordConv的结果展示,是平滑的,而且预测的比较准确。

4.2 Supervised Coordinate Regression

表1 中描述了在监督坐标回归任务中应用的精确架构。

4.3 Supervised Rendering

在单像素坐标变换领域之外,比较了convolutional和CoordConv网络在监督渲染任务上的性能,该任务要求网络生成一个以给定(x;y)的位置。图6所示,观察到convolution和CoordConv之间同样的鲜明对比。即使参数高达 1M 且训练时间超过 90 分钟的模型(图6 右图)也无法在均匀分割的测试集上获得 0.83 以上的 IOU,或在象限分割上获得 0.36 以上的 IOU(图6 左图)。

5 Applicability to other tasks

将Conv交换为CoordConv可以改进多种模型——包括ResNet-50、更快的R-CNN、GANs、VAEs和RL模型。

  1. Image Classification
    对于要求简单的平移不变性的任务,CoordConv在图像分类测试中帮助不大。添加一个额外的带有8个输出通道的11个CoordConv层可以提高ResNet-50[9]的前5级精度,平均每处理5次提高0.04%;然而,这种差异在统计学上并不显著。CoordConv至少不会影响性能,因为它总是可以学会忽略坐标。

  2. Object Detection
    在目标检测中,模型查看像素空间并在其中输出边界框笛卡儿空间。这就产生了一个自然的坐标转换问题,使得CoordConv看起来是一个自然的匹配。在检测分散在画布上的MNIST数字的一个简单问题上,我们发现使用CoordConv时,更快的R-CNN网络的相交-合并测试(IOU)提高了24%。

  3. Generative Modeling
    模式崩溃可以发生在许多维度中,包括那些与内容、样式或场景组件位置有关的维度。假设位置的模式崩溃可能是由于很难直接学习从包含坐标信息的高级潜在空间到像素空间的转换,使用CoordConv可以提供帮助。
    首先,研究了一个简单的任务,即使用GANs和VAEs生成具有所有可能几何位置的彩色图形。然后,通过Horovod的分布式训练,利用DCGAN将问题扩展到大规模场景理解(LSUN)卧室场景。

    使用GANs生成简单的彩色对象,图7a-d显示了采样后的图像和模型折叠分析。观察到,卷积型GAN将二维分布折叠为一维流形。相应的CoordConv GAN模型使用7%的conv GAN参数生成的对象能够更好地覆盖二维笛卡尔空间。

    有了LSUN后,样品如图7e所示,更多见附录中S7.3节信息。观察到(1)从每个模型中随机抽取具有定性可比性的样本,(2)潜在空间插值时的几何平移行为。



  4. Reinforcement Learning
    在A2C中的actor网络中添加CoordConv层会对一些游戏产生显著的改进,但不是全部,如图8所示。

    还尝试将CoordConv添加到我们自己的分布式优先体验重放(Ape-X)实现中,但是没有注意到任何区别。

6. CoordConv layer Code

from tensorflow.python.layers import base
import tensorflow as tf
class AddCoords(base.Layer):"""Add coords to a tensor"""def __init__(self, x_dim=64, y_dim=64, with_r=False):super(AddCoords, self).__init__()self.x_dim = x_dimself.y_dim = y_dimself.with_r = with_rdef call(self, input_tensor):"""input_tensor: (batch, x_dim, y_dim, c)"""batch_size_tensor = tf.shape(input_tensor)[0]xx_ones = tf.ones([batch_size_tensor, self.x_dim],dtype=tf.int32)xx_ones = tf.expand_dims(xx_ones, -1)xx_range = tf.tile(tf.expand_dims(tf.range(self.y_dim), 0),[batch_size_tensor, 1])xx_range = tf.expand_dims(xx_range, 1)xx_channel = tf.matmul(xx_ones, xx_range)xx_channel = tf.expand_dims(xx_channel, -1)yy_ones = tf.ones([batch_size_tensor, self.y_dim],dtype=tf.int32)yy_ones = tf.expand_dims(yy_ones, 1)yy_range = tf.tile(tf.expand_dims(tf.range(self.x_dim), 0),[batch_size_tensor, 1])

CoordConv:An intriguing failing of convolutional neural networks and the CoordConv solution相关推荐

  1. 由 An Intriguing Failing of Convolutional Neural Networks and the CoordConv Solution 引起的思考

    文献来源 这篇文章提出卷积网络无法很好处理坐标的问题.如上图,直接对卷积网络输入坐标,然后让卷积网络输出一张在坐标周围渲染成的正方形块的图像.但结果不是很理想.文章提出在卷积网络层中添加一个坐标信息. ...

  2. 2018:MIXED PRECISION TRAINING OF CONVOLUTIONAL NEURAL NETWORKS USING INTEGER OPERATIONS利用整数运算对卷积神经网络

    @[TOC](2018:MIXED PRECISION TRAINING OF CONVOLUTIONAL NEURAL NETWORKS USING INTEGER OPERATIONS(利用整数运 ...

  3. 吴恩达深度学习课程deeplearning.ai课程作业:Class 4 Week 1 Convolutional Neural Networks: Step by Step

    吴恩达deeplearning.ai课程作业,自己写的答案. 补充说明: 1. 评论中总有人问为什么直接复制这些notebook运行不了?请不要直接复制粘贴,不可能运行通过的,这个只是notebook ...

  4. 经典论文重读---风格迁移篇(一):Image Style Transfer Using Convolutional Neural Networks

    核心思想 采用深层卷积网络提取图像风格特征与内容,并将其进行融合生成效果很好的艺术图. 引言部分 将一幅图像的风格迁移到另一副图像可以看作是纹理迁移的一个分支.对于纹理迁移,它的目标是从源图合成一种纹 ...

  5. 回顾一些重要的CNN改进模型(你真的了解 Convolutional Neural Networks 么)

    转载自: 干货 | 你真的了解 Convolutional Neural Networks 么 https://mp.weixin.qq.com/s?__biz=MzAwMjM3MTc5OA==&am ...

  6. large-margin softmax loss for convolutional neural networks

    损失函数改进之Large-Margin Softmax Loss_AI之路-CSDN博客_large margin softmax最近几年网络效果的提升除了改变网络结构外,还有一群人在研究损失层的改进 ...

  7. 卷积神经网络简介(Convolutional Neural Networks,简称CNN)

    原文地址:卷积神经网络简介(Convolutional Neural Networks,简称CNN) 作者:josephzh0423 卷积神经 网络是 近年发展起来,并引起广泛重视的一种高效识别方法. ...

  8. 目标跟踪算法五:MDNet: Learning Multi-Domain Convolutional Neural Networks for Visual Tracking

    目标跟踪算法五:MDNet: Learning Multi-Domain Convolutional Neural Networks for Visual Tracking 原文:https://zh ...

  9. 1:ImageNet Classification with Deep Convolutional Neural Networks

    这里写链接内容ImageNet Classification with Deep Convolutional Neural Networks 在看caffe教程中example/ImageNet 时, ...

最新文章

  1. Juniper 重置设备到出厂缺省设置
  2. C++线性序列容器vector简单总结
  3. ​NVIDIA针对数据不充分数据集进行生成改进,大幅提高CIFAR-10数据生成
  4. Redis分布式锁奥义
  5. window中搭建jenkins_为容器化的 Go 程序搭建 CI
  6. qq空间登陆 cookie_看完这篇 Session、Cookie、Token,和面试官扯皮就没问题了||CSDN博文精选...
  7. 不用for loop循环一个读取一个文件
  8. Win10推荐一款Terminal
  9. 第 2 届河北省大学生程序设计竞赛(河北省赛)-Problem C. icebound 的账单-题解
  10. EnergyPlus笔记
  11. linux7.6安装gcc,Centos7.6 安装gcc9
  12. 每个人都是雕刻自己的艺术家,生活是你的背景
  13. vue控件a-date-picker设置默认值的方式以及注意事项
  14. 排球分组循环交叉编排_【排球】二青会体校组男子排球(B组)预赛落幕 海口队顺利晋级决赛...
  15. Zuul网关服务使用详解
  16. Python变量与字符串
  17. 计算多边形(polygon)面积的算法原理和python实现
  18. 2021高考成绩查询抖音,2021抖音高考最后倒计时励志句子
  19. 面试:自我问题反思总结
  20. 英国电信集团、西班牙电话公司和澳洲电讯参与区块链试验

热门文章

  1. jBPM4的PVM解析
  2. java怎么绘画坦克_java绘图,画坦克
  3. java大文件pdf水印_java – 如何扩展PDF的页面大小以添加水印?
  4. 人格障碍及心理异常的调适
  5. ERROR: Cannot uninstall ‘filelock‘. It is a distutils installed project and thus we cannot accuratel
  6. linux进阶-网络安全系统网站服务
  7. JavaWeb:掌握Session的使用,完善用户登录注册案例的功能
  8. 没有公网IP,怎么实现外网访问内网视频监控
  9. 搭档之家:哭唧唧!暗地较劲得不偿失,美团暂停支付宝后被无情反超
  10. 各团队对《t铁大导航》评价及我组回复