【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

相关文章
|
7月前
|
机器学习/深度学习 自然语言处理 数据可视化
深度探索变分自编码器在无监督特征学习中的应用
【4月更文挑战第20天】 在深度学习领域,无监督学习一直是研究的热点问题之一。本文聚焦于一种前沿的生成模型——变分自编码器(Variational Autoencoder, VAE),探讨其在无监督特征学习中的关键作用与应用潜力。不同于传统的摘要形式,本文将直接深入VAE的核心机制,分析其如何通过引入随机隐变量和重参数化技巧,实现对复杂数据分布的有效建模。文章还将展示VAE在多个实际数据集上的应用结果,验证其作为无监督特征提取工具的有效性和普适性。通过理论与实践的结合,本文旨在为读者提供关于VAE在无监督特征学习领域的全面认识。
|
7月前
|
机器学习/深度学习
YOLOv8改进 | 2023注意力篇 | MLCA混合局部通道注意力(轻量化注意力机制)
YOLOv8改进 | 2023注意力篇 | MLCA混合局部通道注意力(轻量化注意力机制)
384 1
|
7月前
|
机器学习/深度学习 编解码 文件存储
YOLOv8改进 | 融合改进篇 | BiFPN+ RepViT(教你如何融合改进机制)
YOLOv8改进 | 融合改进篇 | BiFPN+ RepViT(教你如何融合改进机制)
888 1
|
7月前
|
机器学习/深度学习
YOLOv5改进 | 2023注意力篇 | MLCA混合局部通道注意力(轻量化注意力机制)
YOLOv5改进 | 2023注意力篇 | MLCA混合局部通道注意力(轻量化注意力机制)
450 0
|
1月前
|
机器学习/深度学习 计算机视觉 网络架构
【YOLO11改进 - C3k2融合】C3k2DWRSeg二次创新C3k2_DWR:扩张式残差分割网络,提高特征提取效率和多尺度信息获取能力,助力小目标检测
【YOLO11改进 - C3k2融合】C3k2DWRSeg二次创新C3k2_DWR:扩张式残差分割网络,提高特征提取效率和多尺度信息获取能力,助力小目DWRSeg是一种高效的实时语义分割网络,通过将多尺度特征提取分为区域残差化和语义残差化两步,提高了特征提取效率。它引入了Dilation-wise Residual (DWR) 和 Simple Inverted Residual (SIR) 模块,优化了不同网络阶段的感受野。在Cityscapes和CamVid数据集上的实验表明,DWRSeg在准确性和推理速度之间取得了最佳平衡,达到了72.7%的mIoU,每秒319.5帧。代码和模型已公开。
【YOLO11改进 - C3k2融合】C3k2DWRSeg二次创新C3k2_DWR:扩张式残差分割网络,提高特征提取效率和多尺度信息获取能力,助力小目标检测
|
5月前
|
编解码 Go 文件存储
【YOLOv8改进 - 特征融合NECK】 DAMO-YOLO之RepGFPN :实时目标检测的创新型特征金字塔网络
【YOLOv8改进 - 特征融合NECK】 DAMO-YOLO之RepGFPN :实时目标检测的创新型特征金字塔网络
|
5月前
|
计算机视觉 网络架构
【YOLOv10改进-特征融合】YOLO-MS MSBlock : 分层特征融合策略
YOLOv10专栏介绍了YOLO-MS,一个优化多尺度目标检测的高效框架。YOLO-MS通过MS-Block和异构Kernel选择提升性能,平衡了计算复杂度与准确性。它在不依赖预训练的情况下,在COCO上超越同类模型,如YOLO-v7和RTMDet。MS-Block包含不同大小卷积的分支,用于增强特征表示。代码示例展示了MSBlock类的定义,用于处理不同尺度特征。该模块可应用于其他YOLO模型以提升性能。更多详情和配置参见相关链接。
|
7月前
|
编解码 算法 计算机视觉
YOLO特征融合的原理是怎样的?
YOLO特征融合的原理是怎样的?
|
5月前
|
机器学习/深度学习 编解码 计算机视觉
【YOLOv8改进 - 特征融合NECK】 GIRAFFEDET之GFPN :广义特征金字塔网络,高效地融合多尺度特征
YOLOv8专栏探讨了目标检测的创新改进,提出了GiraffeDet,一种轻量级主干和深度颈部模块结合的高效检测网络。GiraffeDet使用S2D-chain和GFPN,优化多尺度信息交换,提升检测性能。代码和论文可在相关链接找到。GFPN通过跳跃和跨尺度连接增强信息融合。文章还展示了核心组件如SPPV4、Focus和CSPStage的代码实现。
|
5月前
|
计算机视觉 网络架构
【YOLOv8改进 - 卷积Conv】DWRSeg:扩张式残差分割网络,提高特征提取效率和多尺度信息获取能力,助力小目标检测
YOLO目标检测专栏探讨了YOLO的创新改进,如多尺度特征提取的DWRSeg网络。该网络通过区域残差化和语义残差化提升效率,使用DWR和SIR模块优化高层和低层特征。DWRSeg在Cityscapes和CamVid数据集上表现优秀,速度与准确性兼备。论文和代码已公开。核心代码展示了一个包含DWR模块的卷积层。更多配置详情见相关链接。