论文:Rethinking Depthwise Separable Convolutions: How Intra-Kernel Correlations Lead to Improved MobileNets

https://arxiv.org/pdf/2003.13549.pdf​arxiv.org

代码地址:

zeiss-microscopy/BSConv​github.com

一、背景

一些轻量级的网络,如MobileNet中,会有深度可分离卷积Depthwise Separable Convolution(DSCs),由depthwise(DW)和pointwise(PW)两个部分结合起来,用来提取特feature map,相比常规的卷积操作,其参数数量和运算成本比较低。

Joe.Zhao:深度可分离卷积​zhuanlan.zhihu.com

作者对其进一步的研究,发现基于深度可分离卷积的体系结构,例如MobileNets隐式地依赖于跨内核的相关性。作者经过定性和定量的研究发现基于核内部的相关性可以更有效地分离标准卷积。

二、启发来源

定性分析:作者可视化了三个基础网络VGG-19、Inception V2、ResNet-50的卷积核,将128*3*3的卷积核沿深度轴划分成128张小图片,每张都是3*3(如图)。图中可以看出,很多卷积核呈现相同的“视觉结构”。就好比这些卷积核是照着一个模子,然后加点线性变换产生的。然后作者就将这个模子称为“蓝图”(高大上的名字)。

定量研究:

为了进一步说明沿深度轴卷积核的相关性,作者用以下方式分析了几个训练过的CNNs:

  1. 把M*K*K的卷积核划分成M个K*K的样本;
  2. 对这M个样本进行PCA分析
  3. 确定由第一个主成分(PC1)解释的过滤器的方差

可以看到,平均每个过滤器内核的方差的50%左右可以用这个简单的模型来解释,这表明使用“蓝图”改进的潜力很大。

三、“蓝图”卷积

“蓝图”即一个卷积核的模板,那么一个普通的卷积核就可以从一个蓝图卷积的各种线性变换而来。

如图第一行,是一个标准卷积,卷积核大小是K*K*M;

第二行是蓝图卷积,卷积核由蓝图(一个K*K的卷积核)和一个M*1的权重向量组成。

四、“蓝图”卷积的两种变形和实现

作者是对深度可分离卷积的一个再思考,那么到底与深度可分离卷积有什么不同呢?

Unconstrained BSConv (BSConv-U):无限制蓝图卷积

从上图的第二列和第三列可以看出,

深度可分离卷积是先逐通道卷积,再对深度方向上加权组合。

无限制蓝图卷积是先对深度方向上加权组合,再卷积。

简单说,就是交换了depthwise(DW)和pointwise(PW)的顺序。

那么这个简单的交换有什么作用?

如下图,DSCs隐式地假设一个用于所有内核的3d蓝图,而BSConv则是依赖于每个内核的单独2d蓝图。

所以,深度可分卷积实际上执行的是跨内核的相关性,而不是内核内部的相关性。而研究发现内核内部的相关性占主导地位,因此有更大的潜力进行有效分离。

Subspace BSConv (BSConv-S) :子空间蓝图卷积

作者进一步研究发现,在BSConv-U中1*1卷积层所使用的参数矩阵W=(Wn,M)行与行之间存在高度关联。(注:每一行有M个参数,对应一个输出通道)。

所以作者进一步将这个卷积核矩阵分解,即因式分解来实现W的低秩近似,然后通过添加正交约束来减少参数之间的相互关联。

上述的结果就是,1个1*1卷积被分解成两个1*1卷积。

五、实验

1、作者在CIFAR10、CIFAR100、StanforDogs、StanforCars等多个数据集上,使用MobileNetV1-V3网络,进行了实验,发现使用蓝图卷积代替标准卷积后,分类准确率都有所提升。

2、作者在CIFAR10、CIFAR100等数据集上,使用ResNet作为基础网络,发现参数量明显减少,性能也有所提升。

在大规模和细粒度分类数据集上的大量实验表明,BSConvs可以很好地改进MobileNets等网络结构,而不会引入任何复杂性。

六、总结

本论文提出了一种新的卷积核的分离方法BSConv,该方法是基于核内部的相关性,因此可以更有效地分离标准卷积。大量实验表明,该方法在减少参数量,提升模型性能方面有明显效果。

2d 蓝图_“蓝图”卷积--对深度可分离卷积的再思考相关推荐

  1. 可分离卷积及深度可分离卷积详解

    可分离卷积 再来看一下nn.Conv2d(): torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, ...

  2. Lesson 16.1016.1116.1216.13 卷积层的参数量计算,1x1卷积核分组卷积与深度可分离卷积全连接层 nn.Sequential全局平均池化,NiN网络复现

    二 架构对参数量/计算量的影响 在自建架构的时候,除了模型效果之外,我们还需要关注模型整体的计算效率.深度学习模型天生就需要大量数据进行训练,因此每次训练中的参数量和计算量就格外关键,因此在设计卷积网 ...

  3. 什么是深度可分离卷积及深度可分离卷积的优势

    1.什么是深度可分离卷积? 2.传统卷积的参数和计算量: 可分离卷积包括两部(逐通道卷积+逐点卷积) 3.参数对比 4.计算量对比

  4. 一文读懂 12种卷积方法(含1x1卷积、转置卷积和深度可分离卷积等)

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 我们都知道卷积的重要性,但你知道深度学习领域的卷积究竟是什么,又有 ...

  5. 可分离卷积:空间可分离卷积和深度可分离卷积

    空间可分离卷积:将一个卷积核分为两部分(降低计算复杂度,但并非所有的卷积核都可以分) 深度可分离卷积的过程:先深度卷积,再点态卷积 (对卷积中的通道数不了解的请参考:关于卷积中的通道数问题) 1. 深 ...

  6. 深度学习中的depthwise convolution,pointwise convolution,SeparableConv2D深度可分离卷积

    DepthwiseConv2D深度方向的空间卷积 pointwise convolution, SeparableConv2D深度可分离卷积 SeparableConv2D实现整个深度分离卷积过程,即 ...

  7. 【Tensorflow】tf.nn.depthwise_conv2d如何实现深度卷积?+深度可分离卷积详解

    目录 常规卷积操作 深度可分离卷积 = 逐通道卷积+逐点卷积 1.逐通道卷积 2.逐点卷积 参数对比 介绍 实验 代码清单 一些轻量级的网络,如mobilenet中,会有深度可分离卷积depthwis ...

  8. 深度可分离卷积Depthwise Separable Convolution

    从卷积神经网络登上历史舞台开始,经过不断的改进和优化,卷积早已不是当年的卷积,诞生了分组卷积(Group convolution).空洞卷积(Dilated convolution 或 À trous ...

  9. 分组卷积/转置卷积/空洞卷积/反卷积/可变形卷积/深度可分离卷积/DW卷积/Ghost卷积/

    文章目录 1. 常规卷积 2. 分组卷积 3. 转置卷积 4. 空洞卷积 5. 可变形卷积 6. 深度可分离卷积(Separable Convolution) 6.1 Depthwise Convol ...

最新文章

  1. 【廖雪峰python入门笔记】字符串_转义字符的使用
  2. 奥比中光Gemini 3D双目结构光深度相机在Android平台上深度数据噪点非常多的问题
  3. JavaScript (二)
  4. Linux中java项目环境部署,简单记录一下
  5. 数据仓库经验小结(转)
  6. WPF 使用依赖属性(DependencyProperty) 定义用户控件中的Image Source属性
  7. 牛客网-《剑指offer》-跳台阶
  8. 手机服务器共享信息,手机云共享服务器
  9. 图解 Scala 基本语法 V2018.12.17
  10. 将GPS获得的UTC时间转换成本地时间的方法(转)
  11. 5.3 GRU、LSTM 情感分类
  12. 15.看板方法---启动看板变革
  13. LabWindows图表显示
  14. 数据结构常用常考经典习题【按十大专题总结】
  15. python父亲节礼物送什么_父亲节送什么礼物好
  16. 移动、电信光猫超级管理员密码
  17. 通过 Teardrop 攻击程序学习自制 IP 包及了解包的结构
  18. 建立FAT文件系统学习笔记
  19. easyswoole 使用 从thinkphp5.1数据库ORM类库
  20. php抽奖的数字滚动器,jQuery数字滚动插件

热门文章

  1. H.264入门级概念之I、B、P帧
  2. Git cherry-pick后再merge出现一个“奇怪”的现象
  3. java项目打镜像_docker通过dockerfile打java项目镜像
  4. Python面试题(第二篇)
  5. 记事本安卓软件代码设计_用轻量级工具 Notepad3 替代 36 岁的微软记事本
  6. 自动驾驶安全驾驶规则_自动驾驶知识科普 自动驾驶汽车的七大核心技术
  7. MySQL 数据库导出导入操作
  8. python中格式化字符串
  9. 【tensorflow】tensorflow -gpu安装及jupyter环境更改
  10. 对象的初始状态(构造函数)