不怕YOLOv10高歌猛进,我有YOLOv8稳扎稳打

YOLOv10 出来有几天时间了,这次我没有选择第一时间出文章解析,如此频繁的发布数字版本的 YOLO 着实让人头疼,虽然数字的更新并非旧版技术的过时, 但是这肯定会让很多在校同学增加很多焦虑情绪。这里还是请大家辩证看待。

v10 这次的改动不是很多,甚至很多新手同学都觉得没改动什么。网络结构上改动确实不多,主要贡献还是 NMS free,这个点并不体现在模型的 yaml 文件里,所以只看 yaml 也看不出什么,从效果角度讲 v10 就是比 v8 强,这是没法狡辩的。

值得注意的是 v10 用的依然是 yolov8 的框架,也就是说到目前为止,YOLOv5/v7/v9 都是一个框架,YOLOv8/v10 是一个框架,并且这两套框架都是 ultralytics 团队在维护的,这也验证了前几年(22年)我写的一段文字,一个好的基线框架是至关重要的,一个超级活跃的开源项目也是可遇不可求的,它带给你的帮助是无法估量的。

那这意味什么呢,你 v5/v7/v9 会玩一个就代表三个全会,v8/v10 会玩一个就代表两个全会;并且我们可以无脑将 v10 的改进点放到 v8 里,所以大家不必纠结 v8 旧于 v10 ,以后的任何数字版本 yolo ,对你们来说不过是一个改进点而已。

如何选择一个合适的基线?

  1. 从硬件性能角度考虑
    即考虑自己的硬件条件,本身是否具备训练一个大模型的硬件环境,比如显卡性能或者显存很小,那么就无法训练参数量过大的模型。
  2. 从训练成本角度考虑
    即考虑自身的资金成本或者时间成本,如果实验室没有GPU,那么就要使用云平台,通常实验都会有几十次,所以资金成本很大,这时可以考虑使用参数量较小的基线,这样训练时间快,对硬件的要求也没有那么高。
  3. 从评价指标角度考虑
    我们通常在发论文时都会加上一个应用场景,加场景的作用就是满足实际的使用,我们知道理想情况下,模型的精度和参数量是成正比的,假如满足实际使用要求的mAP值是0.9,YOLOv5s的mAP只有0.6,那么无论你怎样优化,模型也很难达到要求,所以这时候就要考虑使用一个更大的基线,比如5L\X等。
  4. 从代码开源角度考虑
    现在开源工作做得很好,有时候我们自己忙了一个月编写的代码甚至不如GitHub上一个开源的项目,所以在选择优化算法时要考虑自身的代码水平,即这个算法的有没有开源的源代码,这个代码是否清清晰易读,是否方便改进。

为什么我总是推荐大家用 yolov8 呢,因为这个框架真的真的很好用,对小白也很友好,不管是论文还是工作,这个框架我认为真的值得学习。

目前这个框架支持 分类、检测、分割、关键点、开集目标检测、未来会加入深度估计等任务,学会了对自己帮助很大。

下面简单回顾下论文,并且对 v10 的三个模块加到 v8 做个简单教程。


论文回顾


下面快速回顾下原始论文,这是我借助 Ai Drive 总结的,基本就是这些东西,如果对模块效果感兴趣请大家直接看论文的消融实验。

引言

在过去的几年中,YOLO系列(You Only Look Once)模型凭借其在计算成本和检测性能之间的卓越平衡,已经成为实时目标检测领域的主流。近日,由清华大学团队提出的最新论文《YOLOv10: Real-Time End-to-End Object Detection》进一步推进了YOLO模型的性能与效率边界。本文将详细介绍这篇论文的创新点、主要贡献及其实验结果。

论文背景

YOLO模型的检测管道主要包括模型前向过程和非极大值抑制(NMS)后处理。然而,NMS的依赖使得YOLO模型在端到端部署中存在一定的效率瓶颈。此外,YOLO模型各组件的设计也缺乏全面细致的优化,导致计算冗余明显,限制了模型的性能提升。

主要贡献

这篇论文针对以上问题,提出了两个关键创新点:一致的双重分配策略和整体效率-准确性驱动的模型设计策略。

  1. 一致的双重分配策略

    • 双标签分配:传统的YOLO模型在训练时通常采用一对多的标签分配策略,这虽然能带来丰富的监督信号,但也需要在推理时依赖NMS。为解决这一问题,论文提出了一种双标签分配策略,通过同时采用一对多和一对一的标签分配,既保证了训练时的丰富监督信号,又消除了推理时对NMS的依赖。
    • 一致匹配度量:通过采用统一的匹配度量,优化一对一分配头和一对多分配头,使两者能够一致和谐地进行优化,从而在推理时提供更高质量的样本。
  2. 整体效率-准确性驱动的模型设计策略

    • 轻量级分类头:通过简化分类头的架构,减少计算开销,同时不显著影响性能。
    • 空间通道解耦下采样:提出了一种新的下采样方法,先进行通道维度的变换,然后进行空间维度的下采样,最大程度地保留信息。
    • 秩引导块设计:通过分析各阶段的内在秩,提出紧凑倒置块结构(CIB),并采用秩引导的块分配策略,以适应不同阶段的冗余情况,从而提高模型的效率。
  3. 大核卷积和部分自注意力模块(PSA)

    • 大核卷积:在深层阶段采用大核卷积,扩大感受野,增强模型能力。
    • 部分自注意力模块:通过将特征分为两部分,仅对一部分应用多头自注意力机制(MHSA),在提升模型性能的同时降低计算复杂度。

实验结果

论文通过在COCO数据集上的大量实验,验证了YOLOv10在各个模型规模上的优越性能和效率:

  • 高效的参数利用:YOLOv10-L和YOLOv10-X分别比YOLOv8-L和YOLOv8-X减少1.8倍和2.3倍的参数,同时在相同或更好的性能下实现了更低的延迟。
  • 先进的性能和延迟权衡:YOLOv10在标准目标检测基准上显著优于以前的最先进模型。例如,YOLOv10-S比RT-DETR-R18快1.8倍,参数和FLOPs减少2.8倍。

代码改动

如果将 v10 全部的改动合并到 v8 的主分支,大概到 14python 文件和 6yaml 文件,详细的代码大家直接看这个 PR 就行了,https://github.com/ultralytics/ultralytics/pull/13113/files

由于我对大家比较了解,就不给大家展示怎么改这 14 个文件了,用 Ultralytics 框架的同学等待官方合并就好了。咱们直接改除 NMS free 外的其他贡献点,有三个模块,大家自行拆解使用 :

  1. 空间通道解耦下采样 SCDown
  2. 紧凑倒置块结构 CIB
  3. 大核卷积和部分自注意力模块 PSA

第一步

ultralytics/ultralytics/nn/modules/block.py 添加如下代码:

python 复制代码
from ultralytics.utils.torch_utils import fuse_conv_and_bn


class RepVGGDW(torch.nn.Module):
    """RepVGGDW is a class that represents a depth wise separable convolutional block in RepVGG architecture."""

    def __init__(self, ed) -> None:
        super().__init__()
        self.conv = Conv(ed, ed, 7, 1, 3, g=ed, act=False)
        self.conv1 = Conv(ed, ed, 3, 1, 1, g=ed, act=False)
        self.dim = ed
        self.act = nn.SiLU()

    def forward(self, x):
        """
        Performs a forward pass of the RepVGGDW block.
        Args:
            x (torch.Tensor): Input tensor.
        Returns:
            (torch.Tensor): Output tensor after applying the depth wise separable convolution.
        """
        return self.act(self.conv(x) + self.conv1(x))

    def forward_fuse(self, x):
        """
        Performs a forward pass of the RepVGGDW block without fusing the convolutions.
        Args:
            x (torch.Tensor): Input tensor.
        Returns:
            (torch.Tensor): Output tensor after applying the depth wise separable convolution.
        """
        return self.act(self.conv(x))

    @torch.no_grad()
    def fuse(self):
        """
        Fuses the convolutional layers in the RepVGGDW block.
        This method fuses the convolutional layers and updates the weights and biases accordingly.
        """
        conv = fuse_conv_and_bn(self.conv.conv, self.conv.bn)
        conv1 = fuse_conv_and_bn(self.conv1.conv, self.conv1.bn)

        conv_w = conv.weight
        conv_b = conv.bias
        conv1_w = conv1.weight
        conv1_b = conv1.bias

        conv1_w = torch.nn.functional.pad(conv1_w, [2, 2, 2, 2])

        final_conv_w = conv_w + conv1_w
        final_conv_b = conv_b + conv1_b

        conv.weight.data.copy_(final_conv_w)
        conv.bias.data.copy_(final_conv_b)

        self.conv = conv
        del self.conv1


class CIB(nn.Module):
    """
    Conditional Identity Block (CIB) module.
    Args:
        c1 (int): Number of input channels.
        c2 (int): Number of output channels.
        shortcut (bool, optional): Whether to add a shortcut connection. Defaults to True.
        e (float, optional): Scaling factor for the hidden channels. Defaults to 0.5.
        lk (bool, optional): Whether to use RepVGGDW for the third convolutional layer. Defaults to False.
    """

    def __init__(self, c1, c2, shortcut=True, e=0.5, lk=False):
        super().__init__()
        c_ = int(c2 * e)  # hidden channels
        self.cv1 = nn.Sequential(
            Conv(c1, c1, 3, g=c1),
            Conv(c1, 2 * c_, 1),
            Conv(2 * c_, 2 * c_, 3, g=2 * c_) if not lk else RepVGGDW(2 * c_),
            Conv(2 * c_, c2, 1),
            Conv(c2, c2, 3, g=c2),
        )

        self.add = shortcut and c1 == c2

    def forward(self, x):
        """
        Forward pass of the CIB module.
        Args:
            x (torch.Tensor): Input tensor.
        Returns:
            (torch.Tensor): Output tensor.
        """
        return x + self.cv1(x) if self.add else self.cv1(x)


class C2fCIB(C2f):
    """
    C2fCIB class represents a convolutional block with C2f and CIB modules.
    Args:
        c1 (int): Number of input channels.
        c2 (int): Number of output channels.
        n (int, optional): Number of CIB modules to stack. Defaults to 1.
        shortcut (bool, optional): Whether to use shortcut connection. Defaults to False.
        lk (bool, optional): Whether to use local key connection. Defaults to False.
        g (int, optional): Number of groups for grouped convolution. Defaults to 1.
        e (float, optional): Expansion ratio for CIB modules. Defaults to 0.5.
    """

    def __init__(self, c1, c2, n=1, shortcut=False, lk=False, g=1, e=0.5):
        super().__init__(c1, c2, n, shortcut, g, e)
        self.m = nn.ModuleList(CIB(self.c, self.c, shortcut, e=1.0, lk=lk) for _ in range(n))


class Attention(nn.Module):
    """
    Attention module that performs self-attention on the input tensor.
    Args:
        dim (int): The input tensor dimension.
        num_heads (int): The number of attention heads.
        attn_ratio (float): The ratio of the attention key dimension to the head dimension.
    Attributes:
        num_heads (int): The number of attention heads.
        head_dim (int): The dimension of each attention head.
        key_dim (int): The dimension of the attention key.
        scale (float): The scaling factor for the attention scores.
        qkv (Conv): Convolutional layer for computing the query, key, and value.
        proj (Conv): Convolutional layer for projecting the attended values.
        pe (Conv): Convolutional layer for positional encoding.
    """

    def __init__(self, dim, num_heads=8, attn_ratio=0.5):
        super().__init__()
        self.num_heads = num_heads
        self.head_dim = dim // num_heads
        self.key_dim = int(self.head_dim * attn_ratio)
        self.scale = self.key_dim**-0.5
        nh_kd = nh_kd = self.key_dim * num_heads
        h = dim + nh_kd * 2
        self.qkv = Conv(dim, h, 1, act=False)
        self.proj = Conv(dim, dim, 1, act=False)
        self.pe = Conv(dim, dim, 3, 1, g=dim, act=False)

    def forward(self, x):
        """
        Forward pass of the Attention module.
        Args:
            x (torch.Tensor): The input tensor.
        Returns:
            (torch.Tensor): The output tensor after self-attention.
        """
        B, _, H, W = x.shape
        N = H * W
        qkv = self.qkv(x)
        q, k, v = qkv.view(B, self.num_heads, -1, N).split([self.key_dim, self.key_dim, self.head_dim], dim=2)

        attn = (q.transpose(-2, -1) @ k) * self.scale
        attn = attn.softmax(dim=-1)
        x = (v @ attn.transpose(-2, -1)).view(B, -1, H, W) + self.pe(v.reshape(B, -1, H, W))
        x = self.proj(x)
        return x


class PSA(nn.Module):
    """
    Position-wise Spatial Attention module.
    Args:
        c1 (int): Number of input channels.
        c2 (int): Number of output channels.
        e (float): Expansion factor for the intermediate channels. Default is 0.5.
    Attributes:
        c (int): Number of intermediate channels.
        cv1 (Conv): 1x1 convolution layer to reduce the number of input channels to 2*c.
        cv2 (Conv): 1x1 convolution layer to reduce the number of output channels to c.
        attn (Attention): Attention module for spatial attention.
        ffn (nn.Sequential): Feed-forward network module.
    """

    def __init__(self, c1, c2, e=0.5):
        super().__init__()
        assert c1 == c2
        self.c = int(c1 * e)
        self.cv1 = Conv(c1, 2 * self.c, 1, 1)
        self.cv2 = Conv(2 * self.c, c1, 1)

        self.attn = Attention(self.c, attn_ratio=0.5, num_heads=self.c // 64)
        self.ffn = nn.Sequential(Conv(self.c, self.c * 2, 1), Conv(self.c * 2, self.c, 1, act=False))

    def forward(self, x):
        """
        Forward pass of the PSA module.
        Args:
            x (torch.Tensor): Input tensor.
        Returns:
            (torch.Tensor): Output tensor.
        """
        a, b = self.cv1(x).split((self.c, self.c), dim=1)
        b = b + self.attn(b)
        b = b + self.ffn(b)
        return self.cv2(torch.cat((a, b), 1))


class SCDown(nn.Module):
    def __init__(self, c1, c2, k, s):
        """
        Spatial Channel Downsample (SCDown) module.
        Args:
            c1 (int): Number of input channels.
            c2 (int): Number of output channels.
            k (int): Kernel size for the convolutional layer.
            s (int): Stride for the convolutional layer.
        """
        super().__init__()
        self.cv1 = Conv(c1, c2, 1, 1)
        self.cv2 = Conv(c2, c2, k=k, s=s, g=c2, act=False)

    def forward(self, x):
        """
        Forward pass of the SCDown module.
        Args:
            x (torch.Tensor): Input tensor.
        Returns:
            (torch.Tensor): Output tensor after applying the SCDown module.
        """
        return self.cv2(self.cv1(x))

第二步

ultralytics/ultralytics/nn/modules/block.py 添加如下代码:

python 复制代码
    "RepVGGDW",
    "CIB",
    "C2fCIB",
    "Attention",
    "PSA",
    "SCDown",

第三步

ultralytics/ultralytics/nn/tasks.py 导包, 添加模块

python 复制代码
    RepVGGDW,
    CIB,
    C2fCIB,
    Attention,
    PSA,
    SCDown,
python 复制代码
                if isinstance(m, RepVGGDW):
                    m.fuse()
                    m.forward = m.forward_fuse
python 复制代码
PSA, SCDown, C2fCIB
python 复制代码
C2fCIB

第四步

更换 yaml ,开始训练,注意不同尺寸不是简单的调整深度宽度!

yolov10n.yaml

yaml 复制代码
# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv10 object detection model. For Usage examples see https://docs.ultralytics.com/tasks/detect

# Parameters
nc: 80 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'
  # [depth, width, max_channels]
  n: [0.33, 0.25, 1024] 

backbone:
  # [from, repeats, module, args]
  - [-1, 1, Conv, [64, 3, 2]] # 0-P1/2
  - [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
  - [-1, 3, C2f, [128, True]]
  - [-1, 1, Conv, [256, 3, 2]] # 3-P3/8
  - [-1, 6, C2f, [256, True]]
  - [-1, 1, SCDown, [512, 3, 2]] # 5-P4/16
  - [-1, 6, C2f, [512, True]]
  - [-1, 1, SCDown, [1024, 3, 2]] # 7-P5/32
  - [-1, 3, C2f, [1024, True]]
  - [-1, 1, SPPF, [1024, 5]] # 9
  - [-1, 1, PSA, [1024]] # 10

# YOLOv8.0n head
head:
  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
  - [[-1, 6], 1, Concat, [1]] # cat backbone P4
  - [-1, 3, C2f, [512]] # 13

  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
  - [[-1, 4], 1, Concat, [1]] # cat backbone P3
  - [-1, 3, C2f, [256]] # 16 (P3/8-small)

  - [-1, 1, Conv, [256, 3, 2]]
  - [[-1, 13], 1, Concat, [1]] # cat head P4
  - [-1, 3, C2f, [512]] # 19 (P4/16-medium)

  - [-1, 1, SCDown, [512, 3, 2]]
  - [[-1, 10], 1, Concat, [1]] # cat head P5
  - [-1, 3, C2fCIB, [1024, True, True]] # 22 (P5/32-large)

  - [[16, 19, 22], 1, Detect, [nc]] # Detect(P3, P4, P5)

yolov10b.yaml

yaml 复制代码
# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv10 object detection model. For Usage examples see https://docs.ultralytics.com/tasks/detect

# Parameters
nc: 80 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'
  # [depth, width, max_channels]
  b: [0.67, 1.00, 512] 

backbone:
  # [from, repeats, module, args]
  - [-1, 1, Conv, [64, 3, 2]] # 0-P1/2
  - [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
  - [-1, 3, C2f, [128, True]]
  - [-1, 1, Conv, [256, 3, 2]] # 3-P3/8
  - [-1, 6, C2f, [256, True]]
  - [-1, 1, SCDown, [512, 3, 2]] # 5-P4/16
  - [-1, 6, C2f, [512, True]]
  - [-1, 1, SCDown, [1024, 3, 2]] # 7-P5/32
  - [-1, 3, C2fCIB, [1024, True]]
  - [-1, 1, SPPF, [1024, 5]] # 9
  - [-1, 1, PSA, [1024]] # 10

# YOLOv8.0n head
head:
  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
  - [[-1, 6], 1, Concat, [1]] # cat backbone P4
  - [-1, 3, C2fCIB, [512, True]] # 13

  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
  - [[-1, 4], 1, Concat, [1]] # cat backbone P3
  - [-1, 3, C2f, [256]] # 16 (P3/8-small)

  - [-1, 1, Conv, [256, 3, 2]]
  - [[-1, 13], 1, Concat, [1]] # cat head P4
  - [-1, 3, C2fCIB, [512, True]] # 19 (P4/16-medium)

  - [-1, 1, SCDown, [512, 3, 2]]
  - [[-1, 10], 1, Concat, [1]] # cat head P5
  - [-1, 3, C2fCIB, [1024, True]] # 22 (P5/32-large)

  - [[16, 19, 22], 1, Detect, [nc]] # Detect(P3, P4, P5)

yolov10s.yaml

yaml 复制代码
# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv10 object detection model. For Usage examples see https://docs.ultralytics.com/tasks/detect

# Parameters
nc: 80 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'
  # [depth, width, max_channels]
  s: [0.33, 0.50, 1024]

backbone:
  # [from, repeats, module, args]
  - [-1, 1, Conv, [64, 3, 2]] # 0-P1/2
  - [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
  - [-1, 3, C2f, [128, True]]
  - [-1, 1, Conv, [256, 3, 2]] # 3-P3/8
  - [-1, 6, C2f, [256, True]]
  - [-1, 1, SCDown, [512, 3, 2]] # 5-P4/16
  - [-1, 6, C2f, [512, True]]
  - [-1, 1, SCDown, [1024, 3, 2]] # 7-P5/32
  - [-1, 3, C2fCIB, [1024, True, True]]
  - [-1, 1, SPPF, [1024, 5]] # 9
  - [-1, 1, PSA, [1024]] # 10

# YOLOv8.0n head
head:
  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
  - [[-1, 6], 1, Concat, [1]] # cat backbone P4
  - [-1, 3, C2f, [512]] # 13

  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
  - [[-1, 4], 1, Concat, [1]] # cat backbone P3
  - [-1, 3, C2f, [256]] # 16 (P3/8-small)

  - [-1, 1, Conv, [256, 3, 2]]
  - [[-1, 13], 1, Concat, [1]] # cat head P4
  - [-1, 3, C2f, [512]] # 19 (P4/16-medium)

  - [-1, 1, SCDown, [512, 3, 2]]
  - [[-1, 10], 1, Concat, [1]] # cat head P5
  - [-1, 3, C2fCIB, [1024, True, True]] # 22 (P5/32-large)

  - [[16, 19, 22], 1, Detect, [nc]] # Detect(P3, P4, P5)

相关推荐

想了解 YOLOv8 其他改进的同学欢迎订阅我的专栏~

🎀基础入门篇🎀

  1. 从零开始学习目标检测:YOLO算法详解
  2. YOLOv8原理解析:重新定义实时目标检测的速度和精度🌟
  3. 小白安装环境教程!没一个字废话,看一遍不踩坑!
  4. 使用YOLOv8训练自己的目标检测数据集-【收集数据集】-【标注数据集】-【划分数据集】-【配置训练环境】-【训练模型】-【评估模型】-【导出模型】🚀
  5. YOLOv8 训练自己的【分割数据集】
  6. 【强烈推荐🚀】基础入门篇 | YOLOv8 项目【训练】【验证】【推理】最简单教程 | 打印FPS在这里!!🚀
  7. 【全网首发🥇】万字长文,YOLOv8 yaml 文件解析 | 一文搞定 YOLOv8 分类任务,检测任务,分割任务,关键点任务🍀🍀🍀
  8. 【哔哩哔哩】云服务器训练教程视频
  9. YOLO-Magic 系列框架介绍 【订阅必读】

🍀官方项目最新更新动态及其它优化教程🍀

  1. 关于 YOLOv8 modules.py 拆分成了 init.py block.py conv.py head.py trasnformer.py utils.py
  2. 【关键Bug解析🤖】YOLOv8 Bug 及解决方案汇总 【环境安装】【训练 & 断点续训】【KeyError】
  3. 【便利性优化👾】YOLOv8 标签透明度调节 | 标签文字大小调节 | 框粗细调节
  4. YOLOv5/v6/v7/v8/RT-DETR 对比试验的一些想法🍀

💡主干网络篇💡

  1. 使用 Timm 库替换 YOLOv8 主干网络 | 1000+ 主干融合YOLOv8 🚀🚀🚀

  2. 【2023🏅】YOLOv8 更换主干网络之 FasterNet | 《Ran, Don't Walk: 追求更高 FLOPS 的快速神经网络》

  3. 【2023🏅】YOLOv8 更换主干网络之 VanillaNet |《华为方舟实验室最新成果》新增多个尺寸🍀

  4. 【2023🏅】YOLOv8 更换主干网络之 HGNetV2 |《RTDETR主干网络》

  5. YOLOv8 更换骨干网络之 SwinTransformer | 《基于位移窗口的层次化视觉变换器》

  6. YOLOv8 更换主干网络之 GhostNetV2 | 《GhostNetV2:利用长距离注意力增强廉价操作》

  7. YOLOv8 更换主干网络之 PP-LCNet | 《PP-LCNet: 一种轻量级CPU卷积神经网络》

  8. YOLOv8 更换主干网络之 MobileNeXt |《重新思考瓶颈结构以实现高效移动网络设计》

  9. YOLOv8 更换主干网络之 ShuffleNetv2 | 《ShuffleNet v2:高效卷积神经网络架构设计的实用指南》

  10. YOLOv8 更换主干网络之 EfficientNet | 《EfficientNet:重新思考卷积神经网络的模型缩放》

  11. YOLOv8 更换骨干网络之 MobileNetV3 | 《搜寻 MobileNetV3》

  12. YOLOv8 更换骨干网络之 GhostNet | 《从廉价操作中获取更多特征》

  13. YOLOv8 更换主干网络之 ConvNext | 《纯卷积结构超越 ViTs》

  14. YOLOv8 更换主干网络之 MobileViT |《轻巧、通用、便于移动的视觉转换器》

  15. YOLOv8 更换骨干网络之 ResNet50/ResNet101 | 原论文一比一复现

  16. 【双主干】YOLOv8 如何实现多主干特征融合方式 | GhostNet+ShuffleNet / SwinTransformer+ShuffleNet🚀🚀🚀


🚀即插即用篇🚀

  1. 手把手教你 YOLOv8 添加注意力机制 | 适用于【检测/分类/分割/关键点任务】【包含20+种注意力代码及教程】🚀
  2. 在 C2F 模块中添加【SE】 【CBAM】【 ECA 】【CA 】注意力机制 | 附详细结构图
  3. 在 C2F 模块中添加【SimAM】 【CoTAttention】【SKAttention】【Double】注意力机制 | 附详细结构图
  4. 在 C2F 模块中添加【EffectiveSE】【GlobalContext】【GatherExcite】【MHSA】注意力机制 | 附详细结构图
  5. 在 C2F 模块中添加【Triplet】【SpatialGroupEnhance】【NAM】【S2】注意力机制 | 附详细结构图
  6. 在 C2F 模块中添加【ParNet】【CrissCross】【GAM】【ParallelPolarized】【Sequential】注意力机制 | 附详细结构图
  7. 即插即用篇 | YOLOv8 引入 SimAM 注意力机制 | 《SimAM: A Simple, Parameter-Free Attention Module for Convolutional》
  8. 即插即用篇 | YOLOv8 引入 Contextual Trans 注意力机制 | 《Contextual Transformer Networks for Visual Recognition》
  9. 即插即用篇 | YOLOv8 引入 SKAttention 注意力机制 | 《Selective Kernel Networks》
  10. 即插即用篇 | YOLOv8 引入 DoubleAttention 注意力机制 | 《A2-Nets: Double Attention Networks》
  11. 即插即用篇 | YOLOv8 引入 EffectiveSE 注意力机制 | 《CenterMask : Real-Time Anchor-Free Instance Segmentation》
  12. 即插即用篇 | YOLOv8 引入 GlobalContext 注意力机制 | 《GCNet: Non-local Networks Meet Squeeze-Excitation Networks》
  13. 即插即用篇 | YOLOv8 引入 GatherExcite 注意力机制 | 《Gather-Excite: Exploiting Feature Context in Convolutional》
  14. 即插即用篇 | YOLOv8 引入 MHSA 注意力机制 | 《Bottleneck Transformers for Visual Recognition》
  15. 即插即用篇 | YOLOv8 引入 Triplet 注意力机制 | 《Rotate to Attend: Convolutional Triplet Attention Module》
  16. 即插即用篇 | YOLOv8 引入 SpatialGroupEnhance 注意力机制 | 《Improving Semantic Feature Learning in Convolutional》
  17. 即插即用篇 | YOLOv8 引入 NAM 注意力机制 | 《NAM: Normalization-based Attention Module》
  18. 即插即用篇 | YOLOv8 引入 S2 注意力机制 | 《S^2-MLPV2: IMPROVED SPATIAL-SHIFT MLP ARCHITECTURE FOR VISION》
  19. 即插即用篇 | YOLOv8 引入 ParNetAttention 注意力机制 | 《NON-DEEP NETWORKS》
  20. 即插即用篇 | YOLOv8 引入 轴向注意力 Axial Attention | 多维变换器中的轴向注意力🍀

  1. 【2023🏅】YOLOv8 引入最新注意力BiFormer | 《BiFormer:视觉变换器与双层路由注意力》

  2. 【CVPR🏅】YOLOv8 引入 RepVGG 重参数化模块 |《RepVGG:让VGG风格的卷积神经网络再次伟大》

  3. 【小目标🤏】用于低分辨率图像和小物体的新 CNN 模块SPD-Conv | 《一种适用于低分辨率图像和小物体的新卷积模块》

  4. 【2023🏅】 YOLOv8 引入具备跨空间学习的高效多尺度注意力 《Efficient Multi-Scale Attention》

  5. 【2023🏅】 YOLOv8 引入选择性注意力 LSK 模块 | 《ICCV Large Selective Kernel Network》

  6. 【2023🏅】YOLOv8 引入空间通道重组卷积 | 《CVPR 2023 Spatial and Channel Reconstruction Convolution》

  7. 【2023🏅】YOLOv8 引入Dynamic Snake Convolution | 动态蛇形卷积

  8. 【2023🏅】YOLOv8 引入基于注意力机制的尺度内特征交互 | Attention-based Intra-scale Feature Interaction (AIFI)

  9. 【2023🏅】YOLOv8 引入反向残差注意力模块 iRMB | 《ICCV 2023 最新论文》

  10. 【2023🏅】YOLOv8 引入Super Token Sampling ViT | 《CVPR 2023 最新论文》

  11. 【2023🏅】YOLOv8 引入 RFAConv:创新空间注意力和标准卷积操作 | YOLO全系列涨点!

  12. 【2023🏅】YOLOv8 引入 AKConv:具有任意采样形状和任意参数数量的卷积核

  13. 【2023🏅】UniRepLKNet:用于音视频、点云、时间序列和图像识别的通用感知大卷积神经网络 | DRepConv

  14. 【2023🏅】超越自注意力:面向医学图像分割的可变形大卷积核注意力

  15. 【2023🏅】即插即用篇 | YOLOv8 引入 SENetv2 | 多套版本配合使用

  16. 【2023🏅】即插即用篇 | EfficientViT:用于高分辨率密集预测的多尺度线性注意力 | ICCV 2023

  17. 【2023🏅】即插即用篇 | YOLOv8引入Haar小波下采样 | 一种简单而有效的语义分割下采样模块

  18. 【AICV🏅】即插即用篇 | YOLOv8引入PSAModule | 高效金字塔压缩注意力模块🍀

  19. 【CVPR🏅】即插即用篇 | YOLOv8引入局部自注意力 HaloAttention | 为参数高效的视觉主干网络扩展局部自注意力🍀

  20. 【CVPR🏅】即插即用篇 | YOLOv8 引入 Strip Pooling | 重新思考场景解析的空间池化🍀

  21. 【ICCV🏅】即插即用篇 | YOLOv8 引入多光谱通道注意力 | 频率领域中的通道注意力网络


💖特征融合篇💖

  1. YOLOv8 应用轻量级通用上采样算子CARAFE | 《特征的内容感知重组》
  2. YOLOv8 应用全维动态卷积 |《 OMNI-DIMENSIONAL DYNAMIC CONVOLUTION》
  3. YOLOv8 应用 BiFPN 结构 | 《 EfficientDet: 可扩展和高效的目标检测》
  4. YOLOv8 应用Slim-Neck,更好的Neck设计范式 | 《Slim-Neck by GSConv:自动驾驶车辆检测器架构的更好设计范式》
  5. 【2023🏅】YOLOv8 引入中心化特征金字塔 EVC 模块 | 《Centralized Feature Pyramid for Object Detection》
  6. 【2023🏅】YOLOv8 引入渐进特征金字塔网络 AFPN 结构 | 《2023年6月28见刊的最新文章》🚀🚀🚀
  7. 【2023🏅】BGF-YOLO | 增强版YOLOV8 | 用于脑瘤检测的多尺度注意力特征融合
  8. 【2023🏅】YOLOv8 引入长颈特征融合网络 Giraffe FPN
  9. 【2023🏅】YOLO-MS: 重新思考实时目标检测的多尺度表示学习
  10. 【2024🏅】YOLOv8 引入通用高效层聚合网络 GELAN | YOLOv9新模块
  11. 【2024🏅】特征融合篇 | YOLOv8 (ultralytics) 实现 YOLOv9 辅助可逆分支架构【试读🚀🚀】
  12. 【双主干】【2024🏅】特征融合篇 | 结合内容引导注意力 DEA-Net 思想 实现双主干特征融合新方法 | IEEE TIP 2024
  13. 【2023🏅】特征融合篇 | YOLOv8 引入动态上采样模块 | 超过了其他上采样器

😎调参篇😎

  1. 【全网首发🥇】YOLOv8超参数调优教程! 使用Ray Tune进行高效的超参数调优!
  2. 【全网首发🥇】YOLOv8实现【K折交叉验证】教程:解决数据集样本稀少和类别不平衡的难题🍀🍀🍀

🌈损失函数篇🌈

  1. YOLOv8 更换损失函数之 CIoU / DIoU / EIoU / GIoU / SIoU / WIoU / Focal_xIoU 最全汇总版
  2. 【2023🏅】损失函数篇 | YOLOv8 更换损失函数之 MPDIoU
  3. 【2023🏅】损失函数篇 | YOLOv8 引入 Shape-IoU 考虑边框形状与尺度的度量
  4. 【2023🏅】损失函数篇 | YOLOv8 引入 Inner-IoU 基于辅助边框的IoU损失

💻算法联调篇💻

  1. 【小目标🤏】YOLOv8 结合切片辅助超推理算法 | 这才叫让小目标无处遁形!
  2. 【算法联调】低照度图像增强算法---传统算法篇🚀🚀
  3. 【算法联调】YOLOv8结合SCI低光照图像增强算法!让夜晚目标无处遁形🚀🚀
  4. 【算法联调】YOLOv8结合CVPR2024最新图像增强算法!让你的模型无惧风雨🚀🚀

🥇原创改进🥇

  1. 【原创自研🌟】YOLOv8 更换 挤压激励增强精准头 | 附详细结构图
  2. 【原创自研🌟】检测头篇 YOLOv8 更换 SEResNeXtBottleneck 头 | 附详细结构图
  3. 【原创自研🌟】分割头篇 YOLOv8 更换 SEResNeXtBottleneck 头 | 附详细结构图
  4. 【原创自研🌟】OBB头篇 YOLOv8 更换 SEResNeXtBottleneck 头 | 附详细结构图

🤖改进头篇🤖

  1. 【小目标🤏】YOLOv8 添加 大目标检测头 | 小目标检测头 | 四头加BiFPN
  2. 【原创自研🌟】YOLOv8 更换 挤压激励增强精准头 | 附详细结构图
  3. 【原创自研🌟】检测头篇 YOLOv8 更换 SEResNeXtBottleneck 头 | 附详细结构图
  4. 【原创自研🌟】分割头篇 YOLOv8 更换 SEResNeXtBottleneck 头 | 附详细结构图
  5. 【原创自研🌟】OBB头篇 YOLOv8 更换 SEResNeXtBottleneck 头 | 附详细结构图
  6. 【原创自研🌟】检测头篇 YOLOv8 更换光晕自注意力 Halo 头 | 附详细结构图

🧮优化器篇🧮

  1. 【2023🏅】YOLOv8 引入谷歌 Lion 优化器

😼激活函数篇😼

  1. 激活函数汇总篇 | YOLOv8 更换激活函数 | 20+ 种汇总

✂️后处理方式篇✂️

  1. YOLOv8 更换 DIoU-NMS / CIoU-NMS / EIoU-NMS/ GIoU-NMS / SIoU-NMS/ Soft-NMS 教程

🤓脚本汇总🤓

  1. YOLO格式数据集【数据增强】终极脚本 | 70+种顶级数据增强方法 | 可带标签增强 🚀🚀🚀 [未发布博客]

  2. 【前端页面】YOLOv8 Gradio | 支持 【分类】【检测】【分割】【关键点】 任务🍀

  3. YOLOv8 如何进行目标追踪

  4. YOLOv8 CAM 热力图可视化 | 已适配最新版

  5. YOLOv8 热力图可视化深度指南 | 支持多种颜色主题🌈

  6. YOLOv8 区域计数 | 入侵检测 | 人员闯入

  7. YOLOv8 目标过线计数 | 车流 | 物流 | 流量

  8. YOLOv8 图片目标计数 | 特定目标计数

  9. YOLOv8 置信度保留多位浮点数 & 特征图可视化

  10. 【软件系统】YOLOv8-PySide系统页面 --- 基于 ultralytics 8.1.0 发行版优化💖💖💖

相关推荐
Cpsu17 分钟前
EdgeCrafter:实时目标检测任务新SOTA
人工智能·yolo·目标检测·计算机视觉
JicasdC123asd16 小时前
密集残差瓶颈网络改进YOLOv26特征复用与梯度传播双重优化
网络·yolo·目标跟踪
JicasdC123asd20 小时前
密集连接瓶颈模块改进YOLOv26特征复用与梯度流动双重优化
人工智能·yolo·目标跟踪
duyinbi751721 小时前
局部特征提取改进YOLOv26空间移位卷积与轻量化设计双重突破
人工智能·yolo·目标跟踪
张道宁1 天前
基于Spring Boot与Docker的YOLOv8检测服务实战
spring boot·yolo·docker
duyinbi75171 天前
大核瓶颈架构改进YOLOv26扩大感受野与多尺度特征提取双重突破
yolo·架构
孤狼warrior1 天前
YOLO技术架构发展详解(从v1到v8)近万字底层实现逻辑解析
yolo
张张123y1 天前
机器学习与深度学习:从基础概念到YOLOv8全解析
深度学习·yolo·机器学习
hans汉斯2 天前
基于区块链和语义增强的科研诚信智能管控平台
人工智能·算法·yolo·数据挖掘·区块链·汉斯出版社
Dev7z2 天前
斑点叉尾鮰鱼损伤检测数据集(YOLO格式)
yolo·斑点叉尾鮰鱼