【YOLOv8改进】 ParameterNet:DynamicConv(Dynamic Convolution):2024最新动态卷积

简介: **摘要**ParameterNet是新提出的框架,旨在让低FLOPs模型也能受益于大规模视觉预训练,通过动态卷积在增加参数量的同时控制计算量。动态卷积利用条件生成的卷积核增强模型适应性。在ImageNet上,ParameterNet-600M在准确性上超过Swin Transformer,且FLOPs更低。该方法也被拓展至语言领域,提升LLaMA模型性能。代码可在<https://parameternet.github.io/>获取。

摘要

大规模视觉预训练显著提高了大型视觉模型的性能。然而,我们观察到现有的低FLOPs模型无法从大规模预训练中受益。在本文中,我们引入了一种新的设计原则,称为ParameterNet,旨在在大规模视觉预训练模型中增加参数数量的同时,将FLOPs的增加最小化。我们利用动态卷积在网络中引入额外参数,而FLOPs的增加仅为微量。ParameterNet方法使低FLOPs网络能够利用大规模视觉预训练。此外,我们将ParameterNet概念扩展到语言领域,以在保持推理速度的同时增强推理结果。在大规模ImageNet-22K数据集上的实验表明了ParameterNet方案的优越性。例如,ParameterNet-600M在ImageNet上的准确率比广泛使用的Swin Transformer更高(81.6% vs. 80.9%),且其FLOPs更低(0.6G vs. 4.5G)。在语言领域,增强了ParameterNet的LLaMA-1B比原始LLaMA提高了2%的准确率。代码将发布在 https://parameternet.github.io/。

文章链接

论文地址:论文地址

代码地址:代码地址

基本原理

动态卷积

动态卷积(Dynamic Convolution)是一种卷积操作的变体,旨在增强卷积神经网络(CNN)的表达能力和适应性。与传统的静态卷积不同,动态卷积通过生成一组动态变化的卷积核来处理输入数据。这些卷积核在每次前向传播时都根据输入数据或特定的条件进行调整,从而使网络能够更好地适应不同的输入特征。

具体来说,动态卷积有以下几个特点:

  1. 条件生成卷积核:卷积核的权重不再是固定的,而是根据输入特征生成的。通常会使用一个辅助网络(如一个小型的MLP)来生成这些卷积核。

  2. 自适应性强:由于卷积核是根据每个输入数据生成的,这使得动态卷积能够更好地捕捉不同输入之间的差异,增强模型的表达能力和泛化能力。

  3. 计算效率:尽管动态卷积引入了额外的计算量,但通过适当的设计,这些额外的计算开销通常是可以接受的,特别是在考虑其带来的性能提升时。

  4. 应用场景广泛:动态卷积已经在多个任务中展示了其有效性,包括图像分类、目标检测、语义分割等。

动态卷积的一种典型实现方式如下:

  • 首先,对输入特征进行处理,生成一组用于卷积的权重。
  • 然后,使用这些动态生成的权重进行卷积操作,从而得到输出特征。

例如,在图像分类任务中,动态卷积可以通过根据输入图像的特征动态生成卷积核,从而使模型在处理不同类型的图像时更具适应性和鲁棒性。

ParameterNet

本文提出了一种名为ParameterNet的方案,旨在解决低FLOPs陷阱(low FLOPs pitfall)问题。其设计原则是在增加模型参数数量的同时,尽量保持低FLOPs特性。本文主要探讨了一种高效的方法,即动态卷积(Dynamic Convolution),它能够在几乎不增加额外FLOPs的情况下增加参数数量。

设输入特征为 $X \in \mathbb{R}^{C{\text{in}} \times H \times W}$,权重特征为 $W \in \mathbb{R}^{C{\text{out}} \times C_{\text{in}} \times K \times K}$,卷积操作可以表示为:

$$ Y = X * W $$

其中,$Y \in \mathbb{R}^{C_{\text{out}} \times H' \times W'}$ 是输出特征。

具有 $M$ 个动态专家的动态卷积操作可以表示为:
$$ Y = X * W' $$

$$ Y = \sum_{i=1}^{M} \alpha_i (X * W_i) $$

其中,$Wi \in \mathbb{R}^{C{\text{out}} \times C_{\text{in}} \times K \times K}$ 是第 $i$ 个动态卷积核的参数,$\alpha_i$ 是对应的动态超参数,随不同的输入而动态生成。典型的生成策略如下:对于输入 $X$,应用全局平均池化将信息融合到一个向量中,然后使用具有softmax激活的两层MLP模块动态生成系数 $\alpha$。

$$ \alpha = \text{softmax}(\text{MLP}(\text{GAP}(X))) $$

其中,$\alpha \in \mathbb{R}^M$。

复杂度分析

计算动态卷积和普通卷积的参数量之比:

$$ \begin{aligned} R_{param}& =\frac{C_{in}^2+C_{in}M+M\cdot C_{out}\cdot C_{in}\cdot K\cdot K}{C_{out}\cdot C_{in}\cdot K\cdot K} \\ &=\frac{C_{in}}{C_{out}\cdot K\cdot K}+\frac M{C_{out}\cdot K\cdot K}+M \\ &\approx\frac{1}{K^{2}}+M.\quad(M<

计算动态卷积和普通卷积的FLOPs之比:
$$ \begin{aligned} R_{flops}& =\frac{C_{in}^2+C_{in}M+M\cdot C_{out}\cdot C_{in}\cdot K\cdot K+H^{\prime}\cdot W^{\prime}\cdot C_{out}\cdot C_{in}\cdot K\cdot K}{H^{\prime}\cdot W^{\prime}\cdot C_{out}\cdot C_{in}\cdot K\cdot K} \\ &=\frac{C_{in}}{H^{\prime}\cdot W^{\prime}\cdot C_{out}\cdot K\cdot K}+\frac M{H^{\prime}\cdot W^{\prime}\cdot C_{out}\cdot K\cdot K}+\frac M{H^{\prime}\cdot W^{\prime}}+1 \\ &\approx1.\quad(1

可以看到,动态卷积和普通卷积的参数量之比为 $M$,而其FLOPs基本一致。这表明,每个动态卷积的参数量大约为常规卷积的 $M$ 倍,且计算量的增加可以忽略不计。

yolov8 代码引入

class DynamicConv(nn.Module):
    """动态卷积层,使用条件卷积(CondConv2d)实现。"""
    def __init__(self, in_features, out_features, kernel_size=1, stride=1, padding='', dilation=1,
                 groups=1, bias=False, num_experts=4):
        """
        初始化动态卷积层。
        参数:
        in_features : 输入特征通道数
        out_features : 输出特征通道数
        kernel_size : 卷积核大小
        stride : 步长
        padding : 填充
        dilation : 膨胀系数
        groups : 组数
        bias : 是否使用偏置
        num_experts : 专家数量(用于CondConv2d)
        """
        super().__init__()
        # 路由层,用于计算每个专家的权重
        self.routing = nn.Linear(in_features, num_experts)
        # 条件卷积层,实现动态卷积
        self.cond_conv = CondConv2d(in_features, out_features, kernel_size, stride, padding, dilation,
                                    groups, bias, num_experts)

    def forward(self, x):
        """前向传播函数,实现动态路由和条件卷积的应用。"""
        # 先对输入进行全局平均池化,并展平
        pooled_inputs = F.adaptive_avg_pool2d(x, 1).flatten(1)
        # 计算路由权重
        routing_weights = torch.sigmoid(self.routing(pooled_inputs))
        # 应用条件卷积
        x = self.cond_conv(x, routing_weights)
        return x

task与yaml配置

详见:https://blog.csdn.net/shangyanaf/article/details/139395420

相关文章
|
机器学习/深度学习 PyTorch Go
YOLOv5的Tricks | 【Trick4】参数重结构化(融合Conv+BatchNorm2d)
这篇文章是想要记录yolov5在模型搭建过程中的一个融合模块,就是把卷积与批归一化的参数进行融合,想卷积带有批归一化的性质,使得推理过程中可以加快模型推理速度,简化整个模型结构,实现训练与推理两个阶段的解耦。
930 0
YOLOv5的Tricks | 【Trick4】参数重结构化(融合Conv+BatchNorm2d)
|
6月前
|
机器学习/深度学习 并行计算 算法
YOLOv8改进 | 卷积篇 |手把手教你添加动态蛇形卷积(Dynamic Snake Convolution)
YOLOv8改进 | 卷积篇 |手把手教你添加动态蛇形卷积(Dynamic Snake Convolution)
671 0
|
15天前
|
机器学习/深度学习 计算机视觉 Python
【YOLOv11改进 - 注意力机制】EMA(Efficient Multi-Scale Attention):基于跨空间学习的高效多尺度注意力
【YOLOv11改进 - 注意力机制】EMA(Efficient Multi-Scale Attention):基于跨空间学习的高效多尺度注意力.EMA(Efficient Multi-Scale Attention)模块是一种高效多尺度注意力机制,旨在提高计算机视觉任务中的特征表示效果。该模块通过结合通道和空间信息、采用多尺度并行子网络结构以及优化坐标注意力机制,实现了更高效和有效的特征表示。EMA模块在图像分类和目标检测任务中表现出色,使用CIFAR-100、ImageNet-1k、MS COCO和VisDrone2019等数据集进行了广泛测试。
【YOLOv11改进 - 注意力机制】EMA(Efficient Multi-Scale Attention):基于跨空间学习的高效多尺度注意力
|
5月前
|
存储 机器学习/深度学习 计算机视觉
【YOLOv8改进-卷积Conv】 OREPA(Online Convolutional Re-parameterization):在线卷积重参数化
**OREPA**是在线卷积重参数化的缩写,它提出了一种两阶段流程来减少深度模型训练的开销。该方法通过线性缩放层优化复杂训练块,并在训练完成后将其压缩为单个卷积层,降低内存使用和提高训练速度。与现有技术相比,OREPA能减少约70%的训练内存开销,提升2倍训练速度,并在ImageNet上提高最多0.6%的准确性。此外,它还在目标检测和语义分割任务中表现出色。论文和代码可在提供的链接中找到。
|
5月前
|
机器学习/深度学习 计算机视觉 网络架构
【YOLOv8改进-卷积Conv】DualConv( Dual Convolutional):用于轻量级深度神经网络的双卷积核
**摘要:** 我们提出DualConv,一种融合$3\times3$和$1\times1$卷积的轻量级DNN技术,适用于资源有限的系统。它通过组卷积结合两种卷积核,减少计算和参数量,同时增强准确性。在MobileNetV2上,参数减少54%,CIFAR-100精度仅降0.68%。在YOLOv3中,DualConv提升检测速度并增4.4%的PASCAL VOC准确性。论文及代码已开源。
|
机器学习/深度学习 PyTorch 算法框架/工具
空间金字塔池化(Spatial Pyramid Pooling, SPP)原理和代码实现(Pytorch)
想直接看公式的可跳至第三节 3.公式修正 一、为什么需要SPP 首先需要知道为什么会需要SPP。 我们都知道卷积神经网络(CNN)由卷积层和全连接层组成,其中卷积层对于输入数据的大小并没有要求,唯一对数据大小有要求的则是第一个全连接层,因此基本上所有的CNN都要求输入数据固定大小,例如著名的VGG模型则要求输入数据大小是 (224*224) 。
2197 0
|
5月前
|
机器学习/深度学习 计算机视觉 知识图谱
【YOLOv8改进】ACmix(Mixed Self-Attention and Convolution) (论文笔记+引入代码)
YOLO目标检测专栏探讨了YOLO的改进,包括卷积和自注意力机制的创新结合。研究发现两者在计算上存在关联,卷积可分解为1×1卷积,自注意力也可视为1×1卷积的变形。由此提出ACmix模型,它整合两种范式,降低计算开销,同时提升图像识别和下游任务的性能。ACmix优化了移位操作,采用模块化设计,实现两种技术优势的高效融合。代码和预训练模型可在相关GitHub和MindSpore模型库找到。 yolov8中引入了ACmix模块,详细配置参见指定链接。
|
5月前
|
测试技术 计算机视觉
【YOLOv8改进】LSKA(Large Separable Kernel Attention):大核分离卷积注意力模块 (论文笔记+引入代码)
YOLO目标检测专栏介绍了大可分卷积核注意力模块LSKA,用于解决VAN中大卷积核效率问题。LSKA通过分解2D卷积为1D卷积降低计算复杂度和内存占用,且使模型关注形状而非纹理,提高鲁棒性。在多种任务和数据集上,LSKA表现优于ViTs和ConvNeXt,代码可在GitHub获取。基础原理包括LSKA的卷积核分解设计和计算效率优化。示例展示了LSKA模块的实现。更多详情及配置参见相关链接。
|
5月前
|
机器学习/深度学习 计算机视觉
【YOLOv8改进】EMA(Efficient Multi-Scale Attention):基于跨空间学习的高效多尺度注意力 (论文笔记+引入代码)
YOLO目标检测专栏介绍了创新的多尺度注意力模块EMA,它强化通道和空间信息处理,同时降低计算负担。EMA模块通过通道重塑和并行子网络优化特征表示,增强长距离依赖建模,在保持效率的同时提升模型性能。适用于图像分类和目标检测任务,尤其在YOLOv8中表现出色。代码实现和详细配置可在文中链接找到。
|
6月前
|
机器学习/深度学习 人工智能 监控
论文介绍:Masked-attention Mask Transformer (Mask2Former)——通用图像分割的新架构
【5月更文挑战第24天】Mask2Former,一种新型的图像分割架构,采用遮蔽注意力机制聚焦局部特征,提升模型收敛速度和性能,在COCO、Cityscapes等数据集上刷新记录。其元架构结合背景特征提取器、像素解码器和Transformer解码器,实现高效训练和性能提升。尽管在处理小对象和泛化能力上仍有局限,但Mask2Former为通用图像分割开辟了新路径。[链接](https://arxiv.org/abs/2112.01527)
245 5