一、YOLO V10安装、使用、训练大全

YOLO V10安装、使用、训练大全

  • 一、下载官方源码
  • 二、配置conda环境
  • 三、安装YOLOV10依赖
  • 四、使用官方YOLO V10模型
    • 1.下载模型
    • 2.使用模型
      • 2.1 图片案例
  • 五、制作数据集
    • 1.数据集目录结构
    • 2.标注工具
      • 2.1 安装标注工具
      • 2.2 运行标注工具
      • 2.3 设置自动保存
      • 2.4 切换yolo模式
      • 2.5 开始标注
      • 2.6 数据集准备
        • 2.6.1 数据集文件夹准备
        • 2.6.2 xml格式转yolo的txt训练格式
    • 3.训练
      • 3.1 创建训练配置文件
      • 3.2 命令训练
      • 3.3 代码训练
    • 4.测试模型
      • 4.1 图片
        • 4.1.1 命令行
        • 4.1.2 代码
      • 4.2 视频
        • 4.2.1 命令行
        • 4.2.2 代码

一、下载官方源码

  • 源码点击下载

二、配置conda环境

# 1.在conda创建python3.9环境
conda create -n yolov10 python=3.9
# 2.激活切换到创建的python3.9环境
conda activate yolov10

三、安装YOLOV10依赖

# 1.切换到yolov10源码根目录下,安装依赖
# 注意:会自动根据你是否有GPU自动选择pytorch版本进行按照,这里不需要自己去选择pytorch和cuda按照,非常良心
pip install -r requirements.txt -i https://pypi.doubanio.com/simple
# 2.运行下面的命令,才可以在命令行使用yolo等命令
pip install -e .

四、使用官方YOLO V10模型

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
  • 下载完放入源码根目录

2.使用模型

2.1 图片案例

import cv2
from ultralytics import YOLOv10# 加载模型
model = YOLOv10("yolov10m.pt")# 批量运算
results = model(["./datasets/group1/images/train/9597185011003UY_20240610_092234_555.png"], stream=True)for result in results:boxes_cls_len = len(result.boxes.cls)if not boxes_cls_len:# 没有检测到内容continuefor boxes_cls_index in range(boxes_cls_len):# 获取类别idclass_id = int(result.boxes.cls[boxes_cls_index].item())# 获取类别名称class_name = result.names[class_id]# 获取相似度similarity = result.boxes.conf[boxes_cls_index].item()# 获取坐标值,左上角 和 右下角:lt_rb的值:[1145.1351318359375, 432.6763000488281, 1275.398681640625, 749.5224609375]lt_rb = result.boxes.xyxy[boxes_cls_index].tolist()# 转为:[[1145.1351318359375, 432.6763000488281], [1275.398681640625, 749.5224609375]]lt_rb = [[lt_rb[0], lt_rb[1]], [lt_rb[0], lt_rb[1]]]print("类别:", class_name, "相似度:", similarity, "坐标:", lt_rb)# 图片展示annotated_image = result.plot()annotated_image = annotated_image[:, :, ::-1]if annotated_image is not None:cv2.imshow("Annotated Image", annotated_image)cv2.waitKey(0)cv2.destroyAllWindows()

五、制作数据集

  • 一般会将所有图片放到一个文件夹,打完标注后,从总的文件夹中,分别分不同的图片到训练集和数据集

1.数据集目录结构

在这里插入图片描述

2.标注工具

  • Labelimg是一款开源的数据标注工具,可以标注三种格式。
    • VOC标签格式,保存为xml文件。
    • yolo标签格式,保存为txt文件。
    • createML标签格式,保存为json格式。

2.1 安装标注工具

pip install labelimg -i https://pypi.doubanio.com/simple

2.2 运行标注工具

在这里插入图片描述

  • labelimg:运行工具
  • images:图片文件夹路径
  • classes.txt:类别的文件
labelimg images label/classes.txt

在这里插入图片描述

2.3 设置自动保存

在这里插入图片描述

2.4 切换yolo模式

在这里插入图片描述

2.5 开始标注

在这里插入图片描述
在这里插入图片描述

标注完退出软件即可

2.6 数据集准备

2.6.1 数据集文件夹准备

在这里插入图片描述

yolo的label文件内容:<class_index> <x_center> <y_center> <width> <height>

2.6.2 xml格式转yolo的txt训练格式
  • 运行下面脚本,就会转换
import os
import xml.etree.ElementTree as ETclasses = ['hero', 'monster', 'goods']def convert(size, box):dw = 1. / size[0]dh = 1. / size[1]x = (box[0] + box[1]) / 2.0y = (box[2] + box[3]) / 2.0w = box[1] - box[0]h = box[3] - box[2]x = x * dww = w * dwy = y * dhh = h * dhreturn (x, y, w, h)def convert_annotation(xml_file_paths, is_delete=False):"""将某个文件夹下面所有的xml转换为yolo格式"""for xml_file_path in xml_file_paths:xml_file_dir, xml_file_name = os.path.split(xml_file_path)in_file = open(xml_file_path, 'r')out_file = open(os.path.join(xml_file_dir, xml_file_name[:-4]) + '.txt', 'w')tree = ET.parse(in_file)root = tree.getroot()size = root.find('size')w = int(size.find('width').text)h = int(size.find('height').text)for obj in root.iter('object'):cls = obj.find('name').textif cls not in classes:print(cls)continuecls_id = classes.index(cls)xmlbox = obj.find('bndbox')b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text),float(xmlbox.find('ymax').text))bb = convert((w, h), b)out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')def traverse_folder(folder_path):"""获取某个文件夹下面所有的xml文件"""for root, dirs, files in os.walk(folder_path):for file in files:if file.lower().endswith(('.xml')):yield os.path.join(root, file)if __name__ == '__main__':convert_annotation(traverse_folder(os.path.join(".", "datasets", "group1", "labels")))

在这里插入图片描述

  • txt格式就是yolo训练的格式

3.训练

3.1 创建训练配置文件

  • group1.yaml:文件和datasets文件夹同一个目录
path: group1 # 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: hero1: monster2: goods

3.2 命令训练

yolo task=detect mode=train data=group1.yaml model=yolov10m.pt epochs=100 batch=16 device=cpu plots=True
  • 上述各个参数解释如下,请根据自己的情况修改。
    • yolo:运行yolo程序
    • task=detect:指定任务为检测(detect)。YOLO模型可以用于不同的任务,如检测、分类等,这里明确指定为检测任务。
    • mode=train:指定模式为训练(train)。这意味着你将使用提供的数据集来训练模型。
    • data=group1.yaml:指定你自己的数据集yaml文件
    • model=yolov10m.pt: 指定下载的yolov10预训练权重文件
    • epochs=100:设置训练轮次,可以先设置一个5轮或者10轮,测试看看,顺利进行再设置大一点进行下一步训练。
    • batch=4:设置训练集加载批次,主要是提高训练速度,具体得看你的显卡或者内存容量。如果显存大,则可以设置大一些。或许训练再详细讲解如何设置
    • device=0:指定训练设备,如果没有gpu,则令device=cpu,如果有一个gpu,则令device=0,有两个则device=0,1以此类推进行设置。
    • plots:指定在训练过程中生成图表(plots)。这可以帮助你可视化训练进度,如损失函数的变化等。

3.3 代码训练

  • 待补充

4.测试模型

4.1 图片

4.1.1 命令行
yolo task=detect mode=predict conf=0.25 save=True model=runs/detect/train/weights/best.pt source=test_images_1/veh2.jpg
  • 上述各个参数解释如下,请根据自己的情况修改。
    • yolo:运行yolo程序
    • task=detect:指定任务为检测(detect)。YOLO模型可以用于不同的任务,如检测、分类等,这里明确指定为检测任务。
    • mode=predict:设置模式为预测(predict)。这意味着模型将使用提供的权重和图像进行预测,而不是进行训练。
    • conf=0.25:设置置信度阈值为0.25。这意味着只有模型预测置信度大于或等于0.25的检测结果才会被考虑。
    • save=True:指示模型保存预测结果。这通常会将结果保存为图像文件,其中检测到的对象会被标记出来。
    • model=runs/detect/train/weights/best.pt:指定模型权重文件的位置。这里,best.pt是训练过程中保存的最佳权重文件,用于进行预测。
    • source=test_images_1/veh2.jpg:指定要检测的源图像。这里,veh2.jpg是要进行对象检测的图像文件。
4.1.2 代码
from ultralytics import YOLOv10
import supervision as sv
import cv2classes = {0: 'licence'}model = YOLOv10('runs/detect/train6/weights/best.pt')
image = cv2.imread('veh2.jpg')results = model(source=image, conf=0.25, verbose=False)[0]
detections = sv.Detections.from_ultralytics(results)
# 使用新的标注器
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('result', annotated_image)
cv2.waitKey()
cv2.destroyAllWindows()

4.2 视频

4.2.1 命令行
yolo task=detect mode=predict conf=0.25 save=True model=runs/detect/train/weights/best.pt source=b.mp4
  • 上述各个参数解释如下,请根据自己的情况修改。
    • yolo:运行yolo程序
    • task=detect:指定任务为检测(detect)。YOLO模型可以用于不同的任务,如检测、分类等,这里明确指定为检测任务。
    • mode=predict:设置模式为预测(predict)。这意味着模型将使用提供的权重和图像进行预测,而不是进行训练。
    • conf=0.25:设置置信度阈值为0.25。这意味着只有模型预测置信度大于或等于0.25的检测结果才会被考虑。
    • save=True:指示模型保存预测结果。这通常会将结果保存为图像文件,其中检测到的对象会被标记出来。
    • model=runs/detect/train/weights/best.pt:指定模型权重文件的位置。这里,best.pt是训练过程中保存的最佳权重文件,用于进行预测。
    • source=b.mp4:指定要检测的源视频。
4.2.2 代码
from ultralytics import YOLOv10
import supervision as sv
import cv2classes = {0: 'licence'}model = YOLOv10('runs/detect/train6/weights/best.pt')def predict_and_detect(image):results = model(source=image, conf=0.25, verbose=False)[0]detections = sv.Detections.from_ultralytics(results)# 使用新的标注器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)return annotated_imagedef 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 objectfourcc = cv2.VideoWriter_fourcc(*'MP4V')writer = cv2.VideoWriter(output_filename, fourcc, fps,(frame_width, frame_height))return writervideo_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:breakframe = predict_and_detect(img)writer.write(frame)cv2.imshow("frame", frame)if cv2.waitKey(1) & 0xFF == 27:  # 按下Esc键退出breakcap.release()
writer.release()

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

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

相关文章

Socket.D 开源网络应用协议,v2.5.9 发布(已有 java, py, js SDK)

Socket.D 协议&#xff1f; Socket.D 是一个基于事件和语义消息流的网络应用协议。在微服务、移动应用、物联网等场景&#xff0c;可替代 http、websocket 等。协议详情参考《官网介绍》。 支持&#xff1a; tcp, udp, ws, kcp 传输。 目前&#xff1a;java&#xff0c;kotli…

Python不使用元类的ORM实现

不使用元类的简单ORM实现 在 Python 中&#xff0c;ORM&#xff08;Object-Relational Mapping&#xff09;是一种将对象和数据库之间的映射关系进行转换的技术&#xff0c;使得通过面向对象的方式来操作数据库更加方便。通常&#xff0c;我们使用元类&#xff08;metaclass&a…

关于go和rust语言的对比

文章目录 前言Rust 的优势&#xff1a;Go 的优势&#xff1a;总结 前言 Go 和 Rust 是两种现代的系统级编程语言&#xff0c;它们各自拥有独特的特性和应用场景。以下是它们的一些主要区别&#xff1a; Rust 的优势&#xff1a; 内存安全&#xff1a;Rust 引入了所有权和借用…

香橙派5plus上跑云手机方案二 waydroid

前言 上篇文章香橙派5plus上跑云手机方案一 redroid(带硬件加速)说了怎么跑带GPU加速的redroid方案&#xff0c;这篇说下怎么在香橙派下使用Waydroid。 温馨提示 虽然能运行&#xff0c;但是体验下来只能用软件加速&#xff0c;无法使用GPU加速&#xff0c;所有会很卡。而且…

Pat乙级题解

文章目录 1~2021 ~ 4041~6061~8081~100101~125 1~20 1001 害死人不偿命的(3n1)猜想 B1002 写出这个数 (20 分) B1003 我要通过&#xff01; B1004 成绩排名 1005 继续(3n1)猜想 B1006 换个格式输出整数 B1007 素数对猜想 1008 数组元素循环右移问题 B1009 说反话 1010 一元多项…

linux磁盘分区管理

首先关机状态下&#xff0c;先配置硬盘 硬盘分区管理 识别硬盘 》分区规划 》 格式化 》 挂载使用 [rootlocalhost ~]# lsblk 查看硬盘 分区划分&#xff08;m帮助, p 查看分区, n 创建分区, d 删除分区, q 退出, w 保存&#xff0c; g gpt分区&#xff09; [roo…

绝区陆--大语言模型的幻觉问题是如何推动科学创新

介绍 大型语言模型 (LLM)&#xff08;例如 GPT-4、LLaMA-2、PaLM-2、Claude-2 等&#xff09;已展示出为各种应用生成类似人类文本的出色能力。然而&#xff0c;LLM 的一个鲜为人知的方面是它们倾向于“产生幻觉”或生成不正确或没有根据的事实陈述。我不认为这仅仅是一个限制…

快速排序算法Python实现

快速排序原理和步骤 快速排序是一种高效的排序算法&#xff0c;基于分治法&#xff08;Divide and Conquer&#xff09;来实现。其基本思想是通过一次排序将数组分成两部分&#xff0c;其中一部分的所有元素都小于另一部分&#xff0c;然后递归地对这两部分进行排序。以下是快…

前端构建工具(webpackvite)

这里写目录标题 构建工具webpack介绍配置文件简介entryoutputloaderbabel插件开发服务器&#xff08;webpack-dev-server&#xff09;soureMap vite 构建工具 当我们习惯了在node中编写代码的方式后&#xff0c;在回到前端编写html、css、js这些东西会感觉到各种的不便。比如:…

夏季户外综合征怎么预防

以下是一些预防夏季户外综合征的有效方法&#xff1a; 做好防晒措施&#xff1a; 涂抹高倍数的防晒霜&#xff0c;每隔 2 - 3 小时重新涂抹一次。比如选择 SPF50、PA 的防晒霜。佩戴宽边帽子、太阳镜和遮阳伞&#xff0c;减少阳光直射面部和眼睛。像渔夫帽、大檐帽能有效遮挡阳…

12-阿里云单细胞处理-PBMC(by-jmzeng)

scRNA_10X/seurat-v2/sup-patient1-PBMC.Rmd at master jmzeng1314/scRNA_10X (github.com) s04-运行seurat流程处理一万个单细胞转录组数据并自动化出报告_哔哩哔哩_bilibili #section 3已更新#「生信技能树」单细胞公开课2021_哔哩哔哩_bilibili 上传读取数据 可以配置租…

模拟型题目

题目类型&#xff1a; 给定操作&#xff0c;允许操作任意次 思路收集&#xff1a; 1.暴力遍历&#xff1a;如Problem - B - Codeforces 直接让每一个不同的进行操作 2.归纳&#xff1a;根据模拟来发现规律

RTK_ROS_导航(4):ROS中空地图的生成与加载

1. 地图加载 构建空白 Map 如下,以下为python代码,生成了output_image.pgm 文件 一般你在什么地方运行该代码,这个文件就生成在什么地方 import numpy as np size = 100 # 单位:m resulition = 0.05 # 单位:mw = round(size / resulition) IMAGE_DATA = np.zeros((w

ChatGPT:Swagger 的疑问

ChatGPT&#xff1a;Swagger 的疑问 这段代码是做什么的&#xff0c;为什么每个微服务的写法都一样 springdoc:api-docs:enabled: true # 1. 是否开启 Swagger 接文档的元数据path: /v3/api-docsswagger-ui:enabled: true # 2.1 是否开启 Swagger 文档的官方 UI 界面path: /sw…

音视频解封装demo:使用libmp4v2解封装(demux)出mp4文件中的h264视频数据和aac语音数据

1、README 前言 本demo是使用的mp4v2来将mp4文件解封装得到h264、aac的&#xff0c;目前demo提供的.a静态库文件是在x86_64架构的Ubuntu16.04编译得到的&#xff0c;如果想在其他环境下测试demo&#xff0c;可以自行编译mp4v2并替换相应的库文件&#xff08;libmp4v2.a&#…

HTTP 范围Range请求

HTTP 的 Range 请求使客户端能够要求服务器仅向其回传 HTTP 消息的一部分 HTTP 的 Range 请求头是 HTTP/1.1 协议的一个特性。它允许客户端请求仅传输资源的某个特定部分&#xff0c;而不是整个资源。 适用场景 支持随机访问的媒体播放器明确只需大型文件某部分的数据处理工具…

2022 RoboCom 世界机器人开发者大赛-高职组(国赛):智能管家

人上了年纪&#xff0c;记性就会变差&#xff0c;时常不得不翻箱倒柜找东西。智能照护中心现在请你做一个简单的智能管家程序&#xff0c;把老人家里的东西逐一编号&#xff0c;放进若干个收纳箱里。当然收纳箱也是有编号的&#xff0c;你的程序要记录下哪个东西放在哪个收纳箱…

R包: phyloseq扩增子统计分析利器

介绍 phyloseq包对多类型数据的综合软件&#xff0c;并其对这些数据提供统计分析和可视化方法。 微生物数据分析的主要挑战之一是如何整合不同类型的数据&#xff0c;从而对其进行生态学、遗传学、系统发育学、多元统计、可视化和检验等分析。同时&#xff0c;由于同行之间需要…

QT学习日记一

创建QT文件步骤 这是创建之后widget.cpp和widget.h文件的具体代码解释&#xff0c;也是主要操作的文件&#xff0c;其中main.cpp不用操作&#xff0c;ui则是图形化操作界面&#xff0c;综合使用时&#xff0c;添加一个元件要注意重编名和编译一下&#xff0c;才能在widget这类…

生产者消费者模型和线程同步问题

文章目录 线程同步概念生产者消费者模型条件变量使用条件变量唤醒条件变量 阻塞队列 线程同步概念 互斥能保证安全,但是仅有安全不够,同步可以更高效的使用资源 生产者消费者模型 下面就基于生产者消费者来深入线程同步等概念: 如何理解生产消费者模型: 以函数调用为例: 两…