python:浅谈yolov10对比yolov5的方便之处

news/2024/9/18 12:23:18/ 标签: python, YOLO, 目标检测

文章目录

  • 前言
  • 一、环境配置
  • 二、数据标注
  • 三、配置文件
  • 四、训练数据
  • 五、数据预测
  • 总结


前言

YOLOv10‌是YOLO系列的最新版本,旨在提高推理速度并减少计算开销。它是实时目标检测领域中的一项重要进展,通过移除非最大值抑制(NMS)并采用双重标签分配、空间信道解耦向下采样和排序引导块设计,实现了更高的性能和效率。简单来说就是相比之前的框架更快捷,更高效,更高准确度,闲话少说,对比我之前yolov5操作文章连接方便了多少吧,这里我挑一些重点讲一下。


一、环境配置

推荐使用conda

python">conda create -n yolov10 python=3.9
conda activate yolov10
pip install -r requirements.txt
pip install -e .
pip install ultralytics 

cuda安装以及代码确定

python">import torch# 检查 CUDA 是否可用
cuda_available = torch.cuda.is_available()
# 返回值为Ture代表可用GPU

二、数据标注

首先,标注数据还是推荐使用labelimg,还是以我之前的文章案例为例,识别图片数字的需求
在这里插入图片描述
这里选择yolo格式,这样保存的数据格式是txt

三、配置文件

拉取yolov10代码

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

同级路径创建datasets文件夹,放入标注好的图片数据,如图:
在这里插入图片描述

train文件放入训练的数据,val放入预测图片数据,标注好保存的txt文件放入labels文件中


创建test.yaml文件,写入代码:

python">path: test # dataset root dir
train: images/train # train images (relative to 'path') 128 images
val: images/val # val images (relative to 'path') 128 images
test: # test images (optional)# Classes
names:0: zero1: one2: two3: three4: four5: five6: six7: seven8: eight9: nine

四、训练数据

在终端:

python">yolo task=detect mode=train data=test.yaml model=yolov10m.pt epochs=100 batch=16 device=0 plots=True

yolo:运行yolo程序
task=detect:指定任务为检测(detect)
mode=train:指定模式为训练(train)
data=test.yaml:指定你自己的数据集 yaml 文件
model=yolov10m.pt: 指定下载的yolov10预训练权重文件
epochs=100:设置训练轮次,
batch=4:设置训练集加载批次,主要是提高训练速度,具体得看你的显卡或者内存容量。如果显存大,则可以设置大一些。或许训练再详细讲解如何设置
device=0:指定训练设备,如果没有gpu,则令device=cpu,如果有一个gpu,则令device=0,有两个则device=0,1以此类推进行设置。


训练完成之后会形成best.pt文件,记住路径,如图:
在这里插入图片描述
到这里基本已经成功了,接下来测试我们训练出来的到底准不准吧


五、数据预测

同级路径创建detect.py,代码如下:

python"># coding=utf-8
from ultralytics import YOLOv10
import supervision as sv
import cv2
from loguru import loggerclasses = {0: 'zero',1: 'one',2: 'two',3: 'three',4: 'four',5: 'five',6: 'six',7: 'seven',8: 'eight',9: 'nine',
}model = YOLOv10('runs/detect/train9/weights/best.pt')
image = cv2.imread('datasets/group1/images/val/1.png')# 预测数据值
results = model(source=image, conf=0.25, verbose=False,device='cpu')[0]
detections = sv.Detections.from_ultralytics(results)
distance_list = []
for i in detections:distance_list.append([i[0][0],i[-3]])
sorted_list = sorted(distance_list, key=lambda x: x[0])
distance_list.sort(key=lambda x: x[0])
logger.debug('预测结果: '+''.join([str(i[-1]) for i in sorted_list]))# 使用标注器显示图片
bounding_box_annotator = sv.BoundingBoxAnnotator()
label_annotator = sv.LabelAnnotator()
labels = [f"{classes[class_id]} {confidence:.2f}"for class_id, confidence in zip(detections.class_id, detections.confidence)
]
annotated_image = bounding_box_annotator.annotate(image.copy(), detections=detections)
annotated_image = label_annotator.annotate(annotated_image,detections=detections,labels=labels)
cv2.imshow('test', annotated_image)
cv2.waitKey()
cv2.destroyAllWindows()

运行如下图,预测正确,收工
在这里插入图片描述


总结


总体操作流程下来确实比yolov5方便了不少,而且框架代码封装性高,扩展性高。


http://www.ppmy.cn/news/1519472.html

相关文章

Cesium 台湾省白膜数据渲染

Cesium 台湾省白膜数据渲染 效果图

一份详细的EdgeOne安全配置指南与教程

前言 腾讯云EdgeOne,作为一款集成CDN加速和全方位安全防护于一体的产品,不仅可以确保用户访问的流畅与快速响应,还能有效抵御DDoS攻击、WEB攻击等网络攻击,本文就以上功能详细介绍如何配置及应用,希望可以让大家直观感…

加密与安全_前后端通过AES-CBC模式安全传输数据

文章目录 Pre概述前端加密是否有意义?环境准备加密方法、MODE和PADDING的选择前端后端应用:从传输到解密的全过程安全性增强动态生成密钥和初始向量1. 前端:动态生成密钥和IV2. 后端:解密动态密钥和IV 结语 Pre 加密与安全_解密A…

SprinBoot+Vue学生选课微信小程序的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue3.6 uniapp代码 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平…

[M二叉树] lc236. 二叉树的最近公共祖先(dfs+二叉搜索树)

文章目录 1. 题目来源2. 题目解析 1. 题目来源 链接:236. 二叉树的最近公共祖先 相似题: [M二叉树] lc235. 二叉搜索树的最近公共祖先(dfs二叉搜索树) 题单: 【题单】链表、二叉树与一般树(前后指针/快慢指针/DFS/BFS/直径/…

这才是老板喜欢的数据分析简历

速创猫今天给大家分享的是应届毕业生数据分析简历优化案例,希望对大家求职有帮助。速创猫总结了以下七条简历制作干货,希望对大家有帮助: 明确目标岗位:在简历的开头,清晰地标明你申请的职位和行业,让HR一眼…

华为AR路由使用PPPoE获取IPv6地址上网

公司搬家,从原有的思科设备换成华为AR路由器,有空研究了下华为AR路由器通过PPPoE拨号获取v6地址,且通过DHCPv6-PD给内网客户端分配地址。 全局开启IPv6 ipv6基本PPPoE配置 interface Dialer1link-protocol pppppp chap user 011111063930p…

强化学习与自动驾驶研究内容

行业标准 2021.7,《自动驾驶数据记录系统标准制定思路及进展》,中汽中心 汽车标准化研究所,http://www.catarc.org.cn/upload/202107/16/202107161009405028.pdf 《智能网联汽车 术语和定义》,国家标准,https://www.au…

无人机科普,民用用途!!!

在民用领域,无人机凭借其独特的飞行能力和广泛的应用场景,已成为现代科技的重要组成部分。 1. 摄影和摄像 航拍:无人机配备高分辨率相机或摄像机,能够拍摄到独特的空中视角,广泛应用于风景拍摄、建筑摄影、活动录像等…

[001-07-001].Redis7缓存双写一致性之更新策略探讨

1、面试题: 1.只要使用缓存,就可能会涉及到redis缓存与数据库双存储双写,只要是双写,就存在数据一致性问题,那么是如何解决数据一致性问题的2.双写一致性,你先动缓存redis还是数据库MySQL,哪一个…

AI深度学习项目-yolo4_tiny 垃圾分类识别系统

项目概述 目标 本项目旨在开发一个高效的垃圾分类识别系统,利用深度学习技术特别是YOLOv4-tiny版本来实现垃圾的自动分类。YOLOv4-tiny作为YOLOv4的一个轻量化版本,在保证较高精度的同时,能够提供更快的检测速度,非常适合资源受…

10款文档管理系统,助力降本增效

比较好用的 10 款文档管理系统推荐:PingCode、Worktile、语雀、联想Filez企业网盘、360亿方云、DocuPhase 、M-Files 、LogicalDOC、Revver、Box。 在现代企业环境中,管理大量文档和数据往往让人头疼。不仅需要维护信息的更新和可访问性,还要…

FastAPI+Vue3零基础开发ERP系统项目实战课 20240828上课笔记 第一个接口

遗留的问题 2、Python面向对象:类,对象,方法,继承3、FastAPI4、MySQL85、SQLModel,和FastAPI框架是同一个作者,两者结合比较好用,但是学习成本较高,使用难度稍大6、Vue37、Tailwind…

nerf论文代码理解

近年来,生成式AI(AGI)快速发展,各类生成式模型层出不群,但我更觉得具有物理意义的生成式AI将是未来革命性技术。因此也在抽空看看关于三维重建的知识,这篇文章就是记录我对nerf的理解。 一、论文理解 首先,需要知道ne…

如何防范ddos 攻击

防护DDoS(分布式拒绝服务)攻击是一个复杂且多方面的任务,需要综合考虑网络架构、硬件设备、软件配置以及安全策略等多个方面。以下是一些主要的防护DDoS攻击的方法: 1. 流量清洗(Traffic Scrubbing) 定义…

Spring AOP切面类的封装与解析

Spring AOP切面类的封装与解析 一、引言 在软件开发中,随着系统复杂度的增加,代码中会频繁出现一些横切关注点(Cross-cutting Concerns),如日志记录、安全认证、事务管理等。这些关注点并非业务逻辑的一部分&#xf…

Java笔试面试题AI答之面向对象(10)

文章目录 55.解释Java可以覆盖静态方法吗?如果我在子类中创建相同的方法会有编译时错误吗?56.解释为什么Java不支持运算符重载?57.实现Java写一个Singleton案例 ?58.简述如何使用Java实现内部类 ?实现内部类的基本语法…

django外键表查询存储删除

查询 之前用get 现在用filter,get返回对象,filter返回列表django model的get和filter方法的区别_django模型objects.get-CSDN博客 存储 删除

django外键表查询

Django外键(ForeignKey)操作以及related_name的作用-CSDN博客 django模型中外键操作_django的model的contain外键-CSDN博客 通过基本表可以查外键表 删基本表可以删外键表

神策埋点 sensorsdata.es6.min.js、sensorsdata.min.js 触发eslint 语法检查,导致打包不成功

问题描述: 在使用神策埋点时,下载的web js sdk,打包时eslint 语法检查,会导致打包不成功。npm start没问题。 主要错误是: Line 1:204272: Expected an assignment or function call and instead saw an expression …