• 0、前言
  • 1、深度可分离卷积
    • 1.1 depthwise卷积
    • 1.2 pointwise卷积
  • 2、代码实现
  • 参考

0、前言

深度可分离卷积不用多说,在轻量级网络架构方面是一个绕不开的话题,只要接触深度学习多多少少会接触。

深度可分离卷积即Depthwise Separable Convolution,该卷积将一个常规卷积过程划分成两个完成:Depthwise卷积和Pointwise卷积,在保证输出一样时,计算量大大降低。

首先来看,一个常规卷积是怎么实现的。当我在pytorch定义一个卷积,该卷积接受一个3通道tensor,输出一个4通道tensor:

nn.Conv2d(in_channels=3,out_channels=4,kernel_size=3)

其示意图:
我们计算一下参数量:parameters=3*3*3*4=108
推广来看,参数量为:parameters=kernel_size*kernel_size*in_channels*out_channels

如果我们从通道数变换的角度来看,卷积就是将3通道的tensor变为了4通道的tensor,我们来看看深度可分离卷积是怎么实现通道的变化的。

1、深度可分离卷积

深度可分离卷积实际上就是两步:depthwise卷积+pointwise卷积

我们知道点卷积(pointwise)的一大作用就是扩展通道和压缩通道,实际上我们可以直接在3通道的tensor上,直接使用点卷积来升维,将3通道变成4通道,但是这样做违背了卷积的本质。

卷积本质上就是通过卷积匀速提取特征,不同特征对应不同通道,所以改变了通道数。所以我们想要深度可分离卷积替代普通卷积,也需要进行卷积运算,然后改变通道数。

所以第一个阶段depthwise卷积就是进行卷积运算,第二个阶段pointwise卷积就是改变通道数,使符合预先定义的输出通道数。

下面两幅图分别就是depthwise卷积和pointwise卷积的示意图。

1.1 depthwise卷积

深度可分离卷积最难理解的应该就是depthwise卷积了,可能第一眼一看觉得挺简单的,但是如果用pytorch实现就麻烦了,因为又涉及到组卷积的概念。

关于组卷积的概念可以看分组卷积(Group Converlution),实际上depthwise卷积就是分组数=输入通道数=输出通道数的特殊分组卷积,那么可以看到depthwise卷积只是单独对每个通道进行卷积运算,但是没有设计跨通道的计算,这样无法进行完善的特征提取,而且depthwise卷积也没有改变通道数的能力

1.2 pointwise卷积

针对1.1中的问题,使用pointwise卷积即可实现。pointwise本质上就是一个普通卷积,只不过kernel_size=1而已。说实话没什么好说的。

2、代码实现

import torch
from torch import nnclass DSC(nn.Module):"""深度可分离卷积:https://zhuanlan.zhihu.com/p/80041030 https://zhuanlan.zhihu.com/p/490685194先是depthwiseConv,本质上就是分组卷积,在深度可分离卷积中,分组卷积的组数=输入通道数=输出通道数,该部分通道数不变再是pointwisejConv,就是点卷积,该部分负责扩展通道数,所以其kernel_size=1,不用padding"""def __init__(self, in_channel, out_channel, ksize=3,padding=1,bais=True):super(DSC, self).__init__()self.depthwiseConv = nn.Conv2d(in_channels=in_channel,out_channels=in_channel,groups=in_channel,kernel_size=ksize,padding=padding,bias=bais)self.pointwiseConv = nn.Conv2d(in_channels=in_channel,out_channels=out_channel,kernel_size=1,padding=0,bias=bais)def forward(self, x):out = self.depthwiseConv(x)out = self.pointwiseConv(out)return outif __name__=="__main__":from torchsummary import summarydsc=DSC(in_channel=3,out_channel=8,ksize=3,padding=1,bais=False).cuda()summary(dsc,input_size=(3,48,48))

参数量为51,如果是普通卷积Conv2d(3,8,3),参数量为216(不加bias),可见参数量下降幅度很大。

参考

Depthwise卷积与Pointwise卷积

深度可分离卷积(DepthwiseSeparableConvolution):Depthwise卷积与Pointwise卷积相关推荐

  1. 【CV】MobileNet:使用深度可分离卷积实现用于嵌入式设备的 CNN 架构

    论文名称:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 论文下载:https:/ ...

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

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

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

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

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

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

  5. 深度学习网络结构笔记----Depthwise卷积与Pointwise卷积--深度可分卷积-- GoogleNet,Xception,MobileNetv1--v3

    目录 1,常规卷积操作 1,什么是Depthwise Convolution 3,什么是Pointwise Convolution 4 ,参数对比 5,Depthwise Separable Conv ...

  6. 【深度学习】利用深度可分离卷积减小计算量及提升网络性能

    [深度学习]利用深度可分离卷积减小计算量及提升网络性能 文章目录 1 深度可分离卷积 2 一个深度可分离卷积层的代码示例(keras) 3 优势与创新3.1 Depthwise 过程3.2 Point ...

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

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

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

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

  9. 深度可分离卷积(Xception 与 MobileNet)

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

最新文章

  1. 刘知远、赵鑫、施柏鑫:AI青年科研人员成长之路
  2. Elam的caffe笔记之配置篇(一):CentOS6.5编译安装gcc4.8.2
  3. 好用的代理服务器工具_secscanauthcheck越权检查工具
  4. python 多线程伪_Python每日3题什么是死锁?
  5. win7升级win10之后硬盘分区变为动态无效硬盘解决办法
  6. javascript输入正三角倒三角
  7. Windows基础 加固
  8. 人民币升值破七 香港物价上涨发工资改用人民币
  9. Linux常用命令和shell命令
  10. matlab中diag函数blkdiag函数的用法
  11. 从浏览器地址栏输入url到请求返回发生了什么?
  12. OJ每日一练——鸡尾酒疗法
  13. android布局闪动,设置child.setvisibility(View.Visible)时,Android主屏幕出现效果闪烁问题...
  14. 网站中图片变形如何解决
  15. win7 64位系统PSD缩略图补丁预览PSD Mystic Thumbs免费版
  16. Cadence Allegro如何修改栅格大小
  17. C语言实现选择排序——简单选择排序算法
  18. vulnhub--DC1
  19. 从实习生到自动化测试工程师,面试过程给我整吐了,你看你有没有经历过。
  20. mysql 四大基础操作_事务的四大特性和隔离级别

热门文章

  1. Linux的磁盘挂载/yum/镜像挂载
  2. 选择沃创云AI智能外呼机器人,实现真正的开源节流
  3. 【机器学习基础】线性基函数模型
  4. 安装spss破解版以及spss安装之后提示我程序无法启动,因为应用程序的并行配置不正确
  5. 加速汽车行业转型,云计算到底扮演了什么角色?
  6. 纪中游记 - Day 1
  7. 传统图像去噪方法(一)
  8. 计划的主体部分应有哪些内容_计划的正文主体一般有哪三个部分构成
  9. 查询速度慢的原因查找
  10. 显示表结构sql语句