卷积和可分卷积的效率对比

本文深入探讨了卷积和可分卷积在深度学习中的作用,包括2D和3D空间卷积。可分卷积通过拆分卷积核来减少计算量,例如将3×3卷积拆分为1×3和3×1的两个步骤,从而在保持效果的同时提高效率。这种技术在现代深度学习模型中被广泛应用以优化计算资源和提升性能。


文章概要

概要:这篇博文主要是介绍了在深度学习中使用广泛的卷积方法,其实说其为滤波(在信号处理领域,图像处理领域使用这个说法可能更多)也是不错的。文章介绍了:

  1. 卷积与互相关
  2. 深度学习中的卷积(单通道版本,多通道版本)
  3. 3D 卷积
  4. 1×1 卷积
  5. 卷积算术
  6. 转置卷积(去卷积、棋盘效应)
  7. 扩张卷积
  8. 可分卷积(空间可分卷积,深度可分卷积)
  9. 平展卷积
  10. 分组卷积
  11. 混洗分组卷积
  12. 逐点分组卷积

随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习中关于卷积的的基础内容。


提示:以下是本篇文章正文内容。

一、卷积的本质?

在信号处理、图像处理和其它工程/科学领域,卷积都是一种使用广泛的技术。在深度学习领域,卷积神经网络(CNN)这种模型架构就得名于这种技术。但是,深度学习领域的卷积本质上是信号/图像处理领域内的互相关(cross-correlation)。这两种操作之间存在细微的差别。

无需太过深入细节,我们就能看到这个差别。在信号/图像处理领域,卷积的定义是:

图片

其定义是两个函数中一个函数经过反转和位移后再相乘得到的积的积分。下面的可视化展示了这一思想:
在这里插入图片描述信号处理中的卷积。过滤器 g 经过反转,然后再沿水平轴滑动。在每一个位置,我们都计算 f 和反转后的 g 之间相交区域的面积。这个相交区域的面积就是特定位置出的卷积值。

这里,函数 g 是过滤器。它被反转后再沿水平轴滑动。在每一个位置,我们都计算 f 和反转后的 g 之间相交区域的面积。这个相交区域的面积就是特定位置出的卷积值。

二、卷积和可分卷积

1.空间卷积

卷积又可以分为2D空间卷积(二维平面空间的卷积)和3D空间卷积(三维空间卷积),其本质是一样,通俗来讲,就是都是根据周围数据计算,得出一个维度更小的数据(如果是得到维度更大的数据,则叫转置卷积):

1.1----2D空间卷积

如图所示:
在这里插入图片描述上图是用一个3 × \times × 3的卷积核(也可以叫模板),去对一个5 × \times

### 比较深度可分离卷积普通卷积网络的参数数量 #### 普通卷积的参数量计算 对于普通的二维卷积层,假设输入图像尺寸为 \( W \times H \),具有 \( C_{in} \) 个输入通道;输出特征图有 \( C_{out} \) 个输出通道;使用的卷积核大小为 \( K_w \times K_h \),则该卷积层的总参数量可以表示为: \[ 参数量 = K_w \cdot K_h \cdot C_{in} \cdot C_{out} + bias \] 其中,\( bias \) 表示偏置项的数量,默认情况下等于输出通道数 \( C_{out} \)[^4]。 #### 深度可分离卷积的参数量计算 深度可分离卷积由两部分组成:深度卷积(depthwise convolution)逐点卷积(pointwise convolution)。具体来说, - **深度卷积**仅作用于每个单独的输入通道上而不混合不同通道的信息。因此其参数量简化为: \[ 参数量_{depthwise} = K_w \cdot K_h \cdot C_{in} + bias \] 这里 \( bias \) 同样默认设置为输入通道数目 \( C_{in} \)[^1]。 - **逐点卷积**负责跨通道组合信息,采用 \( 1\times1 \) 的卷积核来调整维度。所以这部分的参数量为: \[ 参数量_{pointwise} = 1\cdot1\cdot C_{in}\cdot C_{out} + bias \] 最终整个深度可分离卷积层的参数总量就是上述两项之[^4]。 通过对比可以看出,在相同条件下,深度可分离卷积相比于传统卷积大幅减少了模型所需的训练参数,从而有助于降低过拟合风险并提高运算效率[^3]。 ```python def compare_conv_params(depth_kernel_size, input_channels, output_channels): """ 计算两种不同类型卷积层所需参数数量 Args: depth_kernel_size (tuple): 深度卷积核的高度宽度 input_channels (int): 输入张量的通道数 output_channels (int): 输出张量的目标通道数 Returns: tuple: 包含两个整数值,分别代表标准卷积深度可分卷的参数总数 """ # Standard Convolution Parameters Calculation std_conv_params = ( depth_kernel_size[0]*depth_kernel_size[1]*input_channels*output_channels + output_channels # Bias terms ) # Depthwise Separable Convolution Parameters Calculation dw_sep_conv_params = ( sum([ depth_kernel_size[0]*depth_kernel_size[1]*input_channels, input_channels * output_channels, output_channels # Biases for both convolutions combined ]) ) return std_conv_params, dw_sep_conv_params # Example usage with a common kernel size of 3x3 and assuming equal number of channels as an example scenario. example_result = compare_conv_params((3, 3), 64, 64) print(f"Standard Conv vs Depthwise Sep Conv params count:\n{example_result}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值