YOLOv10介绍与推理--图片和视频演示(附源码)

导  读

    本文主要对YOLOv10做简单介绍并给出推理图片和视频的步骤演示。 

YOLOv10简介

    YOLOv10是清华大学的研究人员在Ultralytics Python包的基础上,引入了一种新的实时目标检测方法,解决了YOLO 以前版本在后处理和模型架构方面的不足。通过消除非最大抑制(NMS)和优化各种模型组件,YOLOv10 在显著降低计算开销的同时实现了最先进的性能。大量实验证明,YOLOv10 在多个模型尺度上实现了卓越的精度-延迟权衡。

图片

概述

    实时目标检测旨在以较低的延迟准确预测图像中的物体类别和位置。YOLO 系列在性能和效率之间取得了平衡,因此一直处于这项研究的前沿。然而,对 NMS 的依赖和架构上的低效阻碍了最佳性能的实现。YOLOv10 通过为无 NMS 训练引入一致的双重分配和以效率-准确性为导向的整体模型设计策略,解决了这些问题。

网络架构

    YOLOv10 的结构建立在以前YOLO 模型的基础上,同时引入了几项关键创新。模型架构由以下部分组成:

    • 主干网:YOLOv10 中的主干网负责特征提取,它使用了增强版的 CSPNet(跨阶段部分网络),以改善梯度流并减少计算冗余。

    • 颈部:颈部设计用于汇聚不同尺度的特征,并将其传递到头部。它包括 PAN(路径聚合网络)层,可实现有效的多尺度特征融合。

    • 一对多头:在训练过程中为每个对象生成多个预测,以提供丰富的监督信号并提高学习准确性。

    • 一对一头:在推理过程中为每个对象生成一个最佳预测,无需 NMS,从而减少延迟并提高效率。

主要功能

    • 无 NMS 训练:利用一致的双重分配来消除对 NMS 的需求,从而减少推理延迟。

    • 整体模型设计:从效率和准确性的角度全面优化各种组件,包括轻量级分类头、空间通道去耦向下采样和等级引导块设计。

    • 增强的模型功能:纳入大核卷积和部分自注意模块,在不增加大量计算成本的情况下提高性能。

模型支持:

YOLOv10 有多种模型,可满足不同的应用需求:

    • YOLOv10-N:用于资源极其有限环境的纳米版本。

    • YOLOv10-S:兼顾速度和精度的小型版本。

    • YOLOv10-M:通用中型版本。

    • YOLOv10-B:平衡型,宽度增加,精度更高。

    • YOLOv10-L:大型版本,精度更高,但计算资源增加。

    • YOLOv10-X:超大型版本可实现最高精度和性能。

性能

    在准确性和效率方面,YOLOv10 优于YOLO 以前的版本和其他最先进的模型。例如,在 COCO 数据集上,YOLOv10-S 的速度是RT-DETR-R18 的 1.8 倍,而 YOLOv10-B 与 YOLOv9-C 相比,在性能相同的情况下,延迟减少了 46%,参数减少了 25%。下图是使用TensorRT FP16 在T4 GPU上的测试结果:

图片

实验和结果

    YOLOv10 在 COCO 等标准基准上进行了广泛测试,显示出卓越的性能和效率。与以前的版本和其他当代探测器相比,YOLOv10 在延迟和准确性方面都有显著提高。

图片

      

推理演示

    官方实现代码地址:

https://github.com/THU-MIG/yolov10?tab=readme-ov-file

    包含不同版本模型下载:

图片

    安装配置可参考官方文档:

conda create -n yolov10 python=3.9conda activate yolov10pip install -r requirements.txtpip install -e .

    或:

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

    上述方法如果报错可以尝试下面方法:

    【1】先将github项目代码下载到本地;

    【2】安装supervision:

pip install supervision -i https://pypi.tuna.tsinghua.edu.cn/simple

    图片推理预测:

from ultralytics import YOLOv10import supervision as svimport cv2
classes = {    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'}
model = YOLOv10('yolov10s.pt')image  = cv2.imread('5.jpg')
results = model(source=image, conf=0.25, verbose=False)[0]detections = sv.Detections.from_ultralytics(results)box_annotator = sv.BoxAnnotator()
labels = [    f"{classes[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.imshow('result', annotated_image)cv2.waitKey()cv2.destroyAllWindows()cv2.imwrite('annotated_dog.jpeg', annotated_image)

图片

图片

    视频推理预测:​​​​​​​​​​​​​​

from ultralytics import YOLOv10import supervision as svimport cv2
classes = {    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'}
model = YOLOv10('yolov10m.pt')
def predict_and_detect(image):    results = model(source=image, conf=0.5, verbose=False)[0]    detections = sv.Detections.from_ultralytics(results)    box_annotator = sv.BoxAnnotator()
    labels = [        f"{classes[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    )    return annotated_image
def create_video_writer(video_cap, output_filename):    # grab the width, height, and fps of the frames in the video stream.    frame_width = int(video_cap.get(cv2.CAP_PROP_FRAME_WIDTH))    frame_height = int(video_cap.get(cv2.CAP_PROP_FRAME_HEIGHT))    fps = int(video_cap.get(cv2.CAP_PROP_FPS))    # initialize the FourCC and a video writer object    fourcc = cv2.VideoWriter_fourcc(*'MP4V')    writer = cv2.VideoWriter(output_filename, fourcc, fps,                             (frame_width, frame_height))    return writer
video_path = 'cars.MP4'cap = cv2.VideoCapture(video_path)
output_filename = "out.mp4"writer = create_video_writer(cap, output_filename)
while True:    success, img = cap.read()    if not success:        break    frame = predict_and_detect(img)    writer.write(frame)    cv2.imshow("frame", frame)        if cv2.waitKey(1)&0xFF ==27: #按下Esc键退出        break
cap.release()writer.release()

,时长00:02

    后续ultralytics也将添加YOLOv10的支持,部署训练将会更便捷。

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/17085.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能超万卡集群的核心设计原则和架构

超万卡集群的核心设计原则和架构 超万卡集群建设方兴未艾,当前主要依托英伟达GPU及其设备。英伟达GPU在大模型训练中表现卓越,但国产AI芯片虽进步显著,性能与生态构建仍存差距。面对诸多挑战,构建技术领先、基于国产生态的超万卡集群,仍需不断突破与创新。 大模型升级至万…

Linux终端连接工具

终端连接工具有很多中,这里我只收集了一些常用的或免费的工具 我一般会配套使用: FinalShell -->命令行工具(Mac和win) WinSCP -->文件上传工具(win) filezilla -->文件上传工具(Mac …

金锋关晓柔短视频:成都鼎茂宏升文化传媒公司

金锋关晓柔短视频:情感与创意的交织 在短视频的浪潮中,无数创作者凭借独特的视角和创意脱颖而出。其中,金锋和关晓柔共同打造的短视频系列以其深厚的情感内涵和精湛的创意表达,成都鼎茂宏升文化传媒公司吸引了大量观众的关注&…

知识融合概述

文章目录 知识融合知识融合过程研究现状技术发展趋势 知识融合 知识融合的概念最早出现在1983年发表的文献中,并在20世纪九十年代得到研究者的广泛关注。而另一种知识融合的定义是指对来自多源的不同概念、上下文和不同表达等信息进行融合的过程认为知识融合的目标是…

vue数据持久化仓库

本文章是一篇记录实用性vue数据持久化仓的使用! 首先在src中创建store文件夹,并创建一个根据本页面相关的名称, 在终端导入:npm i pinia 和 npm i pinia-plugin-persistedstate 接下来引入代码: import { defineSt…

Python Anaconda环境复制

虚拟环境复制 conda-pack 第一种方式 conda打包 在打包之前如果没有conda-pack包的话,需要安装pip install conda-pack打包 conda pack -n py36 -o py366.tar.gz -o就是给导出得到的压缩包就在当前目录下 传输到另外一台服务器上 有两台linux服务器&#xff0c…

有哪些永久免费的进销存管理软件?

我明白许多中小企业在寻求进销存系统时,希望能找到一款完全免费的解决方案,以减轻经济压力。这种心态非常正常,毕竟成本是任何企业都需要仔细考虑的因素。然而,我要强调的是,市场上那些声称“完全免费”的进销存系统&a…

东子哥:从来不拼搏的人,不是我的兄弟!新一轮裁员潮即将来临!

今年初,包括微软、亚马逊、谷歌母公司Alphabet等在内的巨头先后宣布裁员计划,曾掀起了一轮裁员潮。 进入年中阶段,特斯拉、理想汽车、TikTok、安德玛等知名巨头,也先后宣布裁员计划,难道,新一轮裁员潮已经…

OrangePi AIpro评测 - 基础操作篇

0. 环境 ●OrangePi AIpro ●win10笔记本 ●路由器 准备下win10电脑、路由器,这些板卡通常是在网络正常的环境下才方便测试。 还要准备OrangePi AIpro的官方资料: http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-suppo…

第八届能源、环境与材料科学国际学术会议(EEMS 2024)

文章目录 一、重要信息二、大会简介三、委员会四、征稿主题五、论文出版六、会议议程七、出版信息八、征稿编辑 一、重要信息 会议官网:http://ic-eems.com主办方:常州大学大会时间:2024年06月7-9日大会地点:新加坡 Holiday Inn …

[NISACTF 2022]easyssrf、[NISACTF 2022]level-up

[NISACTF 2022]easyssrf 使用dirsearch扫描后没发现什么路径 尝试访问127.0.0.1,成功了 访问127.0.0.1/flag.php提示有文件/fl4g 使用file://协议读取文件/fl4g,提示除此页面外还有一个ha1x1ux1u.php页面。 file:///fl4g 直接访问,发现GET…

鸿蒙开发接口UI界面:【@ohos.mediaquery (媒体查询)】

媒体查询 说明: 从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 : gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 导入模块 import mediaquery from ohos.media…

2024斯佩菈音乐剧暑假训练营 30天创造奇迹培育坚强自信好少年

以声问本,素质教育,融会中西,知行合一。音乐是生活的灵魂,艺术的真正意义在于使人幸福,得到鼓舞和力量。多一把衡量的尺子,就会多出一批好学生。 相对学校语数英等学科教育,孩子心灵成长方面很…

最新扣子(Coze)实战教程:扣子​使用基础,完全免费,快来学习吧~

🧙‍♂️ 诸位好,吾乃斜杠君,编程界之翘楚,代码之大师。算法如流水,逻辑如棋局。 📜 吾之笔记,内含诸般技术之秘诀。吾欲以此笔记,传授编程之道,助汝解技术难题。 &#…

【数据结构】链式二叉树(超详细)

文章目录 前言二叉树的链式结构二叉树的遍历方式二叉树的深度优先遍历前序遍历(先根遍历)中序遍历(中根遍历)后序遍历(后根遍历) 二叉树的广度优先遍历层序遍历 二叉树链式结构接口实现二叉树结点个数二叉树叶子结点个数二叉树的深度(高度)二叉树第k层结…

“AURORA-M:首个遵循人类审查安全指令微调的开源多语言模型

在人工智能领域,多模态学习是一个日益增长的研究领域,它涉及将来自不同源(如图像、文本、音频等)的信息结合起来。但高昂的训练计算成本限制了模型的普及性,使得小型机构和个人难以负担。而且现有模型在多语言能力上受…

Unity LayerMask避坑笔记

今天使用Physics2D.OverlapAreaNonAlloc进行物理检测时候,通过LayerMask.NameToLayer传入了int值的LayerMask,结果一直识别不到,经过Debug才找到问题,竟是LayerMask的“值”传输有问题,记录一下。 直接贴代码输出结果&…

爬虫学习1

爬虫网站:All products | Books to Scrape - Sandbox 豆瓣网:豆瓣电影 Top 250 我们需要安装一个第三方库来解析爬取到的html内容,终端输入pip install bs4,安装成功后引入需要的模块 我们先爬取所有的价格 import requests from bs4 import…

HTML+CSS+JavaScript网页制作案例教程第2版-黑马程序员-第9章动手实践

文章目录 效果代码网盘 效果 代码 index.html <!doctype html> <html> <head> <meta charset"utf-8"> <title>通栏效果</title> <link rel"stylesheet" type"text/css" href"index.css"> …

linux系统更改SSH端口号配置

1.编写sshd.config cd /etc/ssh sudo cp sshd_config sshd_config.bak vim sshd_config2.重启服务 systemctl restart sshd 结束&#xff01;&#xff01;