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

深度分离卷积

深度可分离卷积(Depthwise Separable Convolution)是一种高效的卷积操作,它将传统卷积操作分解为两个独立的步骤:深度卷积(Depthwise Convolution)逐点卷积(Pointwise Convolution),从而显著降低计算量和参数量。深度可分离卷积广泛应用于轻量级神经网络中,如 MobileNet、Xception 等。

深度可分离卷积分为两个步骤:

  1. Depthwise Convolution(深度卷积):

    • 对每个输入通道分别进行卷积操作,而不是像传统卷积那样,将所有输入通道和所有卷积核进行计算。
    • 每个输入通道仅使用一个卷积核来生成输出,不混合不同通道的信息。
    • 这一步减少了通道之间的交互和计算量。
  2. Pointwise Convolution(逐点卷积):

    • 使用 1x1 的卷积核对深度卷积的输出进行通道间的组合,通常用于调整通道数量。
    • 1x1 卷积有助于混合不同通道的信息,恢复特征的通道交互。

通过这种分解,深度可分离卷积与标准卷积相比,显著减少了计算成本和参数量

对比普通卷积与深度可分离卷积

1. 普通卷积的计算复杂度

对于一个大小为 D x D 的输入,C_in 输入通道和 C_out 输出通道的卷积操作,卷积核的大小为 K x K,其计算量为:

[
C_{\text{普通卷积}} = C_{in} \times C_{out} \times K \times K \times D \times D
]

2. 深度可分离卷积的计算复杂度

深度可分离卷积将计算分成两部分:

  • Depthwise Convolution 复杂度:
    [
    C_{\text{Depthwise}} = C_{in} \times K \times K \times D \times D
    ]

  • Pointwise Convolution 复杂度:
    [
    C_{\text{Pointwise}} = C_{in} \times C_{out} \times 1 \times 1 \times D \times D = C_{in} \times C_{out} \times D \times D
    ]

因此,深度可分离卷积的总计算量为:

[
C_{\text{深度可分离卷积}} = C_{in} \times K \times K \times D \times D + C_{in} \times C_{out} \times D \times D
]

与普通卷积相比,计算量减少了大约:

[
\frac{C_{\text{普通卷积}}}{C_{\text{深度可分离卷积}}} = \frac{C_{out}}{K^2 + C_{out}}
]

C_out 很大时,深度可分离卷积带来的计算节省非常明显。

代码实现

下面是使用 PyTorch 实现深度可分离卷积的示例:

import torch
import torch.nn as nn# 假设输入通道数为 3,输出通道数为 16,卷积核大小为 3x3
input_tensor = torch.randn(1, 3, 32, 32)  # (batch_size, channels, height, width)# 普通卷积
conv = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, padding=1)
output_conv = conv(input_tensor)# 深度可分离卷积
# 1. 深度卷积 (Depthwise Convolution)
depthwise_conv = nn.Conv2d(in_channels=3, out_channels=3, kernel_size=3, padding=1, groups=3)
output_depthwise = depthwise_conv(input_tensor)# 2. 逐点卷积 (Pointwise Convolution)
pointwise_conv = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=1)
output_pointwise = pointwise_conv(output_depthwise)print("普通卷积输出的形状:", output_conv.shape)
print("深度可分离卷积输出的形状:", output_pointwise.shape)

解释:

  1. Depthwise Convolution 中,groups 参数等于输入通道数,意味着每个输入通道独立与卷积核进行计算。
  2. Pointwise Convolution 中,使用 1x1 的卷积核,对深度卷积的输出进行逐点的通道组合。
  3. 计算量与参数量的显著减少:深度卷积与逐点卷积结合,能大幅降低计算复杂度和参数。

应用场景

  • MobileNet 系列模型大规模使用深度可分离卷积,以达到轻量化、适合移动设备部署的效果。
  • Xception 网络使用了极端深度可分离卷积的思想,进一步提升了卷积神经网络的效率。

总结

深度可分离卷积通过分解标准卷积,降低了计算量与参数量,是轻量级模型设计中的关键技术,特别适用于对计算资源要求较高的移动和嵌入式设备。

http://www.lryc.cn/news/457415.html

相关文章:

  • JSONL 文件的检查和修订器
  • 输电线路悬垂线夹检测无人机航拍图像数据集,总共1600左右图片,悬垂线夹识别,标注为voc格式
  • 杭电合集小tips
  • Python的输入输出函数
  • 如何进行搭建与部署云主机?
  • Biomamba求职| 国奖+4篇一作SCI
  • Python 工具库每日推荐 【Pandas】
  • 电影选票选座系统|影院购票|电影院订票选座小程序|基于微信小程序的电影院购票系统设计与实现(源码+数据库+文档)
  • matlab初学习记录
  • protobuf之Message
  • 【redis-06】redis的stream流实现消息中间件
  • 二、MySQL的数据目录
  • 2024.10月7~10日 进一步完善《电信资费管理系统》
  • vue2项目的路由使用history模式,刷新会导致页面404的问题
  • pytest框架之fixture测试夹具详解
  • 【浏览器】如何正确使用Microsoft Edge
  • 打印1000年到2000年之间的闰年
  • nn.Identity()
  • Java 快速排序
  • 51单片机的智能衣柜【proteus仿真+程序+报告+原理图+演示视频】
  • SAP_FI_表ACDOCA取代的表
  • 论文《OneLLM:One Framework to Align All Modalities with Language》
  • Ubuntu 22.04.4 LTS更换下载源
  • html嵌入百度地图
  • 【网络】详解TCP协议中的可靠传输
  • 【Python实例】Python读取并绘制nc数据
  • swift使用llama3.2-vision微调xray数据集
  • 学习小课堂
  • stm32学习笔记-RTC实时时钟
  • 简历中的期望薪资怎么定?