【YOLOv8改进 - 特征融合】 YOGA iAFF :注意力机制在颈部的多尺度特征融合

简介: 【YOLOv8改进 - 特征融合】 YOGA iAFF :注意力机制在颈部的多尺度特征融合

YOLOv8目标检测创新改进与实战案例专栏

专栏目录: YOLOv8有效改进系列及项目实战目录 包含卷积,主干 注意力,检测头等创新机制 以及 各种目标检测分割项目实战案例

专栏链接: YOLOv8基础解析+创新改进+实战案例

介绍

image-20240620102111648

摘要

我们推出 YOGA,这是一种基于深度学习的轻量级目标检测模型,可以在低端边缘设备上运行,同时仍能实现有竞争力的准确性。 YOGA 架构由一个具有廉价线性变换的两阶段特征学习管道组成,它仅使用传统卷积神经网络所需的一半卷积滤波器来学习特征图。此外,它使用注意力机制在颈部执行多尺度特征融合,而不是传统检测器使用的朴素串联。 YOGA 是一种灵活的模型,可以轻松地放大或缩小几个数量级,以适应广泛的硬件限制。我们使用 10 多个最先进的目标检测器在 COCO-val 和 COCO-testdev 数据集上评估 YOGA。结果表明,YOGA 在模型大小和精度之间取得了最佳权衡(AP 提高了 22%,参数和 FLOP 减少了 23-34%),使其成为低端野外部署的理想选择边缘设备。我们在 NVIDIA Jetson Nano 上的硬件实现和评估进一步证实了这一点。

文章链接

论文地址:论文地址

代码地址:代码地址

基本原理

YOGA是一种基于深度学习的轻量级目标检测模型,旨在在低端边缘设备上运行,同时实现竞争性的准确性。YOGA架构包括一个两阶段特征学习流水线,其中使用廉价的线性转换学习特征图,仅需传统卷积神经网络所需卷积滤波器数量的一半。此外,它在其"neck"部分使用了一种注意力机制进行多尺度特征融合,而不是传统检测器所使用的简单串联。YOGA是一个灵活的模型,可以轻松地按数量级适应各种硬件约束。我们在COCO-val和COCO-testdev数据集上评估了YOGA,并与其他10多种最先进的目标检测器进行了比较。结果显示,YOGA在模型大小和准确性之间取得了最佳平衡(AP提高了高达22%,参数和FLOPs减少了23-34%),使其成为在低端边缘设备上部署的理想选择。

  1. 轻量级设计:YOGA通过使用廉价的线性转换(group convolution)在整个网络中学习特征图,仅使用传统CNN所需卷积滤波器数量的一半,从而削减模型大小。
  2. 多尺度特征融合:YOGA在其"neck"部分使用了一种注意力机制进行多尺度特征融合,这种方法相比传统的简单串联更有效,有助于提高准确性。
  3. 灵活的可扩展性:YOGA可以根据不同的硬件约束轻松地进行扩展或缩减,适用于各种规模的应用场景。
  4. 实际硬件实现:YOGA已在NVIDIA Jetson Nano等低端深度学习设备上进行了实际实现和评估,证明其适用于边缘部署。

image-20240620102244159

核心代码


class iAFF(nn.Module):

    """
    implimenting iAFF module
    """

    def __init__(self, channels=64, r=4):
        super(iAFF, self).__init__()
        inter_channels = int(channels // r)

        self.local_attention1 = nn.Sequential(
            nn.Conv2d(channels, inter_channels, kernel_size=1, stride=1, padding=0),
            nn.BatchNorm2d(inter_channels),
        #    nn.ReLU(inplace=True),
                        nn.SiLU(),
            nn.Conv2d(inter_channels, channels, kernel_size=1, stride=1, padding=0),
            nn.BatchNorm2d(channels),
        )
        self.global_attention1 = nn.Sequential(
            nn.AdaptiveAvgPool2d(1),
            nn.Conv2d(channels, inter_channels, kernel_size=1, stride=1, padding=0),
            nn.BatchNorm2d(inter_channels),
        #    nn.ReLU(inplace=True),
                        nn.SiLU(),
            nn.Conv2d(inter_channels, channels, kernel_size=1, stride=1, padding=0),
            nn.BatchNorm2d(channels),
        )

        self.local_attention2 = nn.Sequential(
            nn.Conv2d(channels, inter_channels, kernel_size=1, stride=1, padding=0),
            nn.BatchNorm2d(inter_channels),
        #    nn.ReLU(inplace=True),
                        nn.SiLU(),
            nn.Conv2d(inter_channels, channels, kernel_size=1, stride=1, padding=0),
            nn.BatchNorm2d(channels),
        )
        self.global_attention2 = nn.Sequential(
            nn.AdaptiveAvgPool2d(1),
            nn.Conv2d(channels, inter_channels, kernel_size=1, stride=1, padding=0),
            nn.BatchNorm2d(inter_channels),
        #    nn.ReLU(inplace=True),
                        nn.SiLU(),
            nn.Conv2d(inter_channels, channels, kernel_size=1, stride=1, padding=0),
            nn.BatchNorm2d(channels),
        )

        self.sigmoid = nn.Sigmoid()


    def forward(self, input):
        """
        Implimenting the iAFF forward step
        """
        x = input[0]
        y = input[1]
        xa = x+y
        xl = self.local_attention1(xa)
        xg = self.global_attention1(xa)
        xlg = xl+xg
        m1 = self.sigmoid(xlg)
        xuniony = x * m1 + y * (1-m1)

        xl2 = self.local_attention2(xuniony)
        xg2 = self.global_attention2(xuniony)
        xlg2 = xl2 + xg2
        m2 = self.sigmoid(xlg2)
        z = x * m2 + y * (1-m2)
        return z

task与yaml配置

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

相关文章
|
机器学习/深度学习 计算机视觉 网络架构
改进YOLOv8:添加CBAM注意力机制(涨点明显)
改进YOLOv8:添加CBAM注意力机制(涨点明显)
9667 1
|
机器学习/深度学习 编解码 文件存储
YOLOv8改进 | 融合改进篇 | BiFPN+ RepViT(教你如何融合改进机制)
YOLOv8改进 | 融合改进篇 | BiFPN+ RepViT(教你如何融合改进机制)
1785 1
|
机器学习/深度学习 编解码 数据可视化
【即插即用】涨点神器AFF:注意力特征融合(已经开源,附论文和源码链接)
【即插即用】涨点神器AFF:注意力特征融合(已经开源,附论文和源码链接)
8930 1
|
机器学习/深度学习
YOLOv8改进 | 细节创新篇 | iAFF迭代注意力特征融合助力多目标细节涨点
YOLOv8改进 | 细节创新篇 | iAFF迭代注意力特征融合助力多目标细节涨点
1189 0
|
机器学习/深度学习 数据可视化 测试技术
YOLO11实战:新颖的多尺度卷积注意力(MSCA)加在网络不同位置的涨点情况 | 创新点如何在自己数据集上高效涨点,解决不涨点掉点等问题
本文探讨了创新点在自定义数据集上表现不稳定的问题,分析了不同数据集和网络位置对创新效果的影响。通过在YOLO11的不同位置引入MSCAAttention模块,展示了三种不同的改进方案及其效果。实验结果显示,改进方案在mAP50指标上分别提升了至0.788、0.792和0.775。建议多尝试不同配置,找到最适合特定数据集的解决方案。
4112 0
|
机器学习/深度学习 编解码 计算机视觉
YOLOv11改进策略【Head】| ASFF 自适应空间特征融合模块,改进检测头Detect_ASFF
YOLOv11改进策略【Head】| ASFF 自适应空间特征融合模块,改进检测头Detect_ASFF
2531 13
YOLOv11改进策略【Head】| ASFF 自适应空间特征融合模块,改进检测头Detect_ASFF
|
机器学习/深度学习 编解码 计算机视觉
YOLOv11改进策略【注意力机制篇】| Mixed Local Channel Attention (MLCA) 同时融合通道、空间、局部信息和全局信息的新型注意力
YOLOv11改进策略【注意力机制篇】| Mixed Local Channel Attention (MLCA) 同时融合通道、空间、局部信息和全局信息的新型注意力
983 1
YOLOv11改进策略【注意力机制篇】| Mixed Local Channel Attention (MLCA) 同时融合通道、空间、局部信息和全局信息的新型注意力
|
XML 机器学习/深度学习 数据格式
YOLOv8训练自己的数据集+常用传参说明
YOLOv8训练自己的数据集+常用传参说明
26769 3
|
机器学习/深度学习 编解码 算法
【YOLOv8改进 - 特征融合NECK】SDI:多层次特征融合模块,替换contact操作
YOLOv8专栏探讨了该目标检测算法的创新改进,包括新机制和实战案例。文章介绍了U-Net v2,一种用于医学图像分割的高效U-Net变体,它通过SDI模块融合语义和细节信息,提升分割准确性。SDI模块结合空间和通道注意力,经通道减缩、尺寸调整和平滑后,用哈达玛积融合特征。提供的核心代码展示了SDI模块的实现。更多详情和论文、代码链接见原文。
|
机器学习/深度学习 图计算 计算机视觉
【YOLOv8改进 - 注意力机制】 CascadedGroupAttention:级联组注意力,增强视觉Transformer中多头自注意力机制的效率和有效性
YOLO目标检测专栏探讨了Transformer在视觉任务中的效能与计算成本问题,提出EfficientViT,一种兼顾速度和准确性的模型。EfficientViT通过创新的Cascaded Group Attention(CGA)模块减少冗余,提高多样性,节省计算资源。在保持高精度的同时,与MobileNetV3-Large相比,EfficientViT在速度上有显著提升。论文和代码已公开。CGA通过特征分割和级联头部增加注意力多样性和模型容量,降低了计算负担。核心代码展示了CGA模块的实现。

热门文章

最新文章