当前位置: 首页 > news >正文

YOLOv10实时端到端目标检测

文章目录

    • 前言
    • 一、非极值大抑制(NMS)
    • 二、NMS算法的具体原理和步骤
    • 三、YOLOV10创新点
    • 四、YOLOv10使用教程
    • 五、官方github地址


前言

  距离上次写YOLOv5已经过去了两年,正好最近用YOLOv10重构了项目,总结下YOLOv10。
YOLOv10真正实时端到端目标检测,那么什么是端到端?
  端到端目标检测是一种从原始数据输入到最终结果输出的直接过程,无需分步骤处理或人工干预。在YOLOv10中移除非最大抑制(NMS),从而减少了推理延迟。


一、非极值大抑制(NMS)

  非最大值抑制(NMS)是一种在目标检测中广泛应用的算法,主要用于去除冗余的检测框,只保留最有可能包含目标物体的框。
    在目标检测任务中,通常会有多个候选框同时检测到同一个目标,这些框之间会有不同程度的重叠。为了从这些重叠的框中筛选出最佳检测结果,NMS算法被提出和应用。
在这里插入图片描述

二、NMS算法的具体原理和步骤

  1.置信度排序:根据每个边界框的置信度进行降序排列,置信度最高的边界框被认为是最有可能正确检测到目标的。

  2.选择边界框:从排序后的列表中选择置信度最高的边界框,标记为已选,并将其添加到最终的检测结果列表中。

  3.计算交并比:对于剩余的每个边界框,计算它与已选边界框的交并比(IOU),即交集与并集的比值。

  4.剔除低置信度框:如果某个边界框与已选框的IOU超过了预设的阈值(例如0.5或0.7),则认为这两个框表示的是同一个目标,于是根据置信度较低的原则,剔除这个低置信度的边界框。

  5.重复选择过程:继续选择剩余边界框中置信度最高的,重复计算IOU和剔除过程,直到所有边界框都被检查过。

  6.结束,选出最优框

三、YOLOV10创新点

  YOLOv10通过引入双重标签分配策略和一致匹配度量,成功去除了非最大抑制(NMS)机制。
  双重标签分配策略:其中包括一对多和一对一两种分配模式。这种策略不仅提供了丰富的监督信号,确保了训练过程中的准确性,而且避免了在推理阶段使用NMS,从而提高了整体的效率。这一创新的方法有效地平衡了训练与推理之间的需求。
  一致匹配度量:该策略确保了在训练过程中,不同的预测头产生的预测结果能够保持一致性。这种一致性的优化进一步保证了在去除NMS的情况下,模型仍然能够维持高性能和高准确性。

四、YOLOv10使用教程

  YOLOv10进行了高度封装,使用步骤也很简单,我常规的使用方法是通过OpenCV读取rtsp流进行检测

import cv2
from ultralytics import YOLOv10
detect = YOLOv10("yolov10s.pt")if __name__ == '__main__':cap = cv2.VideoCapture(rtsp)while cap.isOpened():success, frame = cap.read()if success:# conf指定阈值 classes指定检测类目results = detect.predict(frame, conf=0.5, classes=[0])# 返回json格式的数据,需要不同的格式具体可以查看源码print(results[0].tosjon())else:cap = cv2.VideoCapture(rtsp)

YOLOv10 提供了多种模型:

模型说明
YOLOv10-N用于资源极其有限环境的纳米版本
YOLOv10-S兼顾速度和精度的小型版本
YOLOv10-M通用中型版本
YOLOv10-B平衡型,宽度增加,精度更高
YOLOv10-L大型版本,精度更高,但计算资源增加
YOLOv10-X超大型版本可实现最高精度和性能

五、官方github地址

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

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 智慧楼宇公厕系统小程序,提高卫生间管理使用效率
  • CDP问卷填报流程-百胜企业管理咨询
  • 8.9 python管理mysql
  • Go语言 Defer(延迟)
  • Flutter-->AAPT: error: resource android:attr/lStar not found.
  • 安卓中Room持久化库的使用
  • 哈希 | Java | (hot100) 力扣 49
  • 重头开始嵌入式第十九天(Linux系统编程 文件IO)
  • Android-->产物收集(含apk文件重命名, aab文件重命名)
  • Mutual_Voting_for_Ranking_3D_Correspondences
  • AFSim 仿真系统----坐标系统
  • 基于CNN的医学X-Ray图像分类全程解析
  • 在Notebook中使用backtrader绘图出现 Javascript Error: IPython is not defined
  • CUDA编程06 - 性能优化指南
  • 【微信小程序】WXSS 模板样式
  • 【391天】每日项目总结系列128(2018.03.03)
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • C++入门教程(10):for 语句
  • CentOS6 编译安装 redis-3.2.3
  • FineReport中如何实现自动滚屏效果
  • flutter的key在widget list的作用以及必要性
  • Java方法详解
  • JS 面试题总结
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • Octave 入门
  • Puppeteer:浏览器控制器
  • Vue学习第二天
  • windows下如何用phpstorm同步测试服务器
  • 番外篇1:在Windows环境下安装JDK
  • 关于extract.autodesk.io的一些说明
  • 前端面试之闭包
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 如何用vue打造一个移动端音乐播放器
  • 山寨一个 Promise
  • 新手搭建网站的主要流程
  • NLPIR智能语义技术让大数据挖掘更简单
  • # 透过事物看本质的能力怎么培养?
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (ZT)薛涌:谈贫说富
  • (笔记)M1使用hombrew安装qemu
  • (二)斐波那契Fabonacci函数
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .net refrector
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .net6 webapi log4net完整配置使用流程
  • /proc/vmstat 详解
  • :not(:first-child)和:not(:last-child)的用法
  • ??eclipse的安装配置问题!??
  • @Query中countQuery的介绍
  • [ Socket学习 ] 第一章:网络基础知识