yolov5训练自己的数据集

一、安装环境

1.1 安装Python和Anaconda

首先,确保你的系统上安装了Python 3.8或更高版本。推荐使用Anaconda进行环境管理。
下载并安装Anaconda:访问Anaconda官网 ,根据你的操作系统选择合适的安装包进行安装。

1.2 创建虚拟环境

打开Anaconda Prompt或终端,输入以下命令创建一个新的虚拟环境:

conda create -n yolov5_env python=3.8

1.3 激活虚拟环境:

conda activate yolov5_env

1.4 安装依赖包

使用pip安装YOLOv5所需的依赖包。YOLOv5的依赖包列表通常包含在项目根目录的requirements.txt文件中。
输入以下命令安装依赖:

pip install -r requirements.txt

如果遇到安装问题,可以尝试升级pip:

python -m pip install --upgrade pip

1.5 安装PyTorch

YOLOv5基于PyTorch框架,因此需要安装PyTorch。根据你的GPU情况选择合适的版本:
如果有NVIDIA GPU并安装了CUDA驱动,安装带CUDA支持的PyTorch:

pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113

如果没有GPU,安装CPU版本:

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu

验证安装是否成功:

import torch
print(torch.__version__)
print(torch.cuda.is_available())  # 如果输出为True,则表示GPU可用

二、下载YOLOv5代码

2.1 克隆YOLOv5仓库

打开终端,进入你希望存放项目的目录,运行以下命令克隆YOLOv5的GitHub仓库:

git clone https://github.com/ultralytics/yolov5.git

进入项目目录:

cd yolov5

2.2 下载预训练权重

YOLOv5提供了多种预训练模型,可以直接使用这些权重进行迁移学习。例如,下载YOLOv5s的预训练权重:

wget https://github.com/ultralytics/yolov5/releases/download/v6.0/yolov5s.pt

三、在PyCharm中导入YOLOv5

3.1 安装PyCharm

如果你还没有安装PyCharm,可以从JetBrains官网下载并安装 。

3.2 导入项目

打开PyCharm,选择“File” > “Open”,然后导航到YOLOv5项目的根目录,选择yolov5文件夹,点击“OK”导入项目。

3.3 配置虚拟环境

在PyCharm中,点击右上角的“Python”图标,选择“Add Local”,然后导航到你之前创建的虚拟环境的解释器路径(例如:Anaconda3/envs/yolov5_env/python.exe)。
确保PyCharm使用的是你创建的虚拟环境。

3.4 安装依赖包

在PyCharm的终端中,运行以下命令安装项目依赖:

pip install -r requirements.txt

四、准备数据集

4.1 收集数据

收集与你任务相关的图片数据。例如,如果你要训练一个检测猫的模型,收集包含猫的图片。
建议使用至少1000张高质量的图片,并确保数据集中包含各种光照条件、角度和背景。

4.2 数据清洗

删除模糊、不相关的图片。确保所有图片的分辨率一致,或者在数据增强阶段进行统一处理。

4.3 数据标注

使用标注工具(如LabelImg、CVAT等)对图片进行标注。YOLOv5使用的是VOC格式的标注文件。
每个标注文件对应一张图片,文件名为图片名,后缀为.txt,内容为每行一个目标的类别ID和边界框坐标(归一化为0-1的范围)。

4.4 组织数据集

将数据集分为训练集、验证集和测试集。
数据集的组织结构如下:
yolov5/
├── datasets/
│ ├── train/
│ │ ├── images/
│ │ │ └── *.jpg
│ │ └── labels/
│ │ └── *.txt
│ ├── val/
│ │ ├── images/
│ │ │ └── *.jpg
│ │ └── labels/
│ │ └── *.txt
│ └── test/
│ ├── images/
│ │ └── *.jpg
│ └── labels/
│ └── *.txt

4.5 数据增强

YOLOv5内置了多种数据增强方法,可以在训练时自动应用。你可以在配置文件中启用或调整这些增强参数。

五、修改配置文件

5.1 配置文件位置

YOLOv5的配置文件位于yolov5/models/目录下,文件名以.yaml结尾(如yolov5s.yaml)。

修改配置文件

打开配置文件,修改以下参数:

  • nc: 类别数量(例如,检测猫则设为1)。
  • names: 类别名称列表(例如,[‘cat’])。
  • train和val的路径:指向你的训练集和验证集的路径。
  • weights: 预训练权重文件的路径(如yolov5s.pt)。
  • batch_size: 根据你的GPU内存调整,通常为16或32。
  • epochs: 训练的轮数,建议至少100轮。
  • optimizer: 通常使用Adam,但也可以尝试SGD。
  • lr0: 初始学习率,通常为0.001或0.0001。

示例配置文件


# 模型参数
nc: 1
names: ['cat']# 数据参数
train: ../datasets/train/images/
val: ../datasets/val/images/
names: ../datasets/train/labels/# 训练参数
batch_size: 32
epochs: 100
optimizer: Adam
lr0: 0.001

六、开始训练

6.1 运行训练脚本

在终端中,进入YOLOv5项目根目录,运行以下命令开始训练:

python train.py --data datasets/train.yaml --weights yolov5s.pt --cfg models/yolov5s.yaml --img 640 --batch 32 --epochs 100 --name cat_yolov5
  • –data: 数据集配置文件的路径。
  • –weights: 预训练权重文件的路径。
  • –cfg: 模型配置文件的路径。
  • –img: 输入图像的分辨率。
  • –batch: 批量大小。
  • –epochs: 训练的轮数。
  • –name: 训练的名称,用于保存结果。

6.2 监控训练过程

YOLOv5会在训练过程中输出损失值、学习率等信息。你可以在runs/train/目录下查看训练日志和模型权重文件。

6.3 调整超参数

  • 如果发现模型过拟合,可以尝试减少学习率、增加数据增强或使用正则化方法。
  • 如果模型表现不佳,可以增加训练轮数或调整批量大小。

七、模型验证和评估

7.1 验证模型

训练完成后,运行以下命令使用验证集评估模型性能:

python val.py --weights runs/train/cat_yolov5/weights/best.pt --data datasets/val.yaml --img 640 --name val_cat

结果会保存在runs/val/目录下,包括mAP、mAR等指标。

7.2 查看评估结果

  • 打开runs/val/val_cat/results.txt文件,查看模型的评估指标。
  • 如果模型性能不理想,可以尝试调整超参数或增加数据集大小。

7.3 优化检测阈值

根据实际需求调整置信度阈值(–conf-thres)和IoU阈值(–iou-thres):

python detect.py --weights runs/train/cat_yolov5/weights/best.pt --source datasets/test/images/ --conf 0.5 --iou 0.5

八、模型导出和部署

8.1 导出模型

将训练好的模型导出为ONNX格式,以便在其他环境中使用:

python export.py --weights runs/train/cat_yolov5/weights/best.pt --include onnx

导出的ONNX模型位于runs/export/目录下。

8.2 部署模型

使用导出的ONNX模型进行推理。以下是一个使用Python和ONNX Runtime进行推理的示例代码:

import cv2
import numpy as np
import onnxruntime as ort# 加载模型
session = ort.InferenceSession('runs/export/onnx/best.onnx')
input_name = session.get_inputs()[0].name# 读取图片
image = cv2.imread('test.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
image = cv2.resize(image, (640, 640))
image = np.transpose(image, (2, 0, 1)).astype(np.float32)
image = image / 255.0
image = np.expand_dims(image, axis=0)# 执行推理
output = session.run(None, {input_name: image})[0]# 处理输出
# 根据模型输出格式进行后处理,例如解码边界框和类别

九、常见问题及解决方法

9.1 显存不足

减小批量大小(batch_size)或图像分辨率(–img)。
使用混合精度训练:

python train.py --data datasets/train.yaml --weights yolov5s.pt --cfg models/yolov5s.yaml --img 640 --batch 32 --epochs 100 --name cat_yolov5 --adam 0.001 --amp

9.2 数据加载错误

  • 检查数据集路径是否正确。
  • 确保标注文件格式正确,且每行的类别ID在0到nc-1之间。

9.3 模型性能不佳

  • 增加训练数据集的大小。
  • 调整学习率和优化器。
  • 尝试不同的模型架构(如YOLOv5m或YOLOv5l)。

十、总结

通过本教程,你已经掌握了使用YOLOv5训练自己的数据集的完整流程,包括安装环境、下载代码、准备数据集、配置参数、训练模型、验证评估以及模型部署。希望这篇教程能帮助你顺利实现自己的目标检测任务!

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

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

相关文章

利用租用的GPU进行训练

对于大模型的微调以及推理,对显卡的要求较高,我们就可以通过租一台来进行训练,这里我租用的是:AutoDL算力云 | 弹性、好用、省钱。租GPU就上AutoDL 推荐博客:新手小白如何租用GPU云服务器跑深度学习_gpu租用-CSDN博客…

[操作系统] 基础IO:系统文件I/O

在 Linux 操作系统中,文件 I/O(输入/输出)是程序与文件系统交互的基础。理解文件 I/O 的工作原理对于编写高效、可靠的程序至关重要。本文将深入探讨系统文件 I/O 的机制。 一种传递标志位的方法 在 Linux 中,文件的打开操作通常…

Qt MainWindow

文章目录 0. 概述1. 菜单栏 QMenuBar1.1 例子1,使用图形化界面1.2 例子2,使用代码创建1.3 例子3,添加快捷键1.4 例子4,添加子菜单1.5 例子5,添加分割线和图标1.6 内存泄漏问题 2. 工具栏 QToolBar2.1 例子1&#xff0c…

阅读论文“用于车联网安全车载通信的机器学习技术“的学习笔记

前言 论文全称为Machine Learning Technologies for Secure Vehicular Communication in Internet of Vehicles: Recent Advancesc and Applications 智能交通系统(ITS)和计算系统的快速发展为智能交通安全提供了新的科学研究,并提供了舒适和…

[java] 集合-Collection、ArrayList、LinkedList源码篇

目录 Collection集合 集合类体系结构 常用方法 遍历方式 迭代器遍历 增强for lambda表达式 List集合 特有方法 五种遍历方式 细节点注意 List集合的实现类 List集合子类的特点 LinkedList集合的特有功能 源码分析 ArrayList源码分析 LinkedList源码分析 迭代…

DeepSeek自动化写作软件

DeepSeek写作软件的三大核心功能 对于内容创作者来说,写作不仅是表达思想的过程,更是一项需要投入大量时间和精力的任务。面对日益增长的内容需求,写作效率低下、内容质量不高等问题,常常让创作者感到焦虑。而 DeepSeek 写作软件…

前端里的this指向问题

目录 1.代码输出结果 2.代码输出结果 3.代码输出结果 4.代码输出结果 5.代码输出结果 6.代码输出结果 7.代码输出结果 8.代码输出结果 9.代码输出结果 10.代码输出结果 11.代码输出结果 12.代码输出结果 13.代码输出结果 14.代码输出结果 总结 1.代码输出结果 f…

苹果CMS新版站群管理更新_新增批量生成插件优势何在

引言 随着互联网的发展,站群管理成为了网站运营者提升流量和SEO效果的重要策略。苹果CMS新版站群管理系统通过引入批量生成插件,为用户提供了更高效、更智能的解决方案。本文将详细介绍这一更新的功能特点及其优势。 站群管理功能特点 多域名独立配置…

时序约束进阶八:时钟抖动Jitter与不确定性Uncertainty

目录 一、前言 二、时钟抖动 2.1 时钟抖动类型 2.2 set_input_jitter 2.3 set_system_jitter 2.4 set_clock_uncertainty 2.5 设计代码 2.6 约束解析 2.7 Input_jitter报告 2.8 System Jitter报告 2.9 Clock Uncertainty报告 2.9.1 Uncertainty的计算 2.9.2 Uncer…

小米 R3G 路由器(Pandavan)实现网络打印机功能

小米 R3G 路由器(Pandavan)实现网络打印机功能 一、前言 家中有多台 PC 设备需要打印服务,但苦于家中的 Epson L380 打印机没有网络打印功能,并且配置 Windows 共享打印机实在是过于繁琐且需要共享机保持唤醒状态过于费电。想到…

Leetcode Hot100 第30题 416.分割等和子集

class Solution { public:bool canPartition(vector<int>& nums) {int sum0;for(int num:nums){sumnum;}if(sum%21) return false;int bag_size sum/2;// return dfs(nums,nums.size()-1,bag_size);//递归做法vector<vector<bool>> dp(nums.size()1,vec…

技术晋升读书笔记—阿里管理三板斧(二)

一、引子 美团王兴问马云&#xff1a;“你最强的地方是什么&#xff1f;” 马云反问王兴&#xff1a;“你觉得呢&#xff1f;” 王兴回答&#xff1a;“战略和忽悠。” 马云哈哈大笑&#xff0c;笑完&#xff0c;他一本正经地说&#xff1a;“我最强的地方是管理。” &quo…

引入了 Disruptor 后,系统性能大幅提升!

Disruptor 是一个很受欢迎的内存消息队列&#xff0c;它源于 LMAX 对并发、性能和非阻塞算法的研究。今天一起来学习一下这个消息队列。 简介 对于主流的分布式消息队列来说&#xff0c;一般会包含 Producer、Broker、Consumer、注册中心等模块。比如 RocketMQ 架构如下&…

【WPSOffice】汇总

写在前面 PPT篇 幻灯片母版 通过母版功能统一幻灯片的样式、字体、颜色等&#xff0c;提高整体一致性。 统一设置模板样式 字体安装 查找到字体并安装。 在WPS PPT&#xff08;WPS演示&#xff09;中&#xff0c;以下是最常用的十个功能&#xff0c;能够帮助用户高效制作…

鸿蒙开发:熟知@BuilderParam装饰器

前言 本文代码案例基于Api13。 在实际的开发中&#xff0c;我们经常会遇到自定义组件的情况&#xff0c;比如通用的列表组件&#xff0c;选项卡组件等等&#xff0c;由于使用方的样式不一&#xff0c;子组件是动态变化的&#xff0c;针对这一情况&#xff0c;就不得不让使用方把…

在Nodejs中使用kafka(一)安装使用

安装 方法一、使用docker-compose安装 1、创建docker-compose.yml文件。 services:zookeeper:image: docker.io/bitnami/zookeeper:3.9ports:- "2181:2181"volumes:- "./data/zookeeper:/bitnami"environment:- ALLOW_ANONYMOUS_LOGINyeskafka:image: …

CRISPR spacers数据库;CRT和PILER-CR用于MAGs的spacers搜索

iPHoP&#xff1a;病毒宿主预测-CSDN博客 之前介绍了这个方法来预测病毒宿主&#xff0c;今天来介绍另一种比较用的多的方法CRISPR比对 CRISPR spacers数据库 Dash 在这可以下载作者搜集的spacers用于后期比对 CRT和PILER-CR 使用 CRT 和 PILERCR 识别 CRISPR 间隔区&#x…

深入理解Java的 JIT(即时编译器)

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

LabVIEW开发CANopen紧急对象读取

本示例展示了如何通过CANopen协议读取设备的紧急对象&#xff08;Emergency object&#xff09;。紧急对象用于报告设备发生故障或异常情况时的紧急信息。通过该示例&#xff0c;用户可以配置并读取设备发送的紧急消息&#xff0c;确保在设备发生紧急状况时能够及时响应。 主要…

DeepSeek官方推荐的AI集成系统

DeepSeek模型虽然强大先进&#xff0c;但是模型相当于大脑&#xff0c;再聪明的大脑如果没有输入输出以及执行工具也白搭&#xff0c;所以需要有配套工具才能让模型发挥最大的作用。下面是一个典型AI Agent架构图&#xff0c;包含核心组件与数据流转关系&#xff1a; #mermaid-…