【YOLO系列】YOLOv10模型结构详解与推理部署实现

简介: 【YOLO系列】YOLOv10模型结构详解与推理部署实现

YOLOv10模型

早晨看到一堆推文,说YOLOv10已经发布了,吓我一跳,这个世界变化这么快,

然后快速的看一下相关的文档,发现YOLOv10 相比YOLOv8有两个最大的改变分别是 添加了PSA层跟CIB层

去掉了NMS

导出与部署

github上YOLOv10的地址如下

https://github.com/THU-MIG/yolov10

下载源码,直接用下面的代码就可以导出ONNX格式模型了,发现导出以后还没来得及把格式搞清楚,输出得居然是动态得ONNX格式表示,但是实际上

输入支持格式为:1x3x640x640

输出格式为1x300x6

输出格式300是指输出得预测框数目,6分别是

x1 y1 x2 y2 score classid

因为YOLOv10模型不需要NMS了,所以就直接输出最终得预测结果,支持默认最大得boxes数目是300, 这个应该是可以改得,我还没仔细研究,不然显然支持得预测框太少,这点跟YOLOv8预测框相比少了很多。模型转换代码如下:

from ultralytics import RTDETR, YOLO10
"""Test exporting the YOLO model to ONNX format."""
f = YOLO10("yolov10s.pt").export(format="onnx", dynamic=True)

单纯从推理上看 YOLOv10的确比YOLOv8简单很多,有点SSD模型得既视感。推理代码实现如下:

import cv2 as cv
import numpy as np
from openvino.runtime import Core


# load model
labels = load_classes()
ie = Core()
for device in ie.available_devices:
    print(device)
model = ie.read_model(model="yolov10n.onnx")
compiled_model = ie.compile_model(model=model, device_name="CPU")
output_layer = compiled_model.output(0)

frame = cv.imread("D:/images/1234.jpg")
image = format_yolov10(frame)

h, w, c = image.shape
x_factor = w / 640.0
y_factor = h / 640.0

# 检测 2/255.0, NCHW = 1x3x640x640
blob = cv.dnn.blobFromImage(image, 1 / 255.0, (640, 640), swapRB=True, crop=False)

# 设置网络输入
cvOut = compiled_model([blob])[output_layer]
# [left,top, right, bottom, score, classId]
print(cvOut.shape)
for row in cvOut[0,:,:]:
    score = float(row[4])
    objIndex = int(row[5])
    if score > 0.5:
        left, top, right, bottom = row[0].item(), row[1].item(), row[2].item(), row[3].item()

        left = int(left * x_factor)
        top = int(top * y_factor)
        right = int(right * x_factor)
        bottom = int(bottom * y_factor)
        # 绘制
        cv.rectangle(frame, (int(left), int(top)), (int(right), int(bottom)), (255, 0, 0), thickness=2)
        cv.putText(frame, "score:%.2f, %s"%(score, labels[objIndex]),
                (int(left) - 10, int(top) - 5), cv.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2, 8);

cv.imshow('YOLOv10 Object Detection', frame)
cv.imwrite("D:/result.png", frame)
cv.waitKey(0)
cv.destroyAllWindows()

运行结果如下:

总结与看法

个人认为,这个就是一个YOLOv8的魔改版本,但是也是魔改界的天花板,还是不错的。然后下载它的源码之后,你会发现里面很多YOLOv8的包跟代码注释连名字都还没有改过来,特别是推理的演示代码里面还是YOLOv8的,说明是fork YOLOv8的代码基础上修改的,跟论文说明是一致的

相关文章
|
机器学习/深度学习 编解码 人工智能
|
监控 计算机视觉 知识图谱
YOLOv10的改进、部署和微调训练总结
YOLOv10在实时目标检测中提升性能与效率,通过无NMS训练解决延迟问题,采用一致的双任务和效率-精度驱动的模型设计。YOLOv10-S比RT-DETR-R18快1.8倍,YOLOv10-B比YOLOv9-C延迟减少46%。新方法包括一致性双标签分配,优化计算冗余和增强模型能力。实验结果显示YOLOv10在AP和延迟上均有显著改善。文章还提供了部署和微调YOLOv10的示例代码。
1490 2
|
机器学习/深度学习 算法 计算机视觉
YOLOv10改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进
YOLOv10改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进
1113 6
YOLOv10改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进
|
计算机视觉
【YOLOv10训练教程】如何使用YOLOv10训练自己的数据集并且推理使用
【YOLOv10训练教程】如何使用YOLOv10训练自己的数据集并且推理使用
|
机器学习/深度学习
YOLOv10优改系列一:YOLOv10融合C2f_Ghost网络,让YoloV10实现性能的均衡
本文介绍了YOLOv10的性能优化,通过融合Ghost模块和C2f结构,实现了网络性能的均衡。GhostNet通过GhostModule和GhostBottleNeck减少参数量,适用于资源有限的场景。YOLOv10-C2f_Ghost在减少参数和计算量的同时,保持了与原始网络相当或更好的性能。文章还提供了详细的代码修改步骤和可能遇到的问题解决方案。
2211 1
YOLOv10优改系列一:YOLOv10融合C2f_Ghost网络,让YoloV10实现性能的均衡
|
机器学习/深度学习 编解码 监控
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
这篇文章详细介绍了如何使用YOLOv8进行目标检测任务,包括环境搭建、数据准备、模型训练、验证测试以及模型转换等完整流程。
25869 59
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
机器学习/深度学习
深度学习笔记(十二):普通卷积、深度可分离卷积、空间可分离卷积代码
本文探讨了深度可分离卷积和空间可分离卷积,通过代码示例展示了它们在降低计算复杂性和提高效率方面的优势。
3470 2
深度学习笔记(十二):普通卷积、深度可分离卷积、空间可分离卷积代码
|
编解码 计算机视觉 网络架构
【YOLOv10改进- 特征融合NECK】BiFPN:加权双向特征金字塔网络
YOLOv10专栏探讨了目标检测的效率提升,提出BiFPN,一种带加权和自适应融合的双向特征金字塔网络,优化了多尺度信息传递。EfficientDet系列利用这些创新在效率与性能间取得更好平衡,D7模型在COCO测试集上达到55.1 AP。YOLOv8引入MPDIoU,结合BiFPN学习分支权重,提高检测精度。详情见[YOLOv10 创新改进](https://blog.csdn.net/shangyanaf/category_12712258.html)和相关文章。
|
机器学习/深度学习 计算机视觉
YOLOv10实战:红外小目标实战 | 多头检测器提升小目标检测精度
本文改进: 在进行目标检测时,小目标会出现漏检或检测效果不佳等问题。YOLOv10有3个检测头,能够多尺度对目标进行检测,但对微小目标检测可能存在检测能力不佳的现象,因此添加一个微小物体的检测头,能够大量涨点,map提升明显; 多头检测器提升小目标检测精度,1)mAP50从0.666提升至0.677
2300 3
|
机器学习/深度学习 计算机视觉
【YOLOv10改进-卷积Conv】RFAConv:感受野注意力卷积,创新空间注意力
【YOLO目标检测专栏】探索空间注意力局限,提出感受野注意力(RFA)机制,解决卷积核参数共享问题。RFAConv增强大尺寸卷积核处理能力,不增加计算成本,提升网络性能。已在YOLOv8中实现,详情见YOLO目标检测创新改进与实战案例专栏。