深度可分离卷积(DepthwiseSeparableConvolution):Depthwise卷积与Pointwise卷积

这篇具有很好参考价值的文章主要介绍了深度可分离卷积(DepthwiseSeparableConvolution):Depthwise卷积与Pointwise卷积。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0、前言

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

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

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

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

其示意图:深度可分离卷积(DepthwiseSeparableConvolution):Depthwise卷积与Pointwise卷积
我们计算一下参数量: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卷积的示意图。
深度可分离卷积(DepthwiseSeparableConvolution):Depthwise卷积与Pointwise卷积
深度可分离卷积(DepthwiseSeparableConvolution):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 nn



class 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 out

if __name__=="__main__":
    from torchsummary import summary
    dsc=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),可见参数量下降幅度很大。
深度可分离卷积(DepthwiseSeparableConvolution):Depthwise卷积与Pointwise卷积

参考

Depthwise卷积与Pointwise卷积文章来源地址https://www.toymoban.com/news/detail-441395.html

到了这里,关于深度可分离卷积(DepthwiseSeparableConvolution):Depthwise卷积与Pointwise卷积的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • YOLOv8独家改进: 多种新颖的改进方式 | 保持原始信息-深度可分离卷积(MDSConv) | 全局感受野的空间金字塔 (Improve-SPPF)算法 | CA注意力改进版

    深度可分离卷积💡💡💡 本文自研创新改进:改进1)保持 原始信息-深度可分离卷积(MDSConv) , 解决了不能与原始特征层通道之间的信息交互的问题(如经典的深度可分离卷积); 改进2)提出快速的 全局感受野的空间金字塔 ( Improve-SPPF )算法 ,融合局部感受野和全局感受野,

    2024年02月03日
    浏览(33)
  • 行列可分离卷积 separable convolution

    概述 推导 知识沙漠中的一点扩展 如有纰漏错误,恳请指正:D 行列可分离卷积(separable convolution)主要应用于图像处理算法中,用于将一遍2D离散卷积(也称滤波,下文交替使用)操作分离成2遍1D卷积操作。如果图像像素数为 m m m ,卷积核(也称卷积模板、模板)大小为 k ∗ k k*k k ∗

    2024年02月03日
    浏览(24)
  • PyToch 深度学习 || 3. 卷积神经网络 | 3.1 深度学习中的卷积操作

    加权求和是一种非常重要的运算,可以整合局部数字特征进而是提取局部信息的重要手段。这种加权求和的形式被称作卷积或者滤波,对于两个信号 f ( x

    2024年02月15日
    浏览(25)
  • 【深度学习】6-1 卷积神经网络 - 卷积层

    卷积神经网络(Convolutional Neural Network, CNN )。 CNN 被用于图像识别、语音识别等各种场合,在图像识别的比赛中,基于深度学习的方法几乎都以 CNN 为基础。 首先,来看一下 CNN 的网络结构,了解 CNN 的大致框架。CNN 和之前介绍的神经网络一样,可以像乐高积木一样通过组装层

    2024年02月10日
    浏览(35)
  • 深度学习基本理论下篇:(梯度下降/卷积/池化/归一化/AlexNet/归一化/Dropout/卷积核)、深度学习面试

    深度学习面试必备 1:(MLP/激活函数/softmax/损失函数/梯度/梯度下降/学习率/反向传播/深度学习面试 深度学习面试必备 2:(梯度下降/卷积/池化/归一化/AlexNet/归一化/Dropout/卷积核/深度学习面试 深度学习面试必备 3 :物体检测(Anchor base/NMS/softmax/损失函数/BCE/CE/zip) Momentum、

    2024年02月12日
    浏览(33)
  • 深度学习—各种卷积

    卷积是指在滑动中提取特征的过程,我们先从一个小小的权重矩阵,也就是 卷积核(kernel) 开始,让它逐步在二维输入数据上“扫描”。卷积核“滑动”的同时,计算权重矩阵和扫描所得的数据矩阵的乘积,然后把结果汇总成一个输出像素,卷积的过程可以参考下图: 当卷

    2024年02月08日
    浏览(24)
  • 深度学习(一):卷积运算

    1.1 卷积核(Convolutional): 将输入图像中一个小 区域中像素加权平均 后成为输出图像中的每个对应像素,其中权值由一个函数定义,这个函数称为 卷积核(滤波器) 。 一般可以看作 对某个局部的加权求和 ;它的原理是在观察某个物体时我们既不能观察每个像素也不能一次观

    2024年02月06日
    浏览(24)
  • 深度学习|卷积神经网络

    卷积神经网络(Convolutional Neural Network,CNN)是一种深度学习神经网络结构,主要用于 图像识别 、 计算机视觉 等领域。该结构在处理图像等高维数据时表现出色,因为它具有共享权重和局部感知的特点,一方面减少了权值的数量使得网络易于优化,另一方面降低了模型的复

    2024年02月11日
    浏览(30)
  • 深度学习,卷积神经网络

      CV领域发展 CV领域是计算机视觉(Computer Vision)领域的简称。 计算机视觉是指利用计算机模拟人类视觉系统的科学,让计算机具有类似于人类在观察外界的视觉、图像的能力,包括图像处理、图像分析、图像理解等。 计算机视觉领域发展有以下特点: 视觉系统的出现和不

    2024年02月15日
    浏览(41)
  • 深度卷积神经网络

    目录 1.AlexNet 2. 代码实现 (1)特征提取 (2)选择核函数来计算相关性:怎么判断在高维空间里面两个点是如何相关的,如果是线性模型就是做内积。 (3)凸优化问题 (4)漂亮的定理 丢弃法的作用就是因为模型太大了,使用它来对模型做正则。Relu相比于sigmoid梯度确实更大,Maxpoolin

    2024年01月16日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包