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

实战 | 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 在延迟和准确性方面都有显著提高。

图片

      

YOLOv10自定义数据集训练

    【1】准备数据集。数据集标注使用LabelImg,具体使用和标注可参考下面文章:

实战 | YOLOv8自定义数据集训练实现手势识别 (标注+训练+预测 保姆级教程)

    这里直接给出数据集,大家可以自行下载:

https://github.com/AarohiSingla/YOLOv10-Custom-Object-Detection/tree/main/custom_dataset/dataset

    数据集包含300张图片样本,训练集210张,验证集60张,测试集30张。

图片

图片

图片

图片

图片

    类别只有1类,所以序号都为0。

    【2】配置训练环境。

    ① 下载yoloV10项目:

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

    ② 解压后切换到yoloV10目录下,安装依赖项:

cd yolov10
pip install .

    ③ 下载预训练模型:

图片

import osimport urllib.request
# Create a directory for the weights in the current working directoryweights_dir = os.path.join(os.getcwd(), "weights")os.makedirs(weights_dir, exist_ok=True)
# URLs of the weight filesurls = [    "https://github.com/jameslahm/yolov10/releases/download/v1.0/yolov10n.pt",    "https://github.com/jameslahm/yolov10/releases/download/v1.0/yolov10s.pt",    "https://github.com/jameslahm/yolov10/releases/download/v1.0/yolov10m.pt",    "https://github.com/jameslahm/yolov10/releases/download/v1.0/yolov10b.pt",    "https://github.com/jameslahm/yolov10/releases/download/v1.0/yolov10x.pt",    "https://github.com/jameslahm/yolov10/releases/download/v1.0/yolov10l.pt"]
# Download each filefor url in urls:    file_name = os.path.join(weights_dir, os.path.basename(url))    urllib.request.urlretrieve(url, file_name)    print(f"Downloaded {file_name}")

图片

    【3】模型训练

yolo task=detect mode=train epochs=100 batch=16 plots=True model=weights/yolov10n.pt data=custom_data.yaml

    custom_data.yaml配置如下:

图片

    【4】 模型推理:

    图片推理:

yolo task=detect mode=predict conf=0.25 save=True model=runs/detect/train/weights/best.pt source=test_images_1/veh2.jpg

​​​​​​​

from ultralytics import YOLOv10import supervision as svimport cv2
classes = {0: 'licence'}
model = YOLOv10('runs/detect/train/weights/best.pt')image  = cv2.imread('test_images_1/veh2.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()

图片

    视频推理:

yolo task=detect mode=predict conf=0.25 save=True model=runs/detect/train/weights/best.pt source=b.mp4
from ultralytics import YOLOv10import supervision as svimport cv2
classes = {0: 'licence'}
model = YOLOv10('runs/detect/train/weights/best.pt')
def predict_and_detect(image):    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    )    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 = 'b.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()

图片

—THE END—

相关文章:

实战 | YOLOv10 自定义数据集训练实现车牌检测 (数据集+训练+预测 保姆级教程)

导读 本文主要介绍如何使用YOLOv10在自定义数据集训练实现车牌检测 (数据集训练预测 保姆级教程)。 YOLOv10简介 YOLOv10是清华大学研究人员在Ultralytics Python包的基础上,引入了一种新的实时目标检测方法,解决了YOLO以前版本在后处理和模型架构方面…...

自定义类型:结构体+结构体内存对齐+结构体实现位段

结构体内存对齐实现位段 一.结构体1.结构体的声明2.结构体变量成员访问操作符3.结构体传参4.匿名结构体5.结构的自引用 二.结构体内存对齐1.对齐规则2.为什么存在内存对齐?3.修改默认对齐数 三.结构体实现位段1.什么是位段2.位段的内存分配3.位段的跨平台问题4.位段…...

0109__strip(1) command

strip(1) command_linux strip-CSDN博客...

英码科技推出鸿蒙边缘计算盒子:提升国产化水平,增强AI应用效能,保障数据安全

当前,随着国产化替代趋势的加强,鸿蒙系统Harmony OS也日趋成熟和完善,各行各业都在积极拥抱鸿蒙;那么,边缘计算要加快实现全面国产化,基于鸿蒙系统开发AI应用势在必行。 关于鸿蒙系统及其优势 鸿蒙系统是华…...

从军事角度理解“战略与战术”

战略与战术,均源于军事术语。 战略(Strategy),源自希腊语词汇“strategos(将军)”和“strategia(军事指挥部,即将军的办公室和技能)”。指的是指挥全局性作战规划的谋略…...

最短路径——迪杰斯特拉与弗洛伊德算法

一.迪杰斯特拉算法 首先对于最短路径来说:从vi-vj的最短路径,不用非要经过所有的顶点,只需要找到路径最短的路径即可; 那么迪杰斯特拉的算法:其实也就与最小生成树的思想类似,找到较小的,然后…...

6.7.11 一种新的迁移学习方法可提高乳房 X 线摄影筛查中乳腺癌的诊断率

分割是一种将图像分割成离散区域的技术,以便将感兴趣的对象与周围环境分开。为了制定治疗计划,分割可以帮助医生测量乳房中的组织量。 二元分类问题的目的是将输入数据分为两组互斥的数据。在这种情况下,训练数据根据要解决的问题以二进制格…...

【Proteus8.16】Proteus8.16.SP3.exe的安装包,安装方法

下载: 链接:https://pan.baidu.com/s/14ZlETF7g4Owh8djLaHwBOw?pwd2bo3 提取码:2bo3 管理员打开proteus8.16.SP3.exe一路装就行了,许可证选Licence2.lxk,点安装后关闭,然后继续装完。 然后打开Patch-Proteus-8.16-…...

17、matlab实现均值滤波、中值滤波、Butterworth滤波和线性相位FIR滤波

1、创建信号 1)创建正余弦信号、噪声信号和混合信号 原始正余弦信号公式:Signal1 sin(2*pi*20* t) sin(2*pi*40* t) sin(2*pi*60* t) 高斯分布的白噪声:NoiseGauss [randn(1,2000)] 均匀分布的白噪声:[rand(1,2000)] 正余弦…...

【Autopilot】没有自动添加本地管理员的问题处理

【问题】某公司选用了D记的笔记本电脑,约定出厂就预配置好Autopilot,当时向D记提供了三个信息: 1. M365的租户ID 2. 公司域名信息 3. Group Tag (某公司为跨国公司,通过Group Tag来区分国家,比如CHN-中国,L…...

【C#学习笔记】属性和字段

文章目录 前言属性和字段的区别字段访问修饰符和关键字定义变量类型的定义变量命名变量的赋值 属性 不同的使用情况 前言 最近在工作的过程中常常会觉得自己在程序设计方面的能力还是有欠缺。例如一直对于变量的声明感到不足,在工作中为了图方便总是直接public定义…...

最佳实践的实践 - API 不应将 HTTP 重定向到 HTTPS

原文:jviide - 2024.05.23 TL;DR: 与其将 API 调用从 HTTP 重定向到 HTTPS,不如让失败显而易见。要么完全禁用 HTTP 接口,要么返回明确的 HTTP 错误响应,并撤销通过未加密连接发送的 API 密钥。遗憾的是,许多知名的 A…...

四种跨域解决方案

文章目录 1.引出跨域1.基本介绍2.具体演示1.启动之前学习过的springboot-furn项目2.浏览器直接访问 [localhost:8081/furns](http://localhost:8081/furns) 可以显示信息3.启动前端项目,取消请求拦截器,这样设置,就会出现跨域4.跨域原因 2.跨…...

移动端投屏到大屏幕的操作详解

如果你懒得折腾电脑、电视或其他大屏设备上的影视软件安装及配置,可以选择直接在手机端上将影片投屏到电脑、电视或其他大屏设备上,这里给大家分享三种手机投屏的方法。 系统自带的投屏功能 不管是安卓、鸿蒙还是苹果操作系统,都自带了无线…...

【环境搭建】3.阿里云ECS服务器 安装Redis

在阿里云的 Alibaba Cloud Linux 3.2104 LTS 64位系统上安装 Redis 可以通过以下步骤完成: 1.更新系统软件包: 首先,更新系统软件包以确保所有软件包都是最新的: sudo yum update -y2.安装编译工具和依赖项: Redis…...

动态语言的开源编译器汇总

对于动态语言而言,我们通常不会使用传统意义上的“编译器”,因为动态语言往往是在运行时解释执行的,或者被转换为中间形式(如字节码),再由虚拟机执行。不过,为了性能考虑,现代动态语…...

Linux防火墙配置001

Linux防火墙主要用于控制网络流量,保护系统安全。在Linux中,有几种不同的防火墙管理工具,其中最常见的是iptables和firewalld。本章主要讲述如何关闭防火墙。 操作系统: CentOS Stream 9 操作步骤: 关闭防火墙&…...

Tomcat概述及部署

目录 一.Tomcat概述 1.介绍 2.使用场景 3.组件构成 4.组件结构 5.请求过程 二.Tomcat部署 1.关闭防火墙 2.下载安装JDK 3.安装启动tomcat 4.部署虚拟主机 4.1.创建 xy101 和 xy102 项目目录和文件 4.2.修改 Tomcat 主配置文件 server.xml 一.Tomcat概述 1.介绍 …...

[Vue3:Vite构建项目]:安装router实现登录页面路由跳转

文章目录 一:前置依赖查看依赖安装vite npm create vitelatest sys-instruction-0607 --template vue-ts安装路由:npm install vue-router4安装elementUI:npm install element-plus --save 二:配置文件:views&#xff…...

概率论与数理统计,重要知识点——全部公式总结

二、一维随机变量及其分布 五个分布参考另外一篇文章 四、随机变量的数字特征 大数定理以及中心极限定理 六、数理统计...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...