从卷积神经网络登上历史舞台开始,经过不断的改进和优化,卷积早已不是当年的卷积,诞生了分组卷积(Group convolution)、空洞卷积(Dilated convolution 或 À trous)等各式各样的卷积。今天主要讲一下深度可分离卷积(depthwise separable convolutions),这是 Xception 以及 MobileNet 系列的精华所在。

对于卷积来说,卷积核可以看做一个三维的滤波器:通道维+空间维(Feature Map 的宽和高),常规的卷积操作其实就是实现通道相关性和空间相关性的联合映射。Inception 模块的背后存在这样的一种假设:卷积层通道间的相关性和空间相关性是可以退耦合的,将它们分开映射,能达到更好的效果。

上图是一个典型的 Inception 模块,它先在通道相关性上利用 1×1 卷积将输入的 Feature Map 映射到几个维度比原来更小的空间上,相当于每个通道图乘上不同的因子做线性组合,再用 3×3 卷积这些小空间,对它的空间和通道相关性同时做映射。以第二个分支为例,假设 Input 是 28×28×192 的 Feature Maps,在通道相关性上利用 32 个 1×1×192 的卷积核做线性组合,得到 28×28×32 大小的 Feature Maps,再对这些 Feature Maps 做 256 个 3×3×32 的卷积,即联合映射所有维度的相关性,就得到 28×28×256 的 Feature Maps 结果。可以发现,这个结果其实跟直接卷积 256 个3×3×192 大小的卷积核是一样。也就是说,Inception 的假设认为用 32 个 1×1×192256 个 3×3×32 的卷积核退耦级联的效果,与直接用 256个 3×3×192 卷积核等效。而两种方式的参数量则分别为32×1×1×192 + 256×3×3×32 = 79872 和 256×3×3×192 = 442368。

下图是简化后的 Inception 模块(仅使用3×3卷积并去除 Avg pooling),基于该简化模块可以将所有的 1×1 卷积核整合成一个大的 1×1 卷积。如将 3 组 32 个 1×1×192 的卷积核重组为 96个 1×1×192 的卷积核,后续再接3组 3×3卷积,  3×3卷积的输入为前序输出的1/3,如右下图:

Xception 论文进而提出在此的基础上,做出进一步的假设:通道相关性和空间相关性是完全可分的,由此得到下图中的 “extreme” Inception。先进行 1×1 的通道相关性卷积,后续接的 3×3 卷积的个数与 1×1 卷积的输出通道数相同。

Figure 4 中的 Inception 模块与本文的主角-深度可分离卷积就近乎相似了,但仍然存在两点区别:

1、深度可分离卷积先进行 channel-wise 的空间卷积,再进行1×1 的通道卷积,Inception则相反;
2、Inception中,每个操作后会有一个ReLU的非线性激活,而深度可分离卷积则没有。

从常规卷积 -> 典型的Inception -> 简化的Inception -> “极限”Inception,实际上是输入通道分组的一个变化过程。常规卷积可看做将输入通道当做整体,不做任何分割;Inception则将通道分割成3至4份,进行1×1的卷积操作;“极限”Inception则每一个通道都对应一个1×1的卷积。

深度可分离卷积

深度可分离卷积将传统的卷积分解为一个深度卷积(depthwise convolution)+ 一个 1×1的卷积(pointwise convolution)。如下图所示,(a)是传统卷积,(b)、(c)分别对应深度可分离卷积的深度卷积和 1×1的卷积:

例如:

输入图像W*H*M,对于深度分离卷积,把标准卷积(4,4,M,5)分解为:

  • 深度卷积部分:大小为(4,4,1,M) ,作用在输入的每个通道上,输出特征映射为(W*H*M)
  • 逐点卷积部分:大小为(1,1,M,5),作用在深度卷积的输出特征映射上,得到最终输出为(W,H,5)

假设输入特征图大小为 ,输出特征图大小为 ,卷积核大小为 ,则传统卷积的计算量为: (这里的D_F指的是输出的特征图的尺寸吧???)

深度可分离卷积的计算量为深度卷积和 1×1 卷积的计算量之和:

深度可分离卷积与传统卷积的计算量之比为:

以上文中 28×28×192 的输入,28×28×256 的输出为例,卷积核大小为 3×3,两者的计算量之比为:

深度可分离卷积的计算量缩减为传统卷积的 1/9 左右。下图是传统卷积(左)与MobileNet中深度可分离卷积(右)的结构对比。Depth-wise卷积和1×1卷积后都增加了BN层和ReLU的激活层。

from :https://www.jianshu.com/p/38dc74d12fcf?utm_source=oschina-app

把标准卷积(4,4,3,5)分解为:

  • 深度卷积部分:大小为(4,4,1,3) ,作用在输入的每个通道上,输出特征映射为(3,3,3)
  • 逐点卷积部分:大小为(1,1,3,5),作用在深度卷积的输出特征映射上,得到最终输出为(3,3,5)

例中深度卷积卷积过程示意图如下:

输入有3个通道,对应着有3个大小为(4,4,1) 的深度卷积核,卷积结果共有3个大小为(3,3,1) ,我们按顺序将这卷积按通道排列得到输出卷积结果(3,3,3) 。

from:https://blog.csdn.net/qq_21997625/article/details/87106152

深度可分离卷积Depthwise Separable Convolution相关推荐

  1. 关于深度可分离卷积 Depthwise Pointwise Convolution

    关于Pointwise Convolution ​ 最近在学习3维点云处理,这边有看到关于pointwise. (图源 知乎:轻量化网络--MobileNet - 知乎 (zhihu.com)) ​ ...

  2. 通道可分离卷积 depth-wise separable convolution

    通道可分离卷积 文章目录 通道可分离卷积 正常卷积回顾 通道可分离卷积 通道分离卷积,depthwise separable convolution,也叫深度可分离卷积,是MobileNet系列的主要 ...

  3. 2d 蓝图_“蓝图”卷积--对深度可分离卷积的再思考

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

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

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

  5. 关于深度可分离卷积、空洞卷积、分组卷积的理解笔记

    深度可分离卷积(Depthwise separable convolution) 深度可分离卷积由逐通道卷积(Depthwise Convolution)和逐点卷积(Pointwise Convolu ...

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

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

  7. 对深度可分离卷积、分组卷积、扩张卷积、转置卷积(反卷积)的理解

    参考: https://zhuanlan.zhihu.com/p/28749411 https://zhuanlan.zhihu.com/p/28186857 https://blog.yani.io ...

  8. Depth-wise separable convolution 深度可分卷积

    Depth-wise separable convolution :深度分离卷积,出自mobilenet和xception. MobileNet是基于深度可分离卷积的,通俗来说,深度可分离卷积就是:把 ...

  9. Separable Convolution(深度可分离卷积)

    作用:它的核心思想是将一个完整的卷积运算分解为两步进行,分别为Depthwise Convolution与Pointwise Convolution,有效的减小了参数数量,适合部署在受到硬件性能限制的 ...

最新文章

  1. 【FluidSynth】FluidSynth 简介 ( 相关资源链接 | 简介 | 特征 )
  2. 数据中心运营:内包还是外包?
  3. 【Docker】docker attach 卡住的问题
  4. 大佬(概率期望DP)
  5. MyBatis学习总结(25)——Mybatis Generator generatorConfig.xml配置文件详细说明
  6. LeetCode(21)——合并两个有序链表(JavaScript)
  7. 为什么 MapReduce 再次流行起来了?
  8. 【CentOS 7】scp示例
  9. Thinkphp报错:fields not exists:[status]
  10. paip.AJAX回调函数不起作用的解决
  11. 51单片机超声波测距和报警+Proteus仿真
  12. mysql.sock连接_解决不能通过mysql.sock连接MySQL问题的办法
  13. Java企业汽车调度系统
  14. ValueError: Only images with 2 spatial dimensions are supported. If using with color/multichannel im
  15. UWP 制作汉堡菜单及添加滑动手势
  16. dom4j解析xml错误-version 后面跟随的值必须是用引号括起来的字符串
  17. Python标准库:内置函数divmod(a, b)
  18. 视觉SLAM前端——LK光流法
  19. RK平台--EVS模块: (一)概述
  20. 纯干货讲解财务三大报表,值得收藏

热门文章

  1. 微软托管服务器,微软 GitHub 推出新政策,允许托管以安全研究为目的的恶意软件...
  2. JAVA 临时变量的生命周期_C++临时变量的生命周期?
  3. 苹果秋季新品将要发布,MacBook Pro都有哪些变化
  4. java 4位数,java 找出4位数的所有吸血鬼数字
  5. 牛客OI周赛2-提高组
  6. ubuntu18.04中tomcat8.5启动时报找不到JAVA_HOME和JRE_HOME
  7. How to setup linked servers for SQL Server and Oracle 64 bit client
  8. NET中各种数据库连接大全
  9. jquery :nth-child()选择器的简单应用
  10. Android RecyclerView(五)封装Holder与Adapter(Android 5.0 新特性)