计算机视觉的应用31-目标检测最新模型YOLOv10的介绍与代码快速实现

大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用31-目标检测最新模型YOLOv10的介绍与代码快速实现. YOLOv10是YOLO系列的最新版本,它是清华大学的研究人员在Ultralytics Python包的基础上,引入了一种新的实时目标检测方法.它在后处理和模型架构两个方面进行了显著的改进。YOLOv10提出了一种一致的双重分配策略,这种策略结合了一对多和一对一分配策略的优势,提高了效率并保持了性能。在训练过程中,模型可以利用一对多分配的丰富监督信号,而在推理过程中则使用一对一分配的预测结果,从而实现无NMS的高效推理。
YOLOv10还引入了整体效率-准确性驱动的模型设计策略。这包括轻量化分类头、空间-通道解耦下采样、基于秩的块设计、大核卷积和部分自注意力模块等。这些设计旨在减少计算冗余,提高模型的效率和准确性。例如,空间-通道解耦下采样通过解耦空间下采样和通道调整,优化计算成本。基于秩的块设计则根据各阶段的内在秩适应块设计,减少冗余,提高效率。

一、YOLOv10的优势

YOLOv10的优势在于其在计算-精度权衡方面的显著提升。在COCO数据集上,YOLOv10-S在类似AP下比RT-DETR-R18快1.8倍,同时参数和FLOPs减少了2.8倍。与YOLOv9-C相比,YOLOv10-B在相同性能下延迟减少了46%,参数减少了25%。这些结果表明,YOLOv10在保持高性能的同时,实现了更低的计算成本和推理延迟。

YOLOv10还提供了多种模型规模,包括N、S、M、B、L、X,以满足不同的应用需求。这种可扩展性确保了YOLOv10能够有效应用于各种实时检测任务,从移动设备上的轻量级应用到需要高精度的复杂任务。YOLOv10通过改进后处理和模型架构,提升了YOLO的准确性和速度,实现了实时端到端目标检测的新水平。

在这里插入图片描述

二、YOLOv10的改进

YOLOv10在后处理流程方面的改进主要体现在以下几个方面:

持续双重分配策略

YOLOv10提出了一种持续双重分配策略,这种策略包括双重标签分配和一致匹配度量。这种方法允许模型在训练过程中获得丰富而和谐的监督,同时在推理过程中避免了对非极大值抑制(NMS)的依赖,从而在保持高效率的同时获得了竞争性的性能。

模型架构优化

YOLOv10还引入了全面的效率-准确度驱动模型设计策略,对YOLOs中的各个组件进行了全面检查。在效率方面,提出了轻量级分类头、空间-通道解耦下采样和秩引导块设计,以减少计算冗余并实现更高效的架构。在准确度方面,探索了大核卷积并提出了有效的部分自注意力模块,以增强模型能力,挖掘性能提升潜力。

实验结果展示

实验结果显示,YOLOv10在COCO数据集上的性能表现出色。例如,YOLOv10-S在相似AP下比RT-DETR-R18快1.8倍,同时参数和浮点运算量(FLOPs)减少了2.8倍。与YOLOv9-C相比,YOLOv10-B在相同性能下延迟减少了46%,参数减少了25%。这些结果证明了YOLOv10在后处理和模型架构优化方面的改进确实带来了性能和效率的提升。

三、YOLOv10的一致的双分配策略

YOLOv10的一致的双分配策略

YOLOv10的一致的双分配策略是一种结合了一对一和一对多匹配优点的策略。在训练过程中,YOLOv10使用一对多的标签分配策略,即一个真实对象对应多个正样本,这样可以提供丰富的监督信号,促进模型优化并实现优异的性能。然而,这种方法需要依赖非最大抑制(NMS)后处理,这会降低推理速度,并对NMS的超参数敏感,阻碍了YOLO实现端到端最优部署。

为了解决这个问题,YOLOv10提出了一致的双分配策略。在这种策略中,除了原有的一对多分支外,还引入了一个一对一分支。这个新的分支与原有分支共享相同的结构和优化目标,但在标签分配上采用一对一匹配,即每个真实对象只分配一个预测,避免了NMS后处理。这样既避免了冗余预测,又提供了丰富的监督信号。在推理过程中,YOLOv10会丢弃一对多分支,仅使用一对一分支进行预测,从而实现端到端部署,没有额外的推理成本。

YOLOv10还引入了一致匹配度量,确保一对一分支的最佳正样本与一对多分支的最佳正样本一致,从而允许两个分支协调优化,一对一分支获得改进的监督对齐。这种一致的双分配策略不仅提高了模型的准确性,还保持了较高的推理效率,使得YOLOv10在实时目标检测领域具有很高的应用价值。

四、YOLOv10在模型设计

YOLOv10在模型设计上采取了多种技术来降低计算成本,同时保持较高的检测性能。以下是一些关键的技术点:

轻量级分类头

YOLOv10采用了轻量级的分类头,这有助于减少计算冗余,使模型结构更加高效。

空间-通道解耦下采样

通过空间-通道解耦下采样,YOLOv10能够更有效地处理特征信息,减少了不必要的计算步骤,提高了模型的处理能力。

Rank-Guided 模块设计

Rank-Guided 模块设计是一种优化策略,它根据任务的优先级和复杂度来设计不同的模块结构,从而提高了整体的工作效率。

大卷积核

在需要高精度处理的区域,YOLOv10使用大卷积核来处理复杂的特征,这提高了这些区域的处理能力,同时保持了其他区域的高效运行。

部分自注意力模块 (PSA)

YOLOv10在关键区域引入了部分自注意力模块,这些模块只在需要高精度的部分使用自动化处理,其余部分则由人工完成,这样既提高了关键区域的处理能力,又控制了自动化设备的成本。

双重标签分配策略

YOLOv10采用了双重标签分配策略,这种策略在训练过程中为每个真实标签分配一个预测框,避免冗余,专注于提高每个预测框的准确性,同时为每个真实标签分配多个预测框,提供更丰富的监督信号,帮助模型全面学习目标特征。

一致匹配度量策略

YOLOv10还提出了一致匹配度量策略,这种策略在训练时为模型提供了丰富且均衡的监督信号,推理时无需进行非最大抑制(NMS)处理,从而改善了模型的表现并降低了推理延迟。
这些技术的组合使得YOLOv10在保持高性能的同时,显著降低了计算成本,使其成为实时目标检测领域的一个重要模型。
在这里插入图片描述

五、YOLOv10的代码快速实现

首先先安装yolov10的git包

pip install supervision git+https://github.com/THU-MIG/yolov10.git

实现代码如下:

from ultralytics import YOLOv10
import supervision as sv
import cv2

MODEL_PATH = 'yolov10n.pt'
IMAGE_PATH = 'dog.jpeg'

model = YOLOv10(MODEL_PATH)
image  = cv2.imread(IMAGE_PATH)
results = model(source=image, conf=0.25, verbose=False)[0]
detections = sv.Detections.from_ultralytics(results)
box_annotator = sv.BoxAnnotator()

category_dict = {
    0: 'person', 1: 'bicycle', 2: 'car', 3: 'motorcycle', 4: 'airplane', 5: 'bus',
    6: 'train', 7: 'truck', 8: 'boat', 9: 'traffic light', 10: 'fire hydrant',
    11: 'stop sign', 12: 'parking meter', 13: 'bench', 14: 'bird', 15: 'cat',
    16: 'dog', 17: 'horse', 18: 'sheep', 19: 'cow', 20: 'elephant', 21: 'bear',
    22: 'zebra', 23: 'giraffe', 24: 'backpack', 25: 'umbrella', 26: 'handbag',
    27: 'tie', 28: 'suitcase', 29: 'frisbee', 30: 'skis', 31: 'snowboard',
    32: 'sports ball', 33: 'kite', 34: 'baseball bat', 35: 'baseball glove',
    36: 'skateboard', 37: 'surfboard', 38: 'tennis racket', 39: 'bottle',
    40: 'wine glass', 41: 'cup', 42: 'fork', 43: 'knife', 44: 'spoon', 45: 'bowl',
    46: 'banana', 47: 'apple', 48: 'sandwich', 49: 'orange', 50: 'broccoli',
    51: 'carrot', 52: 'hot dog', 53: 'pizza', 54: 'donut', 55: 'cake',
    56: 'chair', 57: 'couch', 58: 'potted plant', 59: 'bed', 60: 'dining table',
    61: 'toilet', 62: 'tv', 63: 'laptop', 64: 'mouse', 65: 'remote', 66: 'keyboard',
    67: 'cell phone', 68: 'microwave', 69: 'oven', 70: 'toaster', 71: 'sink',
    72: 'refrigerator', 73: 'book', 74: 'clock', 75: 'vase', 76: 'scissors',
    77: 'teddy bear', 78: 'hair drier', 79: 'toothbrush'
}

labels = [
    f"{category_dict[class_id]} {confidence:.2f}"
    for class_id, confidence in zip(detections.class_id, detections.confidence)
]
annotated_image = box_annotator.annotate(
    image.copy(), detections=detections, labels=labels
)

cv2.imwrite('annotated_dog.jpeg', annotated_image)

上面的例子,YOLOv10的代码实现非常简单,只需要导入相关的包和模型,然后使用模型进行推理即可,生成的图片中会框出目标。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微学AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值