当前位置: 首页 > news >正文

深度学习中卷积的计算复杂度与内存访问复杂度

深度学习中卷积的计算复杂度与内存访问复杂度

在深度学习中,普通卷积(Standard Convolution)、深度可分离卷积(Depthwise Separable Convolution, DWConv)和部分卷积(Partial Convolution, PConv)是常见的卷积操作。以下是它们的计算复杂度和内存访问复杂度的分析。


1. 普通卷积(Standard Convolution)
  • 定义:标准卷积通过滑动窗口将输入特征图与权重核进行逐元素乘加操作。
  • 符号定义:
    • 输入特征图尺寸:$H \times W \times C_{in}$
    • 卷积核大小:$K \times K$
    • 输出通道数:$C_{out}$
    • 假设步幅为1,填充使得输出特征图尺寸为$H \times W \times C_{out}$
  • 计算复杂度: $ F_{std} = H \cdot W \cdot C_{out} \cdot K^2 \cdot C_{in} $
    • 每个输出像素需要对$K^2 \cdot C_{in}$个输入值进行乘加操作。
    • 总共有$H \cdot W \cdot C_{out}$个输出像素。
  • 内存访问复杂度:
  • 权重访问次数:$C_{out} \cdot K^2 \cdot C_{in}$(权重只加载一次)。
  • 输入特征图访问次数:H \cdot W \cdot C_{in}(每个滑动窗口读取一次输入)。
  • 输出特征图写入次数:$H \cdot W \cdot C_{out}$
  • 总内存访问次数: $ M_{std} = H \cdot W \cdot( C_{in}+C_{out}) +K^{2} \cdot C_{in} \cdot C_{out} $

2. 深度可分离卷积(Depthwise Separable Convolution, DWConv)
  • 定义:DWConv分为两步:深度卷积(Depthwise Convolution)和逐点卷积(Pointwise Convolution)。
    • 深度卷积:对每个输入通道独立应用卷积核。
    • 逐点卷积:使用$1 \times 1$卷积调整通道数。
  • 符号定义:
    • 深度卷积:输入特征图尺寸$H \times W \times C_{in}$,卷积核大小$K \times K$,输出特征图尺寸$H \times W \times C_{in}$
    • 逐点卷积:输入特征图尺寸$H \times W \times C_{in}$,输出特征图尺寸$H \times W \times C_{out}$
  • 计算复杂度:
    • 深度卷积: $ F_{dw} = H \cdot W \cdot C_{in} \cdot K^2 $
    • 逐点卷积: $ F_{pw} = H \cdot W \cdot C_{in} \cdot C_{out} $
    • 总计算复杂度: $ F_{dwconv} = F_{dw} + F_{pw} = H \cdot W \cdot C_{in} \cdot K^2 + H \cdot W \cdot C_{in} \cdot C_{out} $
  • 内存访问复杂度:
  • 深度卷积:
    • 权重访问次数:$C_{in} \cdot K^2$
    • 输入特征图访问次数:$H \cdot W \cdot C_{in}$
    • 输出特征图写入次数:$H \cdot W \cdot C_{in}$
    • 深度卷积的总内存访问次数:H \cdot W \cdot 2C_{in} + C_{in} \cdot K^2
  • 逐点卷积:
    • 权重访问次数:$C_{in} \cdot C_{out}$
    • 输入特征图访问次数:$H \cdot W \cdot C_{in}$
    • 输出特征图写入次数:$H \cdot W \cdot C_{out}$
    • 逐点卷积的总内存访问次数:C_{in} \cdot C_{out} + H \cdot W \cdot (C_{in} + C_{out} )
  • 总内存访问次数: $ M_{dwconv} = H \cdot W \cdot 2C_{in} + C_{in} \cdot K^2 + C_{in} \cdot C_{out} + H \cdot W \cdot (C_{in} + C_{out} )$

3. 部分卷积(Partial Convolution, PConv)
  • 定义:PConv是一种只对部分通道进行正常卷积的方法,其他部分的通道进行恒等映射比进行任何操作。
  • 符号定义:
    • 输入特征图尺寸:$H \times W \times C_{in}$
    • 卷积核大小:$K \times K$
    • 输出通道数:$C_{out}$
    • 假设其中进行正常卷积的操作的通道数为C_p
  • 计算复杂度:
    • 标准卷积计算量:$H \cdot W \cdot C_{p} \cdot K^2 \cdot C_{p}=H \cdot W \cdot C_{p}^{2} \cdot K^2$
    • 总计算复杂度: $ F_{pconv} = H \cdot W \cdot C_{p}^{2} \cdot K^2 $
  • 内存访问复杂度:
  • 权重访问次数:$C_{p} \cdot K^2 \cdot C_{p}= K^2 \cdot C_{p}^{2}$
  • 输入特征图访问次数:$H \cdot W \cdot C_{p}$
  • 输出特征图写入次数:$H \cdot W \cdot C_{p}$
  • 总内存访问次数: $ M_{pconv} = H \cdot W \cdot 2 C_{p} + K^2 \cdot C_{p}^2 $

总结对比表

特性

Standard Convolution

Depthwise Separable Convolution (DWConv)

Partial Convolution (PConv)

计算复杂度

$H \cdot W \cdot C_{out} \cdot K^2 \cdot C_{in}$

$H \cdot W \cdot C_{in} \cdot K^2 + H \cdot W \cdot C_{in} \cdot C_{out}$

$ F_{pconv} = H \cdot W \cdot C_{p}^{2} \cdot K^2 $

内存访问复杂度

$ M_{std} = H \cdot W \cdot( C_{in}+C_{out}) +K^{2} \cdot C_{in} \cdot C_{out} $$ M_{dwconv} = H \cdot W \cdot 2C_{in} + C_{in} \cdot K^2 + C_{in} \cdot C_{out} + H \cdot W \cdot (C_{in} + C_{out} )$$ M_{pconv} = H \cdot W \cdot 2 C_{p} + K^2 \cdot C_{p}^2 $

以上是对三种卷积操作的计算复杂度和内存访问复杂度的详细分析。

参考链接:神经网络参数量、计算量(FLOPS)、内存访问量(AMC)计算详解-CSDN博客

相关文章:

  • 回归树:从原理到Python实战
  • 三生原理的范式引领价值?
  • 408真题笔记
  • Linux基础指令【下】
  • EBO的使用
  • 数字智慧方案5974丨智慧农业大数据应用平台综合解决方案(79页PPT)(文末有下载方式)
  • [vscode]全局配置nim缩进
  • 【工具变量】上市公司治理水平数据集-含参考文献及dta、xlsx格式(2003-2023年)
  • ClackyAI:下一代智能云开发环境的技术革新与实践价值
  • 多节点监测任务分配方法比较与分析
  • 数字智慧方案5976丨智慧农业顶层设计建设与运营方案(59页PPT)(文末有下载方式)
  • 面经-计算机网络——OSI七层模型与TCP/IP四层模型的对比详解
  • Umi-OCR项目(1)
  • 第七章:赤 色广播计划的全面启动
  • VAO与VBO的相关操作
  • Hive数据倾斜 常见解决办法
  • DeepSeek V3 训练策略:FP8混合精度与多Token预测
  • Python 常用内置函数详解(八):对象属性操作getattr()、setattr()、delattr()、hasattr()、vars()函数详解
  • ​基于51单片机的数字温度计—可显示负数
  • esp32cam开发板的引脚使用和测试
  • 华尔兹转岗与鲁比奥集权:特朗普政府人事震荡背后的深层危机
  • 5月1日,全社会跨区域人员流动量完成33271.4万人次
  • 美国证实加拿大及墨西哥汽车零部件免关税
  • 五一假期首日,多地党政主官暗访督查节日安全和值班值守工作
  • 伊朗外长:伊美第四轮间接谈判将于5月3日举行
  • “面具女孩”多次恐吓电梯内两幼童,当事女孩及家长道歉后获谅解