深度学习中卷积的计算复杂度与内存访问复杂度
深度学习中卷积的计算复杂度与内存访问复杂度
在深度学习中,普通卷积(Standard Convolution)、深度可分离卷积(Depthwise Separable Convolution, DWConv)和部分卷积(Partial Convolution, PConv)是常见的卷积操作。以下是它们的计算复杂度和内存访问复杂度的分析。
1. 普通卷积(Standard Convolution)
- 定义:标准卷积通过滑动窗口将输入特征图与权重核进行逐元素乘加操作。
- 符号定义:
- 输入特征图尺寸:
- 卷积核大小:
- 输出通道数:
- 假设步幅为1,填充使得输出特征图尺寸为
。
- 输入特征图尺寸:
- 计算复杂度:
- 每个输出像素需要对
个输入值进行乘加操作。
- 总共有
个输出像素。
- 每个输出像素需要对
- 内存访问复杂度:
- 权重访问次数:
(权重只加载一次)。
- 输入特征图访问次数:
(每个滑动窗口读取一次输入)。
- 输出特征图写入次数:
。
- 总内存访问次数:
2. 深度可分离卷积(Depthwise Separable Convolution, DWConv)
- 定义:DWConv分为两步:深度卷积(Depthwise Convolution)和逐点卷积(Pointwise Convolution)。
- 深度卷积:对每个输入通道独立应用卷积核。
- 逐点卷积:使用
卷积调整通道数。
- 符号定义:
- 深度卷积:输入特征图尺寸
,卷积核大小
,输出特征图尺寸
。
- 逐点卷积:输入特征图尺寸
,输出特征图尺寸
。
- 深度卷积:输入特征图尺寸
- 计算复杂度:
- 深度卷积:
- 逐点卷积:
- 总计算复杂度:
- 深度卷积:
- 内存访问复杂度:
- 深度卷积:
- 权重访问次数:
- 输入特征图访问次数:
- 输出特征图写入次数:
- 深度卷积的总内存访问次数:
- 权重访问次数:
- 逐点卷积:
- 权重访问次数:
- 输入特征图访问次数:
- 输出特征图写入次数:
- 逐点卷积的总内存访问次数:
- 权重访问次数:
- 总内存访问次数:
3. 部分卷积(Partial Convolution, PConv)
- 定义:PConv是一种只对部分通道进行正常卷积的方法,其他部分的通道进行恒等映射比进行任何操作。
- 符号定义:
- 输入特征图尺寸:
- 卷积核大小:
- 输出通道数:
- 假设其中进行正常卷积的操作的通道数为
- 输入特征图尺寸:
- 计算复杂度:
- 标准卷积计算量:
- 总计算复杂度:
- 标准卷积计算量:
- 内存访问复杂度:
- 权重访问次数:
- 输入特征图访问次数:
- 输出特征图写入次数:
- 总内存访问次数:
总结对比表
特性 | Standard Convolution | Depthwise Separable Convolution (DWConv) | Partial Convolution (PConv) |
计算复杂度 | | | |
内存访问复杂度 |
以上是对三种卷积操作的计算复杂度和内存访问复杂度的详细分析。
参考链接:神经网络参数量、计算量(FLOPS)、内存访问量(AMC)计算详解-CSDN博客