【深度学习】YOLOv10实战:20行代码将笔记本摄像头改装成目标检测监控

目录

一、引言

二、YOLOv10视觉目标检测—原理概述

2.1 什么是YOLO 

2.2 YOLO的网络结构 

三、YOLOv10视觉目标检测—训练推理

3.1 YOLOv10安装 

3.1.1 克隆项目 

3.1.2  创建conda环境

3.1.3 下载并编译依赖 

3.2 YOLOv10模型推理

3.2.1 模型下载

3.2.2 WebUI推理

3.2.3 命令行推理

3.2.4 推理格式转换

3.3 YOLOv10模型训练 

四、YOLOv10实战:20行代码构建基于YOLOv10的实时视频监控

五、总结


一、引言

人工智能的终极形态,应该就是“具身机器人”——像人一样有眼睛(视觉)、耳朵(听觉)、嘴巴(语言)、舌头(味觉)、鼻子(嗅觉)等器官,味觉、嗅觉目前没有大的进展,视觉、听觉、语言能力在科学界与工程界已经取得重大突破:

  • 视觉模型:YOLOv10、LLaVA、Qwen-VL等大语言模型的Vision版本
  • 听觉模型:TTS(文字转语音)、Whisper(ASR,语音转文字)
  • 语言模型:GPT4、LLaMA、Qwen、文心一言等等大语言模型

今天我们讲一下最近大火的YOLOv10(You Only Look Once v10),由清华大学5月23日发布,比YOLOv9在相同性能下延迟减少了46%,参数减少了25%。 

​​​​​​​

二、YOLOv10视觉目标检测—原理概述

2.1 什么是YOLO 

YOLO(You Only Look Once)是基于深度神经网络的目标检测算法,用在图像或视频中实时识别和定位多个对象。YOLO的主要特点是速度快且准确度较高,能够在实时场景下实现快速目标检测,被广泛应用于计算机视觉领域,包括实时视频分析自动驾驶智能医疗等。

在YOLO出现前,主流算法为R-CNN,可以称之为“二阶段算法”:先锚框,再预测框内的物体。YOLO出现后,可以“一阶段”直接端到端的输出物料和位置。

  • 一阶段算法:模型直接做回归任务,输出目标的概率值和位置坐标。例如:SSD, YOLO,MTCNN等
  • 二阶段算法:首先生成多个锚框,然后利用卷积神经网络输出概率值和位置坐标。例如:R-CNN系列

2.2 YOLO的网络结构 

YOLOv10是YOLOv8的改进,这里简单看一下YOLOv8的网络结构,由于本篇文章的主旨是快速部署自己的YOLOv10模型,原理暂且按下不表,如果想深入了解可以关注迪菲赫尔曼-CSDN博客大佬。

YOLOv8网络结构图:

图片来源:yolov8网络结构详解(逐行解析)_yolov8网络架构-CSDN博客  

三、YOLOv10视觉目标检测—训练推理

3.1 YOLOv10安装 

3.1.1 克隆项目 

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

3.1.2  创建conda环境

conda create -n yolov10 python=3.9
conda activate yolov10

3.1.3 下载并编译依赖 

这里推荐使用腾讯pip源,真的很快

pip install -r requirements.txt -i https://mirrors.cloud.tencent.com/pypi/simple
pip install -e . -i https://mirrors.cloud.tencent.com/pypi/simple

3.2 YOLOv10模型推理

3.2.1 模型下载

可以直接点击链接下载:

YOLOv10-N:https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10n.pt
YOLOv10-S:https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10s.pt
YOLOv10-M:https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10m.pt
YOLOv10-B:https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10b.pt
YOLOv10-L:https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10l.pt
YOLOv10-X:https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10x.pt

3.2.2 WebUI推理

项目根目录下运行:

python app.py

执行成功后显示: 

报错解决: 

我在执行时出现了报错:ImportError: libGL.so.1: cannot open shared object file: No such file or dir

在启动前出现了这个错误,主要因为opencv-python-headless版本导致,重新安装解决

pip uninstall opencv-python -y
pip install opencv-python-headless -i https://mirrors.cloud.tencent.com/pypi/simple

在浏览器输入127.0.0.1:7861,见证奇迹的时刻: 

  •  上传图片检测:毫秒级瞬间级就检测出来了

 

  • 摄像头拍照检测: 人、手机、表均不完整,但可以快速识别,nice!

  

3.2.3 命令行推理

conda环境内用yolo启动,predict参数预测,model用于指定下载好的模型,device指定GPU,source指定要检测的图片。

yolo predict model=yolov10n.pt device=2 source=/aigc_dev/yolov10/ultralytics/assets

默认待检测图片存放在yolov10/ultralytics/assets目录下,检测后存放于yolov10/runs/detect/predictxx目录

可以看到,yolov10n在V100显卡下,平均检测时长为78.7ms

官方采用COCO数据集对每种模型进行评测,仅供参考。

检测结果展示:

 

3.2.4 推理格式转换

项目可以方便的转换为ONNX和TensorRT格式,用于跨平台推理与部署。

yolo export model=yolov10n.pt format=onnx opset=13 simplify device=2
yolo predict model=yolov10n.onnx device=2
  • ONNX(Open Neural Network Exchange)是一个开放的格式,用于表示深度学习模型,使得模型可以在不同的框架之间轻松迁移。它支持多种深度学习框架,如PyTorch、TensorFlow、MXNet等,允许开发者在不同的生态系统中选择最合适的工具进行模型训练,然后导出到ONNX格式,以便在其他支持ONNX的平台上进行部署。
  • TensorRT是NVIDIA开发的一个高性能的深度学习推理(Inference)优化器和运行时,专为NVIDIA GPU设计。它接收训练好的模型(支持ONNX等格式),并对其进行优化,生成针对特定GPU硬件的高效执行代码。

3.3 YOLOv10模型训练 

yolo不仅提供推理服务,还支持引入数据集进行训练:

yolo detect train data=coco.yaml model=yolov10s.yaml epochs=100 batch=128 imgsz=640 device=2

detect train为检测训练命令,data指定数据集,默认数据集下载并存放在../datasets/coco,model指定训练模型配置,epochs代表迭代次数,imgsz代表图片缩放大小,batch代表批处理,device为指定GPU设备。

启动后进行COCO数据集的下载,非常庞大,由于服务器无法科学上网,需要下很久,这里不投入时间了,如果感兴趣可以前往COCO - Common Objects in Context 下载。也可以执行上面命令后自动下载。

四、YOLOv10实战:20行代码构建基于YOLOv10的实时视频监控

在根目录下建立run_python.py: 

import cv2
from ultralytics import YOLOv10
model = YOLOv10("yolov10s.pt")
cap = cv2.VideoCapture(0)
while True:
        ret, frame = cap.read()
        if not ret:
                break  # 如果没有读取到帧,退出循环
        results = model.predict(frame)
        # 遍历每个预测结果
        for result in results:
                # 结果中的每个元素对应一张图片的预测
                boxes = result.boxes  # 获取边界框信息
                for box in boxes:
                        x1,y1,x2,y2 = map(int, box.xyxy[0])
                        cls = int(box.cls[0])
                        conf = float(box.conf[0])
                        cv2.rectangle(frame, (x1, y1), (x2, y2), (255, 0, 0), 2)
                        cv2.putText(frame, f'{model.names[cls]} {conf:.2f}', (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 2)
        # 显示带有检测结果的帧
        cv2.imshow('YOLOv10实时检测', frame)
        # 按'q'键退出
        if cv2.waitKey(1) & 0xFF == ord('q'):
                break

# 释放资源
cap.release()
cv2.destroyAllWindows()

运行后电脑摄像头自动开启,实时检测摄像头内的目标:

感受:由于使用个人mac笔记本,推理性能较差,取中等尺寸的yolov10b.pt模型,推理耗时达到了300-400ms,而对于很多物体,也很难有效识别,比如拿了盒烟,他会判定成一本书。真正应用到生产环境还需要在推理性能和模型训练上深耕。

五、总结

本文​​​​首先介绍视觉模型在人工智能领域的位置,其次对原理概念初步进行说明,之后对推理与训练过程进行详细阐述,最后通过一个实战例子,用极少的代码行数将笔记本电脑的摄像头改装为实时视频监控,目标是让读者通过读完此文,快速上手YOLOv10技术进行物体目标检测,

  • 从应用角度讲,YOLO非常贴合实际应用,很多人基于YOLO创业并产生收益,比如智能驾驶、安全监控、医疗检测等
  • 从研究角度讲,YOLO供发布10个版本,围绕效果和速度进行了频繁的迭代与优化,知识体系非常深入。

如果读者对YOLO有兴趣,我后期会持续更新,也可以通过站内搜索持续了解。

如果您还有时间,可以看看我的其他文章:

《AI—工程篇》

AI智能体研发之路-工程篇(一):Docker助力AI智能体开发提效

AI智能体研发之路-工程篇(二):Dify智能体开发平台一键部署

AI智能体研发之路-工程篇(三):大模型推理服务框架Ollama一键部署

AI智能体研发之路-工程篇(四):大模型推理服务框架Xinference一键部署

AI智能体研发之路-工程篇(五):大模型推理服务框架LocalAI一键部署

《AI—模型篇》

AI智能体研发之路-模型篇(一):大模型训练框架LLaMA-Factory在国内网络环境下的安装、部署及使用

AI智能体研发之路-模型篇(二):DeepSeek-V2-Chat 训练与推理实战

AI智能体研发之路-模型篇(三):中文大模型开、闭源之争​​​​​​​ 

AI智能体研发之路-模型篇(四):一文入门pytorch开发

AI智能体研发之路-模型篇(五):pytorch vs tensorflow框架DNN网络结构源码级对比​​​​​​​ 

AI智能体研发之路-模型篇(六):【机器学习】基于tensorflow实现你的第一个DNN网络​​​​​​​

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微服务架构-微服务架构的挑战与微服务化的具体时机

目录 一、微服务架构的挑战 1.1 概述 1.2 服务拆分 1.3 开发挑战 1.4 测试挑战 1.4.1 开箱即用、一键部署的集成环境 1.4.2 测试场景和测试确定性 1.4.3 微服务相关的非功能测试 1.4.4 自动化测试 1.5 运维挑战 1.5.1 监控 1.5.2 部署 1.5.3 问题追查 1.5.4 依赖管…

chrome调试手机网页

前期准备 1、 PC端安装好chrmoe浏览器 2、 安卓手机安装好chrmoe浏览器 3、 数据线 原文地址:https://lengmo714.top/343880cb.html 手机打开调试模式 进入手机设置,找到开发者模式,然后启用USB调试 打开PC端chrome调试功能 1、点击chr…

视频汇聚平台EasyCVR对接GA/T 1400视图库:结构化数据(人员/人脸、车辆、物品)对象XMLSchema描述

在信息化浪潮席卷全球的背景下,公安信息化建设日益成为提升社会治理能力和维护社会稳定的关键手段。其中,GA/T 1400标准作为公安视频图像信息应用系统的核心规范,以其结构化数据处理与应用能力,为公安信息化建设注入了强大的动力。…

webpack5零基础入门-19HMR的应用

1.定义 HMR即HotModuleReplacement 开发时,当我们修改了其中一个模块的代码webpack默认会将所有模块重新打包编译,速度很慢所以我们需要做到修改摸个模块代码,只对这个模块的代码重新打包编译,其他模块不变,这样打包…

【excel】设置二级联动菜单

文章目录 【需求】在一级菜单选定后,二级菜单联动显示一级菜单下的可选项【步骤】step1 制作辅助列1.列转行2.在辅助列中匹配班级成员 之前做完了 【excel】设置可变下拉菜单(一级联动下拉菜单),开始做二级联动菜单。 【需求】在…

算法(六)计数排序

文章目录 计数排序技术排序简介算法实现 计数排序 技术排序简介 计数排序是利用数组下标来确定元素的正确位置的。 假定数组有10个整数,取值范围是0~10,可以根据这有限的范围,建立一个长度为11的数组。数组下标从0到10,元素初始…

【C++】哈希(2万字)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 unordered系列关联式容器 unordered_map unordered_map的文档介绍 unordered_map的接口说明 unordered_set 底层结构 哈希概念 哈希冲突 哈希函数 哈希…

【康耐视国产案例】Nvidia/算能+智能AI相机:用AI驱动 | 降低电动车成本的未来之路

受环保观念影响、政府激励措施推动与新能源技术的发展,消费者对电动汽车(EV)的需求正在不断增长,电动汽车已经成为了未来出行方式的重要组成部分。然而,电动汽车大规模取代燃油汽车的道路还很漫长。最大的障碍就是电动汽车的售价相对过高。尽…

新设立湖北投资管理公司流程和要求

在湖北投资管理企业进行注册时,需要准备一系列的材料并按照一定的流程进行办理。本文将从注册材料及注册流程两方面来介绍,帮助您了解注册投资管理企业的步骤和所需的具体材料。详情致电咨询我或者来公司面谈。 新注册材料要求: 企业名称申请书:要求提供…

vue路由跳转之【编程式导航与传参】

vue路由有两种跳转方式 ----> 编程式与声明式,本文重点讲解vue路由的【编程式导航 】【编程式导航传参 ( 查询参数传参 & 动态路由传参 ) 】等内容,并结合具体案例让小伙伴们深入理解 ,彻底掌握!创作不易,需要的…

汇编:调用C函数

在32位汇编程序中可以调用C函数;这种做法在很多情况下是有用的,尤其是在汇编程序需要与C代码进行交互或利用C语言的库函数时。下面是一些情况下使用汇编调用C函数的常见情景: ①优化性能:某些特定的任务可能用汇编语言编写更有效率…

[Linux]重定向

一、struct file内核对象 struct file是在内核中创建,专门用来管理被打开文件的结构体。struct file中包含了打开文件的所有属性,文件的操作方法集以及文件缓冲区(无论读写,我们都需要先将数据加载到文件缓冲区中。)等…

POP —— Nodes DOP

POP Advect by Volumes —— 使用速度场驱动粒子 此节点被设计为更容易通过流体来驱动粒子,通常流体被单独模拟并从磁盘上读取速度场;此操作将修改force、vel、P属性; Update Force,调整粒子的加速度,类似POP Force&a…

RAID技术迭代、原理对比、产品梳理(HCIA)

目录 一、RAID技术迭代 传统RAID LUN虚拟化2.0 工作原理: 块虚拟化2.0 为什么有RAID2.0? RAID2.0实现原理: RAID-TPRAID 7 华为RAID-TP技术 RAID的4种工作状态 RAID算法 普通RAID算法 华为动态RAID算法 保险箱盘(存掉…

el-table中的信息数据过长 :show-overflow-tooltip=‘true‘**

可以在 el-table-column中添加 :show-overflow-tooltip‘true’

数字孪生仿真渲染引擎EasyTwin全新升级,焕新、多元、优质、高效一步到位!

EasyTwin作为数字孪生仿真渲染引擎,自2023年进入公测以来,致力于实现低成本零代码操作。在今年年初,我们重新回归业务场景,将产品定位从“融合渲染”转变为“仿真渲染”,面向数字孪生仿真渲染领域推出全新版本&#xf…

Optional类

一、概述 泛型类、java8引进的、java.util包里 二、作用 解决空指针异常带来的不便 三、做法 将对象封装为一个Optional对象,如果封装的对象为空(即该对象不存在),可以使用默认值和或者执行默认操作 四、方法 1、empty() 创…

【Qt秘籍】[006]-Qt 的 Hello World程序-编程第一步

"Hello,World!" 中文意思是“你好,世界”。 因为 The C Programming Language 中使用它做为第一个演示程序,后来很多程序员在学习编程或进行设备调试时延续了这一习惯。 下面,我们也将演示Qt中的"Hello World!" 我们先创…

【脚本篇】---spyglass lint脚本

目录结构 sg_lint.tcl (顶层) #1.source env #date set WORK_HOME . set REPORT_PATH ${WORK_HOME}/reports puts [clock format [clock second] -format "%Y-%m-%d %H:%M:%S"] #2.generate source filelist #3.set top module puts "##…

Ehcache Java 缓存框架

详解 下图是 Ehcache 在应用程序中的位置: Ecache 是一个广泛使用的 Java 缓存框架,能够有效提升应用性能,并减少与后端数据库的交互次数。它采用了一系列高级缓存策略,包括内存缓存、磁盘缓存、分布式缓存等,并提供了…