一文读懂Depthwise卷积

本文详细介绍了Depthwise卷积的原理与计算开销,它只对每个通道进行一次卷积,降低了计算复杂度。此外,还探讨了DepthwiseSeparable卷积,它在Depthwise的基础上增加PointWise卷积以保持通道间信息交换。Depthwise卷积在移动端神经网络如ShuffleNet和EfficentNet中有广泛应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

视频来源:
https://www.bilibili.com/video/av67348232?from=search&seid=10221504884724623592

常规卷积

在这里插入图片描述
相信接触过卷积神经网络的都知道常规卷积的操作
我们通过N个DkDk大小的卷积核
卷积出来的结果
设为Dn
Dn*N
在这里插入图片描述
现在我们来计算一下常规卷积的计算开销
在这里插入图片描述
一个卷积核做一次卷积操作需要的开销为

												Dk*Dk*M

而每个卷积核完整地卷积完一次所需开销为

												Dg*Dg*Dk*Dk*M

这里我们假设卷积出来的结果长宽为Dg
然后我们使用了N个卷积核来进行卷积
所以总计算开销为

												N*Dg*Dg*Dk*Dk*M

DepthWise卷积

下面我们来看一下Depthwise卷积
常规的卷积中,每个卷积核都对每个通道进行了一次计算

### Depthwise 卷积的概念 Depthwise 卷积卷积神经网络中一种特殊的卷积方式,其主要特点是将输入通道分别独立处理。传统卷积会在多个输入通道上同时应用同一个卷积核并汇总结果;而 Depthwise 卷积则为每个输入通道分配单独的卷积核,在各自的空间维度上执行卷积操作[^1]。 这种设计减少了计算复杂度和模型参数数量,因为不再需要跨通道共享权重。具体来说,对于一个具有 \(C_i\) 输入通道的数据,Depthwise 卷积会使用 \(C_i\) 个不同的小卷积核(通常是3x3),每一个只作用于对应的单一输入通道[^2]。 ```python import tensorflow as tf depthwise_conv_layer = tf.keras.layers.DepthwiseConv2D( kernel_size=(3, 3), strides=(1, 1), padding='same', depth_multiplier=1, activation=None ) input_tensor = tf.random.normal([1, 28, 28, 64]) # 假设输入有64个通道 output_tensor = depthwise_conv_layer(input_tensor) print(output_tensor.shape) # 输出形状应保持不变,除了最后一个维度可能变化取决于depth_multiplier ``` ### 使用方法 在实际编程环境中实现 Depthwise 卷积相对简单。以上述代码为例展示了如何利用 TensorFlow 库创建一层 Depthwise 卷积层。这里的关键在于设置 `depth_multiplier` 参数,它决定了每个输入通道经过 Depthwise 卷积后的输出通道数倍增因子,默认值为1意味着每个输入通道对应一个输出通道。 ### Depthwise 卷积的作用与应用场景 Depthwise 卷积能够有效减少计算资源消耗的同时保留甚至提升性能表现。由于降低了参数总量以及浮点运算次数(FLOPs),这使得该技术特别适用于移动设备或其他硬件受限环境下的高效部署。此外,在一些视觉任务如目标检测、姿态估计等领域也有广泛应用,尤其是在 MobileNet 系列架构中作为核心组件之一被采用。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值