首页 > 其他分享 >YOLOv9改进策略【Neck】| 使用CARAFE轻量级通用上采样算子

YOLOv9改进策略【Neck】| 使用CARAFE轻量级通用上采样算子

时间:2024-09-11 16:53:32浏览次数:10  
标签:models YOLOv9 CARAFE common RepNCSPELAN4 512 256 轻量级

一、本文介绍

本文记录的是利用CARAFE上采样对YOLOv9的颈部网络进行改进的方法研究YOLOv9采用传统的最近邻插值的方法,仅考虑子像素邻域,无法捕获密集预测任务所需的丰富语义信息,从而影响模型在密集预测任务中的性能。CARAFE通过在大感受野内聚合信息、能够实时适应实例特定内容且保持计算效率。

文章目录


二、CARAFE介绍

CARAFE内容感知的特征重新组合

CARAFE(Content - Aware ReAssembly of FEatures)是一种用于特征上采样的操作符,其设计原理和优势如下:

2.1、CARAFE原理

  • 总体框架CARAFE由两个关键组件组成,即核预测模块内容感知重组模块。给定大小为 C × H × W C×H×W C×H×W的特征图 x x x和上采样比例 σ \sigma σ(假设 σ \sigma σ是整数),CARAFE将产生大小为 C × σ H × σ W C×\sigma H×\sigma W C×σH×σW的新特征图 X ′ X' X′。
  • 核预测模块:负责以内容感知的方式生成重组核。每个源位置 x x x上对应 σ 2 \sigma^{2} σ2个目标位置 X ′ X' X′上,每个目标位置需要一个 k u p × k u p k_{u p}×k_{u p} kup​×kup​的重组核,因此该模块将输出大小为 C u p × H × W C_{u p}×H×W Cup​×H×W的重组核,其中 C u p = σ 2 k u p 2 C_{u p} = \sigma^{2}k_{u p}^{2} Cup​=σ2kup2​。该模块由三个子模块组成,分别是通道压缩器、内容编码器和核归一化器。
    • 通道压缩器:采用 1 × 1 1×1 1×1卷积层将输入特征通道从 C C C压缩到 C m C_{m} Cm​,减少特征图的通道数,从而减少后续步骤的参数和计算成本,使CARAFE更高效。
    • 内容编码器:使用核大小为 k e n c o d e r k_{encoder} kencoder​的卷积层根据输入特征的内容生成重组核,编码器的参数为 k e n c o d e r × k e n c o d e r × C m × C u p k_{encoder}×k_{encoder}×C_{m}×C_{u p} kencoder​×kencoder​×Cm​×Cup​。增大 k e n c o d e r k_{encoder} kencoder​可以扩大编码器的感受野,利用更大区域内的上下文信息,但计算复杂度也会随之增加。通过研究, k e n c o d e r = k u p − 2 k_{encoder} = k_{u p} - 2 kencoder​=kup​−2是性能和效率之间的良好平衡。
    • 核归一化器:在将每个 k u p × k u p k_{u p}×k_{u p} kup​×kup​重组核应用于输入特征图之前,使用softmax函数对其进行空间归一化,使核值之和为 1 1 1,这是对局部区域的软选择。
  • 内容感知重组模块:对于目标位置 l ′ l' l′和以 l = ( i , j ) l = (i, j) l=(i,j)为中心的相应方形区域 N ( X l , k u p ) N(X_{l}, k_{u p}) N(Xl​,kup​),重组过程如公式 X l ′ ′ = ∑ n = − r r ∑ m = − r r W l ′ ( n , m ) ⋅ X ( i + n , j + m ) \mathcal{X}_{l'}' = \sum_{n = -r}^{r}\sum_{m = -r}^{r}\mathcal{W}_{l'(n, m)}·\mathcal{X}_{(i + n, j + m)} Xl′′​=∑n=−rr​∑m=−rr​Wl′(n,m)​⋅X(i+n,j+m)​所示,其中 r = ⌊ k u p / 2 ⌋ r = \lfloor k_{u p} / 2\rfloor r=⌊kup​/2⌋。通过重组核,区域 N ( X l , k u p ) N(X_{l}, k_{u p}) N(Xl​,kup​)中的每个像素根据特征的内容而不是位置的距离对上采样像素 l ′ l' l′的贡献不同,使得重组后的特征图的语义比原始特征图更强。

在这里插入图片描述

2.2、优势

  • 大视野:与之前仅利用子像素邻域的工作不同,CARAFE可以在大感受野内聚合上下文信息。
  • 内容感知处理CARAFE能够根据实例特定的内容进行实时处理,为每个样本生成自适应的内核,而不是使用固定的内核。
  • 轻量且计算快速CARAFE引入的计算开销很小,可以很容易地集成到现代网络架构中。
  • 通用性和有效性:在对象检测、实例分割、语义分割、图像修复等广泛的密集预测任务中,CARAFE都能显著提升性能。

论文:https://arxiv.org/abs/1905.02188
源码:https://github.com/tiny-smart/dysample

三、CARAFE的实现代码

CARAFE模块的实现代码如下:

class CARAFE(nn.Module):
    def __init__(self, c, k_enc=3, k_up=5, c_mid=64, scale=2):
        """ The unofficial implementation of the CARAFE module.
        The details are in "https://arxiv.org/abs/1905.02188".
        Args:
            c: The channel number of the input and the output.
            c_mid: The channel number after compression.
            scale: The expected upsample scale.
            k_up: The size of the reassembly kernel.
            k_enc: The kernel size of the encoder.
        Returns:
            X: The upsampled feature map.
        """
        super(CARAFE, self).__init__()
        self.scale = scale
 
        self.comp = Conv(c, c_mid)
        self.enc = Conv(c_mid, (scale * k_up) ** 2, k=k_enc, act=False)
        self.pix_shf = nn.PixelShuffle(scale)
 
        self.upsmp = nn.Upsample(scale_factor=scale, mode='nearest')
        self.unfold = nn.Unfold(kernel_size=k_up, dilation=scale,
                                padding=k_up // 2 * scale)
 
    def forward(self, X):
        b, c, h, w = X.size()
        h_, w_ = h * self.scale, w * self.scale
 
        W = self.comp(X)  # b * m * h * w
        W = self.enc(W)  # b * 100 * h * w
        W = self.pix_shf(W)  # b * 25 * h_ * w_
        W = torch.softmax(W, dim=1)  # b * 25 * h_ * w_
 
        X = self.upsmp(X)  # b * c * h_ * w_
        X = self.unfold(X)  # b * 25c * h_ * w_
        X = X.view(b, c, -1, h_, w_)  # b * 25 * c * h_ * w_
 
        X = torch.einsum('bkhw,bckhw->bchw', [W, X])  # b * c * h_ * w_
        return X


四、添加步骤

4.1 修改common.py

此处需要修改的文件是models/common.py

common.py中定义了网络结构的通用模块,我们想要加入新的模块就只需要将模块代码放到这个文件内即可。

CARAFE模块添加后如下:

在这里插入图片描述

注意❗:在4.2小节中的yolo.py文件中需要声明的模块名称为:CARAFE

4.2 修改yolo.py

此处需要修改的文件是models/yolo.py

yolo.py用于函数调用,我们只需要将common.py中定义的新的模块名添加到parse_model函数下即可。

def parse_model(d, ch)中将CARAFE模块添加后如下:

在这里插入图片描述

elif m in [CARAFE]:
    args = [ch[f], *args[0:]]

五、yaml模型文件

5.1 模型改进

在代码配置完成后,配置模型的YAML文件。

此处以models/detect/yolov9-c.yaml为例,在同目录下创建一个用于自己数据集训练的模型文件yolov9-c-CARAFE.yaml

yolov9-c.yaml中的内容复制到yolov9-c-CARAFE.yaml文件下,修改nc数量等于自己数据中目标的数量。

标签:models,YOLOv9,CARAFE,common,RepNCSPELAN4,512,256,轻量级
From: https://blog.csdn.net/qq_42591591/article/details/141954092

相关文章

  • YOLOv9改进策略【Neck】| AIFI : 基于Transformer的尺度内特征交互,在降低计算成本的同
    一、本文介绍本文记录的是基于AIFI模块的YOLOv9目标检测改进方法研究。AIFI是RT-DETR中高效混合编码器的一部分,利用其改进YOLOv9模型,使网络在深层能够更好的捕捉到概念实体之间的联系,并有助于后续模块对对象进行定位和识别。文章目录一、本文介绍二、AIFI设计原理2.1、......
  • 超轻量级、支持插件的 .NET 网络通信框架
    ##超轻量级、支持插件的.NET网络通信框架在当今高度互联的世界中,高效、可靠的网络通信是构建各种应用程序的关键。无论是开发Web服务、实时通信应用,还是物联网设备,都需要一个强大且灵活的网络通信框架来支撑。然而,传统的网络通信框架往往过于臃肿,难以满足现代应用程序对性能和......
  • LLog:Spring轻量级请求日志监控组件,集成管理面板,支持多条件查询检索
    开源地址https://gitee.com/lboot/LLog简介LLog是基于AOP构建的请求日志记录和查询工具库,通过引入该工具库,完成配置,实现对接口请求日志的记录、查询检索等功能。请求状态、时间、来源、耗时,请求参数,响应结果,作用接口记录支持与鉴权服务结合,记录请求来源为用户ID通过注解......
  • Ubuntu系统一键部署轻量级博客VanBlog并实现无公网IP远程访问
    文章目录前言1.Linux本地部署2.VanBlog简单使用3.安装内网穿透4.创建公网地址5.创建固定公网地址前言今天和大家分享如何在LinuxUbuntu系统搭建一款轻量级个人博客VanBlog,并结合cpolar内网穿透软件生成公网地址,轻松实现随时随地远程访问本地部署的......
  • KernelWarehouse:英特尔开源轻量级涨点神器,动态卷积核突破100+ | ICML 20242A
    动态卷积学习n个静态卷积核的线性混合,加权使用它们输入相关的注意力,表现出比普通卷积更优越的性能。然而,它将卷积参数的数量增加了n倍,因此并不是参数高效的。这导致不能探索n>100的设置(比典型设置n<10大一个数量级),推动动态卷积性能边界提升的同时享受参数的高效性。为此,论文提出......
  • KernelWarehouse:英特尔开源轻量级涨点神器,动态卷积核突破100+ | ICML 2024
    动态卷积学习n个静态卷积核的线性混合,加权使用它们输入相关的注意力,表现出比普通卷积更优越的性能。然而,它将卷积参数的数量增加了n倍,因此并不是参数高效的。这导致不能探索n>100的设置(比典型设置n<10大一个数量级),推动动态卷积性能边界提升的同时享受参数的高效性。为此,论文提出......
  • 超轻量级、支持插件的 .NET 网络通信框架
    前言给大家推荐一个轻量级的、支持插件的综合网络通信库:TouchSocket。TouchSocket的基础通信功能包括TCP、UDP、SSL、RPC和HTTP。其中,HTTP服务器支持WebSocket、静态网页、XML-RPC、WebAPI和JSON-RPC等扩展插件。此外,TouchSocket还支持自定义协议的TouchRPC,具备SSL......
  • Android平台轻量级RTSP服务之GStreamer还是SmartRtspServer
    技术背景Android上启动一个轻量级RTSP服务,让Android终端像网络摄像头一样提供个外部可供RTSP拉流的服务,在内网小并发又不希望部署单独流媒体服务的场景下非常适用,在Android终端实现这样的流媒体服务,决定了,只能是轻量级的服务。可以通过集成第三方库或编写自定义的RTSP服务器代码来......
  • YOLOv9改进策略【注意力机制篇】| PSA极化自我关注: 实现高质量像素回归
    一、本文介绍本文记录的是基于PSA注意力模块的YOLOv9目标检测方法研究。PSA模块通过极化滤波和增强设计,提高了内部分辨率,并增强非线性拟合,从而能够提升像素级回归任务的性能。本文将其应用到YOLOv9的检测任务中,使模型能够更好地捕捉图像中的细节信息,以实现目标检测任务中准......
  • 828华为云征文|华为云Flexus X实例部署安装HivisionIDPhoto一个轻量级的AI证件照制作算
    背景最近有一个开源项目非常火,就是HivisionIDPhotos一个轻量级的AI证件照制作算法github仓库https://github.com/Zeyi-Lin/HivisionIDPhotos由于最近华为云最近正在举办B2B企业节,FlexusX实例的促销力度非常大。所以购买了一个FlexusX实例。4核12G。准备安装一个,试一......