【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

相关文章
|
机器学习/深度学习 编解码 数据可视化
【即插即用】涨点神器AFF:注意力特征融合(已经开源,附论文和源码链接)
【即插即用】涨点神器AFF:注意力特征融合(已经开源,附论文和源码链接)
8584 1
|
机器学习/深度学习 编解码 文件存储
YOLOv8改进 | 融合改进篇 | BiFPN+ RepViT(教你如何融合改进机制)
YOLOv8改进 | 融合改进篇 | BiFPN+ RepViT(教你如何融合改进机制)
1674 1
|
机器学习/深度学习 计算机视觉 网络架构
改进YOLOv8:添加CBAM注意力机制(涨点明显)
改进YOLOv8:添加CBAM注意力机制(涨点明显)
8374 1
|
机器学习/深度学习
YOLOv8改进 | 细节创新篇 | iAFF迭代注意力特征融合助力多目标细节涨点
YOLOv8改进 | 细节创新篇 | iAFF迭代注意力特征融合助力多目标细节涨点
1068 0
|
机器学习/深度学习 数据可视化 测试技术
YOLO11实战:新颖的多尺度卷积注意力(MSCA)加在网络不同位置的涨点情况 | 创新点如何在自己数据集上高效涨点,解决不涨点掉点等问题
本文探讨了创新点在自定义数据集上表现不稳定的问题,分析了不同数据集和网络位置对创新效果的影响。通过在YOLO11的不同位置引入MSCAAttention模块,展示了三种不同的改进方案及其效果。实验结果显示,改进方案在mAP50指标上分别提升了至0.788、0.792和0.775。建议多尝试不同配置,找到最适合特定数据集的解决方案。
3572 0
|
机器学习/深度学习
YOLOv11改进策略【损失函数篇】| 替换激活函数为Mish、PReLU、Hardswish、LeakyReLU、ReLU6
YOLOv11改进策略【损失函数篇】| 替换激活函数为Mish、PReLU、Hardswish、LeakyReLU、ReLU6
2688 4
|
并行计算 数据挖掘 PyTorch
【YOLOv8改进 - 特征融合】DySample :超轻量级且高效的动态上采样器
【YOLOv8改进 - 特征融合】DySample :超轻量级且高效的动态上采样器
【YOLOv8改进 - 特征融合】DySample :超轻量级且高效的动态上采样器
|
机器学习/深度学习 编解码 算法
【YOLOv8改进 - 特征融合NECK】SDI:多层次特征融合模块,替换contact操作
YOLOv8专栏探讨了该目标检测算法的创新改进,包括新机制和实战案例。文章介绍了U-Net v2,一种用于医学图像分割的高效U-Net变体,它通过SDI模块融合语义和细节信息,提升分割准确性。SDI模块结合空间和通道注意力,经通道减缩、尺寸调整和平滑后,用哈达玛积融合特征。提供的核心代码展示了SDI模块的实现。更多详情和论文、代码链接见原文。
|
机器学习/深度学习 编解码 计算机视觉
【YOLOv8改进 - 特征融合NECK】 GIRAFFEDET之GFPN :广义特征金字塔网络,高效地融合多尺度特征
YOLOv8专栏探讨了目标检测的创新改进,提出了GiraffeDet,一种轻量级主干和深度颈部模块结合的高效检测网络。GiraffeDet使用S2D-chain和GFPN,优化多尺度信息交换,提升检测性能。代码和论文可在相关链接找到。GFPN通过跳跃和跨尺度连接增强信息融合。文章还展示了核心组件如SPPV4、Focus和CSPStage的代码实现。
|
机器学习/深度学习 编解码 自然语言处理
【YOLOv8改进 - 注意力机制】 MHSA:多头自注意力(Multi-Head Self-Attention)
YOLO目标检测专栏探讨了BoTNet,一种在ResNet瓶颈块中用全局自注意力替换卷积的架构,提升实例分割和检测性能。BoTNet表现优于先前的ResNeSt,且在ImageNet上速度更快。文章介绍了多头自注意力(MHSA)机制,用于学习输入的不同部分间的关系。BoTNet的MHSA层整合在低分辨率特征图中,以捕获长距离依赖。YOLOv8进一步引入MHSA,通过具体的模块定义(如提供的`MHSA`类)来增强模型的注意力机制。相关论文和代码链接可供参考。

热门文章

最新文章