IEEE | DSConv: Efficient Convolution Operator

论文标题 :DSConv: Efficient Convolution Operator

论文链接https://arxiv.org/abs/1901.01928v2

发表时间 :2019年11月


创新点

实现更低的内存使用,并且加快了计算速度


概要

引入了一种称为 DSConv(分布移位卷积)的卷积层变体

它可以很容易地替换到标准神经网络架构中,并实现更低的内存使用和更高的计算速度

DSConv 将传统的卷积核分解为两个组件:

  1. 可变量化核 (VQK)
  2. 分布偏移

通过在 VQK 中仅存储整数值来实现更低的内存使用和更高的速度

同时通过应用基于内核和通道的分布偏移来保留与原始卷积相同的输出

在 ResNet50 和 ResNet34 以及 AlexNet 和 MobileNet 上测试 ImageNet 中的 DSConv

通过将浮点运算替换为定点运算

将卷积核中的内存使用量减少了 14 倍,并将运算速度提高了 10 倍


方法

DSConv 的总体目标是通过使用量化和分布偏移来模拟卷积层的行为

在这里插入图片描述
DSConv 的设置如上图所示

原始卷积张量的大小为 (cho, chi, k, k),其中 cho 是下一层的通道数,chi 是当前层中的通道,k是内核的宽度和高度

DSConv 分为两个不同的组件:

在这里插入图片描述

  1. 可变量化内核 (VQK)

此张量将仅保存可变位长整数值,并且它具有与原始卷积张量相同的大小 (cho, chi, k, k)

参数值设置为从原始浮点模型量化,一旦设置就不能改变

这是 DSConv 的量化组件,它将允许执行更快且内存有效的乘法

  1. Distribution Shifts

这个组件的目的是改变 VQK 的分布以试图模仿原始卷积核的分布

通过使用两个张量在两个域中移动来做到这一点

“移位”是指缩放和偏置操作

第一个张量是 K e r n e l D i s t r i b u t i o n S h i f t e r ( K D S ) Kernel Distribution Shifter (KDS) KernelDistributionShifter(KDS),它移动 VQK 的每个 ( 1 , B L K , 1 , 1 ) (1, BLK, 1, 1) (1,BLK,1,1) 切片中的分布,其中 BLK 是块大小的超参数

这个想法是内核移位器的每个值都用于移位 VQK 的 BLK 深度值的值

那么这个张量的大小是 2 ∗ ( c h o , C E I L ( c h i / B L K ) , k , k ) 2* (cho, CEIL( chi/BLK ), k, k) 2(cho,CEIL(chi/BLK),k,k)

其中 CEIL(x) 是向上舍入运算符,它保存单精度值

第二个张量是 C h a n n e l D i s t r i b u t i o n S h i f t e r ( C D S ) Channel Distribution Shifter (CDS) ChannelDistributionShifter(CDS),它移动每个通道中的分布

换句话说,它改变了每个 ( 1 , c h i , k , k ) (1, chi, k, k) (1,chi,k,k) 切片中的分布

自然,这是一个大小为 2 ∗ ( c h o ) 2*(cho) 2(cho) 的单精度数张量


实验
在这里插入图片描述


总结

原论文中还有,量化程序、分配转变和优化推理等步骤,但是如果个人使用,可直接使用 DSConv 来替代传统卷积

DSConv 较于传统 Conv 的优势在于计算速度快,占用内存更少

DSConv(深度可分离卷积)模块是深度学习中一种重要的卷积结构,主要用于优化卷积神经网络的计算效率和参数数量。其核心思想是将标准卷积操作分解为两个独立的步骤:深度卷积(Depthwise Convolution)和逐点卷积(Pointwise Convolution)。这种分解方式显著减少了计算量和参数数量,使得模型更适合部署在资源受限的设备上。 ### DSConv模块的机制 深度卷积(Depthwise Convolution)是对输入的每个通道分别进行卷积操作,而逐点卷积(Pointwise Convolution)则通过1×1的卷积核对深度卷积的输出进行通道间的组合。这种设计在保持特征提取能力的同时,显著降低了模型的计算复杂度[^1]。 ### DSConv模块的学术研究 DSConv模块的提出与优化是轻量化卷积神经网络研究的重要方向之一。许多研究工作基于DSConv改进模型设计,例如: 1. **MobileNet** 系列模型:Google 提出的 MobileNetV1 和 MobileNetV2 都广泛采用了 DSConv 模块,以实现高效的特征提取。 2. **Xception** 模型:Xception 是对 Inception 模块的扩展,其核心思想是使用深度可分离卷积替代标准卷积,从而提升模型效率。 3. **EfficientNet** 系列模型:EfficientNet 结合了神经网络架构搜索(NAS)和 DSConv 模块,进一步优化了模型的性能与计算成本之间的平衡[^2]。 ### DSConv模块在实际应用中的表现 DSConv模块在多个实际应用中表现出色,特别是在资源受限的场景下。例如: - **LS-YOLO 模型**:在滑坡检测任务中,通过引入空间可分离卷积(类似于 DSConv 的结构),显著提升了模型的多尺度特征提取能力[^4]。 - **轻量化目标检测算法**:许多轻量化目标检测算法依赖于 DSConv 模块来减少参数数量和计算复杂度,同时保持较高的检测精度[^2]。 ### DSConv模块的改进研究 近年来,许多研究工作对 DSConv 模块进行了改进。例如: - **深度可分离卷积与注意力机制结合**:一些研究将 DSConv 与通道注意力机制结合,以增强模型对重要特征的关注能力。 - **多尺度特征提取模块**:在遥感图像处理中,DSConv 被用于构建多尺度特征提取模块,以适应不同尺度的目标检测需求[^4]。 如果需要查找 DSConv 模块相关的学术论文,可以通过以下关键词进行搜索: - **"Depthwise Separable Convolution"** - **"Efficient Convolutional Neural Networks"** - **"Lightweight CNN Architectures"** ### 示例代码 以下是一个使用 PyTorch 实现 DSConv 模块的示例代码: ```python import torch import torch.nn as nn class DSConv(nn.Module): def __init__(self, in_channels, out_channels, kernel_size, stride=1, padding=0): super(DSConv, self).__init__() # 深度卷积 self.depthwise = nn.Conv2d(in_channels, in_channels, kernel_size, stride, padding, groups=in_channels) # 逐点卷积 self.pointwise = nn.Conv2d(in_channels, out_channels, 1, 1, 0) def forward(self, x): x = self.depthwise(x) x = self.pointwise(x) return x # 示例:创建一个 DSConv 模块 dsconv = DSConv(in_channels=64, out_channels=128, kernel_size=3, stride=1, padding=1) input_tensor = torch.randn(1, 64, 32, 32) output_tensor = dsconv(input_tensor) print(output_tensor.shape) # 输出: torch.Size([1, 128, 32, 32]) ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鹏AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值