普通卷积、分组卷积和深度分离卷积概念以及参数量计算

简介: 普通卷积、分组卷积和深度分离卷积概念以及参数量计算

Google提出了移动端模型MobileNet,其核心是采用了深度可分离卷积,其不仅可以降低模型计算复杂度,而且可以大大降低模型大小,适合应用在真实的移动端应用场景。这篇文章带你了解一下什么是普通卷积、分组卷积和深度分离卷积,以及如何计算参数量。

img

上面的图片展示了普通卷积和分组卷积的不同,下面我们通过具体的例子来看。

普通卷积

标准卷积运算量的计算公式:

$$ {FLOPs }=\left(2 \times C_{0} \times K^{2}-1\right) \times H \times W \times C_{1} $$

计算公式参考:深度学习之(经典)卷积层计算量以及参数量总结 (考虑有无bias,乘加情况) - 琴影 - 博客园 (cnblogs.com)

参数量计算公式:$K^{2} \times C_{0} \times C{1}$

$C_{0}$ :输入的通道。

K:卷积核大小。

H,W:输出 feature map的大小

$C_{1}$:输出通道的大小。

bias=False,即不考虑偏置的情况有-1,有True时没有-1。

举例:

输入的尺寸是227×227×3,卷积核大小是11×11,输出是6,输出维度是55×55,

我们带入公式可以计算出

参数量:

$11^2 \times 3 \times 6$=2178

运算量:

$2 \times 3 \times11^{2}\times 55\times 55 \times 6$=13176900

分组卷积

分组卷积则是对输入feature map进行分组,然后每组分别卷积。

假设输入feature map的尺寸仍为$C_{0}\times H \times W$,输出feature map的数量为$C_{1}$个,如果设定要分成G个groups,则每组的输入feature map数量为$\frac{C_{0}}{G}$,每组的输出feature map数量为$\frac{C{1}}{G}$,每个卷积核的尺寸为$\frac{C_{0}}{G}\times K \times K$,卷积核的总数仍为$C_{1}$个,每组的卷积核数量为$\frac{C{1}}{G}$,卷积核只与其同组的输入map进行卷积,卷积核的总参数量为$N\times \frac{C_{0}}{G}\times K \times K$,总参数量减少为原来的 $\frac{1}{G}$。

计算量公式:

$$ \left[\left(2 \times K^{2} \times C_{0} / g +1\right) \times H \times W \times C_{o} / g\right] \times g $$

分组卷积的参数量为:

$$ K * K * \frac{C_{0}}{g} * \frac{C_{1}}{g} * g $$

举例:

输入的尺寸是227×227×3,卷积核大小是11×11,输出是6,输出维度是55×55,group为3

我们带入公式可以计算出

参数量:

$11^2 \times \frac{3}{3} \times \frac{6}{3} \times 3$=726

运算量:

$\left[\left(2 \times 11^{2} \times3 / 3 +1\right) \times 55 \times 55 \times 6 / 3\right] \times 3$=2205225

深度可分离卷积(Depthwise separable conv)

设输入特征维度为$D_{F}\times D_{F}\times M$,M为通道数,$D_{k}$为卷积核大小,M为输入的通道数, N为输出的通道数,G为分组数。

当分组数量等于输入map数量,输出map数量也等于输入map数量,即M=N=G,N个卷积核每个尺寸为$D_{k}\times D_{k}\times 1 $时,Group Convolution就成了Depthwise Convolution。

逐点卷积就是把G组卷积用conv1x1拼接起来。如下图:

查看源图像

深度可分离卷积有深度卷积+逐点卷积。计算如下:

  • 深度卷积:设输入特征维度为$D_{F}\times D_{F}\times M$,M为通道数。卷积核的参数为$D_{k}\times D_{k}\times 1 \times M$。输出深度卷积后的特征维度为:$D_{F}\times D_{F}\times M$。卷积时每个通道只对应一个卷积核(扫描深度为1),所以 FLOPs为:$M\times D_{F}\times D_{F}\times D_{K}\times D_{K}$
  • 逐点卷积:输入为深度卷积后的特征,维度为$D_{F}\times D_{F}\times M$。卷积核参数为$1\times1\times M\times N$。输出维度为$D_{F}\times D_{F}\times N$。卷积过程中对每个特征做$1 \times 1$的标准卷积, FLOPs为:$N \times D_{F} \times D_{F}\times M$

    将上面两个参数量相加就是 $D_{k} \times D_{k} \times M+M \times N$

所以深度可分离卷积参数量是标准卷积的$\frac{D_{K} \times D_{K} \times M+M \times N}{D_{K} \times D_{K} \times M \times N}=\frac{1}{N}+\frac{1}{D_{K}^{2}}$

目录
相关文章
|
7月前
|
机器学习/深度学习 人工智能 算法
人工智能中数据组合采样、特征层、算法层的讲解(图文详解)
人工智能中数据组合采样、特征层、算法层的讲解(图文详解)
164 0
|
2月前
|
机器学习/深度学习
深度学习笔记(十二):普通卷积、深度可分离卷积、空间可分离卷积代码
本文探讨了深度可分离卷积和空间可分离卷积,通过代码示例展示了它们在降低计算复杂性和提高效率方面的优势。
197 2
深度学习笔记(十二):普通卷积、深度可分离卷积、空间可分离卷积代码
|
5月前
|
机器学习/深度学习 计算机视觉
【YOLOv8改进 - 注意力机制】SENetV2: 用于通道和全局表示的聚合稠密层,结合SE模块和密集层来增强特征表示
【YOLOv8改进 - 注意力机制】SENetV2: 用于通道和全局表示的聚合稠密层,结合SE模块和密集层来增强特征表示
|
4月前
|
机器学习/深度学习 Shell 计算机视觉
一文搞懂 卷积神经网络 卷积算子应用举例 池化 激活函数
这篇文章通过案例详细解释了卷积神经网络中的卷积算子应用、池化操作和激活函数,包括如何使用卷积算子进行边缘检测和图像模糊,以及ReLU激活函数如何解决梯度消失问题。
|
5月前
|
PyTorch 测试技术 算法框架/工具
【YOLOv8改进 - 卷积Conv】SPConv:去除特征图中的冗余,大幅减少参数数量 | 小目标
YOLO目标检测专栏探讨了模型优化,提出SPConv,一种新卷积操作,减少特征冗余,提升效率。SPConv将特征分为代表性和不确定部分,分别处理,再融合。实验显示,SPConv在速度和准确性上超越现有基准,减少FLOPs和参数。论文和PyTorch代码已公开。更多详情及实战案例见CSDN博客链接。
|
5月前
|
机器学习/深度学习 算法 计算机视觉
【YOLOv10改进 -卷积Conv】 AKConv(可改变核卷积):任意数量的参数和任意采样形状的即插即用的卷积
AKConv是一种可改变核卷积,旨在解决传统卷积的局限,包括固定大小的卷积窗口和卷积核尺寸。AKConv提供灵活的卷积核参数和采样形状,适应不同尺度特征。其创新点包括:1)支持任意大小和形状的卷积核;2)使用新算法确定初始采样位置;3)应用动态偏移调整采样位置;4)优化模型参数和计算效率。AKConv已应用于YOLOv8,提高网络性能。相关代码可在<https://github.com/CV-ZhangXin/AKConv>找到。
|
7月前
|
机器学习/深度学习
一文弄清池化层(pooling)的作用
一文弄清池化层(pooling)的作用
|
7月前
|
机器学习/深度学习 编解码 自然语言处理
LRP-QViT完美而来 | 输出层分配相关性+剪切通道让Swin Transformer量化后居然涨1.5个点
LRP-QViT完美而来 | 输出层分配相关性+剪切通道让Swin Transformer量化后居然涨1.5个点
296 0
|
7月前
|
机器学习/深度学习 编解码 算法
小目标检测新方法SCTransNet | 空间通道交叉Transformer & 互补前馈达成完美语义信息传递
小目标检测新方法SCTransNet | 空间通道交叉Transformer & 互补前馈达成完美语义信息传递
935 0
|
机器学习/深度学习 计算机视觉
卷积层提取特征
卷积层提取特征
139 1