💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡
专栏目录:《YOLOv8改进有效涨点》专栏介绍 & 专栏目录 | 目前已有40+篇内容,内含各种Head检测头、损失函数Loss、Backbone、Neck、NMS等创新点改进
对YOLOv10感兴趣的同学可以先看YOLOv8,因为改进方式大部分一样,我也会尽快更新相关的教程
论文地址:YOLOv10: Real-Time End-to-End Object Detection点击即可跳转
官方代码:官方代码仓库点击即可跳转
今天看到YOLOv10已经被添加到了ultralytics的仓库中, 也就是说,以后YOLOv8的代码仓库也可以下载直接运行YOLOv10。预计以后发布的YOLO系列都会被收入到这个仓库中。
YOLOv10启动脚本供参考:
from ultralytics import YOLOv10
# Load a model
model = YOLOv10("ultralytics/cfg/models/v10/yolov10n.yaml")
# train
model.train(data='dataset/data.yaml',
cache=False,
imgsz=640,
epochs=100,
batch=16,
close_mosaic=0,
workers=4,
device='0',
optimizer='SGD', # using SGD
amp=False, # close amp
project='runs/train',
name='exp',
)
YOLOv10创新点回顾:
1. 创新点
无NMS的一致双分配(consistent dual assignments):
YOLOv10提出了一种通过双标签分配而不用非极大值抑制NMS的策略。这种方法结合了一对多和一对一分配策略的优势,提高了效率并保持了性能。
效率-精度驱动的模型设计(Holistic Efficiency-Accuracy Driven Model Design):
轻量化分类头:在不显著影响性能的情况下,减少了计算开销。
空间-通道解耦下采样:解耦空间下采样和通道调整,优化计算成本。
基于秩的块设计:根据各阶段的内在秩适应块设计,减少冗余,提高效率。
大核卷积和部分自注意力PSA:在不显著增加计算成本的情况下,增强了感受野和全局建模能力。
2. 一致双分配策略(Consistent Dual Assignments)
YOLOv10引入了一种新的双分配策略,用于在训练期间同时利用一对多(one-to-many)和一对一(one-to-one)标签分配。这种方法在保持模型高效训练的同时,摆脱了推理过程中对非极大值抑制NMS的依赖。
双标签分配(Dual Label Assignments)
一对多分配:在训练期间,多个预测框被分配给一个真实物体标签。这种策略提供了丰富的监督信号,优化效果更好。
一对一分配:仅一个预测框被分配给一个真实物体标签,避免了NMS,但由于监督信号较弱,容易导致收敛速度慢和性能欠佳。
双头架构:模型在训练期间使用两个预测头,一个使用一对多分配,另一个使用一对一分配。这样,模型可以在训练期间利用一对多分配的丰富监督信号,而在推理期间则使用一对一分配的预测结果,从而实现无NMS的高效推理。
3. 一致匹配度量(Consistent Matching Metric)
为了在训练期间保持两个预测头的一致性,提出了一致匹配度量。通过调整匹配度量参数,使得一对一和一对多分配的监督信号一致,减少了训练期间的监督差距,提升了模型的预测质量。
整体效率-精度驱动的模型设计(Holistic Efficiency-Accuracy Driven Model Design)
YOLOv10在模型架构的各个方面进行了全面优化,旨在提升效率和精度。
3.1 效率驱动的模型设计
轻量化分类头(Lightweight Classification Head)
在YOLO系列中,分类头和回归头通常共享相同的架构,但分类任务的计算开销更大。为分类头采用轻量级的架构,包括两个3×3的深度可分离卷积(depthwise separable convolutions)和一个1×1卷积,以减少计算开销。
空间-通道解耦下采样(Spatial-Channel Decoupled Downsampling)
传统的下采样方法同时进行空间和通道的转换,计算成本较高。YOLOv10首先使用逐点卷积(pointwise convolution)调整通道维度,然后使用深度卷积(depthwise convolution)进行空间下采样。这样可以最大限度地保留信息,同时减少计算成本。
3.2 基于秩的块设计(Rank-Guided Block Design)
在YOLO模型中,各阶段通常使用相同的基本构建块,容易导致深层阶段的计算冗余。因此根据各阶段的内在秩(intrinsic rank)调整块设计,减少冗余,采用紧凑的反向块(Compact Inverted Block, CIB)设计,用深度卷积进行空间混合和逐点卷积进行通道混合,提高效率。
3.3 精度驱动的模型设计
大核卷积(Large-Kernel Convolution)
大核卷积的感受野较大,能够更好地捕捉图像中的全局信息。然而,直接在所有阶段使用大核卷积可能会导致小物体特征的污染,并增加高分辨率阶段的I/O开销和延迟。因此,在深层阶段使用大核深度卷积(如7×7)来扩大感受野,增强模型能力,同时使用结构重参数化技术(structural reparameterization)优化训练。
对于小模型规模(如YOLOv10-N/S),大核卷积的使用能够显著提升性能,而对于大模型规模(如YOLOv10-M),其天然较大的感受野使得大核卷积的效果不明显,因此仅在小模型中使用。
部分自注意力(Partial Self-Attention, PSA)
部分自注意力模块通过引入全局建模能力来提升模型性能,同时保持较低的计算开销。
自注意力(self-attention)在视觉任务中因其出色的全局建模能力而被广泛使用,但其计算复杂度和内存占用较高。本文引入PSA模块,通过将特征按通道分成两部分,仅对一部分应用多头自注意力(Multi-Head Self-Attention, MHSA),然后进行融合,增强全局建模能力,降低计算复杂度。