当前位置: 首页 > 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博客

http://www.xdnf.cn/news/247177.html

相关文章:

  • 数字基带信号和频带信号的区别解析
  • ES6异步编程中Promise与Proxy对象
  • 小牛电动:荣登央视舞台,引领智能出行新潮流
  • c++26新功能——std::execution
  • 加密算法(一)-对称加密(DES、AES、3DES、Blowfish、Twofish)一篇了解所有主流对称加密,轻松上手使用。
  • mysql-窗口函数一
  • 链表系列一>合并 k 个升序链表
  • 【CV数据集】DIOR遥感目标检测数据集(含处理好的YOLO、COCO、VOC格式和相关配置文件下载链接)
  • 响应式布局,在飞帆平台中如此简单
  • 文件包含漏洞学习
  • PostgreSQL:pgAdmin 4 使用教程
  • 手撕哈希表
  • Android 移动开发:ProgressBar (水平进度条)
  • 【LeetCode Hot100】回溯篇
  • cua: 为 AI 智能体提供高性能虚拟环境
  • GTA5(传承/增强) 13980+真车 超跑 大型载具MOD整合包+最新GTA6大型地图MOD 5月最新更新
  • PyTorch 2.0编译器技术深度解析:如何自动生成高性能CUDA代码
  • 【Bootstrap V4系列】学习入门教程之 页面内容排版
  • 图像加密算法概述
  • Elsevier latex报错Paragraph ended before \@citex was complete.<to be read again>
  • Vue3 + OpenLayers 企业级应用进阶
  • Linux 第六讲 --- 工具篇(一)yum/apt与vim
  • 哈希表笔记(四)Redis对比Java总结
  • YOLOv8模型训练过程
  • Python与MySQL高效集成指南:从基础到高级实践
  • Hibernate与MybatisPlus的混用问题(Invalid bound statement (not found))
  • (C题|社交媒体平台用户分析问题)2025年第二十二届五一数学建模竞赛(五一杯/五一赛)解题思路|完整代码论文集合
  • 恒流源电路
  • RAG工程-基于LangChain 实现 Advanced RAG(预检索-查询优化)(下)
  • 前端HTML基础知识