https://yinguobing.com/separable-convolution/#fn2

卷积神经网络在图像处理中的地位已然毋庸置疑。卷积运算具备强大的特征提取能力、相比全连接又消耗更少的参数,应用在图像这样的二维结构数据中有着先天优势。然而受限于目前移动端设备硬件条件,显著降低神经网络的运算量依旧是网络结构优化的目标之一。本文所述的Separable Convolution就是降低卷积运算参数量的一种典型方法。

常规卷积运算

假设输入层为一个大小为64×64像素、三通道彩色图片。经过一个包含4个Filter的卷积层,最终输出4个Feature Map,且尺寸与输入层相同。整个过程可以用下图来概括。

此时,卷积层共4个Filter,每个Filter包含了3个Kernel,每个Kernel的大小为3×3。因此卷积层的参数数量可以用如下公式来计算:

N_std = 4 × 3 × 3 × 3 = 108

Separable Convolution

Separable Convolution在Google的Xception[1]以及MobileNet[2]论文中均有描述。它的核心思想是将一个完整的卷积运算分解为两步进行,分别为Depthwise Convolution与Pointwise Convolution。

Depthwise Convolution

同样是上述例子,一个大小为64×64像素、三通道彩色图片首先经过第一次卷积运算,不同之处在于此次的卷积完全是在二维平面内进行,且Filter的数量与上一层的Depth相同。所以一个三通道的图像经过运算后生成了3个Feature map,如下图所示。

其中一个Filter只包含一个大小为3×3的Kernel,卷积部分的参数个数计算如下:

N_depthwise = 3 × 3 × 3 = 27

Depthwise Convolution完成后的Feature map数量与输入层的depth相同,但是这种运算对输入层的每个channel独立进行卷积运算后就结束了,没有有效的利用不同map在相同空间位置上的信息。因此需要增加另外一步操作来将这些map进行组合生成新的Feature map,即接下来的Pointwise Convolution。

Pointwise Convolution

Pointwise Convolution的运算与常规卷积运算非常相似,不同之处在于卷积核的尺寸为 1×1×M,M为上一层的depth。所以这里的卷积运算会将上一步的map在深度方向上进行加权组合,生成新的Feature map。有几个Filter就有几个Feature map。如下图所示。

由于采用的是1×1卷积的方式,此步中卷积涉及到的参数个数可以计算为:

N_pointwise = 1 × 1 × 3 × 4 = 12

经过Pointwise Convolution之后,同样输出了4张Feature map,与常规卷积的输出维度相同。

参数对比

回顾一下,常规卷积的参数个数为:

N_std = 4 × 3 × 3 × 3 = 108

Separable Convolution的参数由两部分相加得到:

N_depthwise = 3 × 3 × 3 = 27
N_pointwise = 1 × 1 × 3 × 4 = 12
N_separable = N_depthwise + N_pointwise = 39

相同的输入,同样是得到4张Feature map,Separable Convolution的参数个数是常规卷积的约1/3。因此,在参数量相同的前提下,采用Separable Convolution的神经网络层数可以做的更深。


  1. Xception: Deep Learning with Depthwise Separable Convolutions, François Chollet ↩︎

  2. MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications ↩︎

卷积网络基础知识---Depthwise Convolution Pointwise Convolution Separable Convolution相关推荐

  1. 卷积网络基础知识---Group Convolution分组卷积

    Group Convolution分组卷积,以及Depthwise Convolution和Global Depthwise Convolution https://www.cnblogs.com/s ...

  2. linux基础-网络基础知识篇

    一.网络基础知识概念 1.什么是网络? 网络即为实现通讯的技术. 2.网络的诞生六步曲 (1).早期的网络需要拥有两台通讯的主机,当主机之间有通讯需求是就构建网络进行通讯 (2).当主机网络需要通讯时 ...

  3. Interview:算法岗位面试—10.24下午—上海某软件公司(机器学习,上市)电话面试—考察SVM、逻辑回归、降低过拟合、卷积网络基础等

    Interview:算法岗位面试-10.24下午-上海某软件公司(机器学习,上市)电话面试-考察SVM.逻辑回归.降低过拟合.卷积网络基础等 导读:当时电话来的非常快,我刚做完一家公司的笔试,接着来了 ...

  4. 收藏100个网络基础知识

    100 个网络基础知识普及,看完成半个网络高手! 1)什么是链接? 链接是指两个设备之间的连接.它包括用于一个设备能够与另一个设备通信的电缆类型和协议. 2)OSI 参考模型的层次是什么? 有 7 个 ...

  5. 第二十六期:100 个网络基础知识普及,看完成半个网络高手

    本篇文章是关于100个网络基础知识普及,看完成半个网络高手!下面,我们一起来看. 作者:佚名来源 本篇文章是关于100个网络基础知识普及,看完成半个网络高手!下面,我们一起来看. 1)什么是链接? 链 ...

  6. 网络基础知识 快速计算子网掩码的2种方法

    网络基础知识 快速计算子网掩码的2种方法<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office ...

  7. 计算机网络有哪些技能知识,网络基础知识及操作技能.ppt

    网络基础知识及操作技能 主讲人 李春报 一.计算机网络概述 1.计算机网络的概念 计算机网络是把分布在不同地理位置上的计算机.终端,用通信设备和通信线路连结起来,再配以相应的网络软件,从而使众多计算机 ...

  8. 华为HCNE专题一:网络基础知识

    华为HCNE专题一:网络基础知识 对应章节:第一章 重点:理解网络结构,掌握OSI参考模型的基本结构 难点:OSI各层次名字及其概念的理解 亮点/应用/重要性:网络入门的基础,重中之重. 主要内容:针 ...

  9. 电脑网络基础知识:ipconfig/all命令及nslookupDns查询命令

    电脑网络基础知识:ipconfig/all命令及nslookupDns查询命令 一.ipconfig/all的使用方法 在电脑中通过命令提示符执行命令ipconfig可以查询电脑ip.mac等配置信息 ...

最新文章

  1. linux 禁用ipv6 方法
  2. 洛谷 - P4173 残缺的字符串(多项式匹配字符串-NTT)
  3. 思科拓扑结构探测及VLAN设计
  4. 程序员 rs编码_为什么声明性编码使您成为更好的程序员
  5. kotlin的loop和Range、list和map
  6. 2.http dns
  7. oracle数据泵功能,Oracle数据泵的使用(1)-Oracle
  8. 关于建立内部会议讨论规范的想法
  9. 2020危险化学品经营单位安全管理人员作业考试题库及危险化学品经营单位安全管理人员理论考试
  10. CS1.6自定义游戏中的H菜单和设置菜单,增加一键买枪功能
  11. 7-7 六度空间 (30分)
  12. Android 设备之间通过 Wifi 传输文件的功能
  13. 美术文献杂志美术文献杂志社美术文献编辑部2022年第7期目录
  14. 我猜这将是程序员副业接单赚外快的最好的平台!
  15. Rb-tree中删除元素后树形调整函数_Rb_tree_rebalance_for_erase
  16. 【MFRC522】STM32 MFRC522 IC读卡 程序及原理图
  17. 浏览器极速模式和兼容模式差异 1
  18. dynamic_cast用法总结
  19. CentOS8 tingzhuxuan 不在 sudoers 文件中。此事将被报告。
  20. 阿翔编程学-XFire

热门文章

  1. javaScript中表单的验证
  2. Linux rsync命令详解
  3. CentOS7(64位)安装NVIDIA显卡驱动和CUDA8.0
  4. 做一个有姿态的女孩子
  5. 《零基础免费学扩增子分析》视频课(含ppt及相应代码),无需转发,直接获取...
  6. 会议:第七届全国生物多样性信息学研讨会(9月25-27日)
  7. NBT-19年2月刊4篇35分文章聚焦宏基因组研究
  8. python使用matplotlib可视化、自定义移除Y轴指定轴刻度标签(removing specific axis ticks in matplotlib y axis)
  9. R语言ggplot2包和lattice包可视化改变x轴和y轴的显示位置实战
  10. R语言使用random包生成随机数或者随机字符串实战:randomNumbers函数创建随机整数的数据集(包含重复项)、randomSequence函数创建不含重复项的随机序列数据集、创建随机字符串