深度学习-yolo实战项目【分类、目标检测、实例分割】?如何创建自己的数据集?如何对数据进行标注?没有GPU怎么办呢?

news/2025/3/18 11:18:44/

一、本地环境配置 

(1)本地创建虚拟环境

(2)下载项目到本地

(3)安装依赖 

(4)测试一下

二、电脑没有GPU训练不了怎么办?【不用本地环境】

(1)创建服务器实例

  (2)上传项目

(3)创建环境

(4)测试一下

三、分类任务

(1)模型训练

 (2)模型预测

(3)使用自己创建的数据集做训练

创建数据集

模型训练

模型预测

四、目标检测任务

(1)如何使用/预测?

(2)如何创建用于检测任务的数据集?

(3)模型训练

(4)使用模型进行检测

五、实例分割任务

(1)创建数据集

(2)模型训练(这里先使用项目自带的coco128数据集)

(3)模型预测

 六、总结


一、本地环境配置 

(1)本地创建虚拟环境

        参考教程:https://blog.csdn.net/qq_73704268/article/details/145854625

  创建一个虚拟环境用于本yolov5的项目,这里我已经创建好啦      

(2)下载项目到本地

项目地址:

code:     GitHub - ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite 

使用git命令或者直接下载压缩包将项目clone到本地

(3)安装依赖 

        在pycharm中打开项目,选择yolov5的环境,打开pycharm终端,输入命令 pip install -r requirements.txt

Python项目依赖管理:requirements.txt与environment.yml_environment.yml和requirements.txt-CSDN博客

 这样就不用一个个安装库了!!

这里需要注意 torch

因为是pytorch框架,这里要求torch版本大于1.8.0,要不然不好用;

如果电脑带有GPU,会自动下载带有CUDA的torch,没有GPU会下载CPU版本的torch;

在使用模型进行检测的时候是没有任何区别的,但是CPU版本的torch是训练不了模型的(太慢了!!!!)

(4)测试一下

        以检测任务为例子,找到detect.py

运行这个代码,用已经训练好的模型对data/images下的图片进行检测,可以直接在pycharm运行,运行之后检测结果存储在了

点进去看一下:

二、电脑没有GPU训练不了怎么办?【不用本地环境】

(1)创建服务器实例

        这里给大家推荐Autodl服务器租用平台,可以先看这篇文章了解一下 ,讲的很详细AutoDL使用教程:1)创建实例 2)配置环境+上传数据 3)PyCharm2021.3专业版下载安装与远程连接完整步骤 4)实时查看tensorboard曲线情况-CSDN博客

 这里是我创建的实例:

打开

打开终端

  (2)上传项目

我这里已经上传好了,可以直接把clone下的项目压缩包拖到左侧目录区域,使用命令

unzip yolov5-master.zip 就可以解压项目

(3)创建环境

默认是在base环境中的,但是建议大家再创建一个虚拟环境,因为base环境有时候我们会权限不够【具体步骤和之前在本地的步骤是一样的】

激活你的环境 安装好依赖,就可以在yolov5的环境下运行项目了

(4)测试一下

学习一个终端命令: python detect.py --source 11.png  【python + 要运行的py文件 --source +输入图像路径】

 运行结果:

根据输出结果知道检测的结果存在了 runs/detect/exps里面,打开

三、分类任务

(1)模型训练

        建议大家租用GPU训练比较好【花了钱的东西就是好用的哈哈,我的电脑也有GPU但是训练起来还是不如租来的快】

输入命令:python classify/train.py --model yolov5-cls.pt --data cifar10 --epochs 5

  • --model yolov5-cls.pt:指定模型文件。yolov5-cls.ptYOLOv5 的分类模型权重文件,用于初始化训练。如果你是第一次训练,可能需要下载预训练权重文件。

  • --data cifar10:指定数据集。cifar10 是一个常用的小型图像分类数据集,包含 10 个类别,每个类别有 6000 张 32×32 的彩色图像。

  • --epochs 5:指定训练的轮数(epoch)。这里设置为 5 轮,表示模型会在整个数据集上训练 5 次。

输出结果如下:

 可以看到5个epoch分别的输出结果,第二列是训练需要的GPU大小【这里只用了1.7G的】,第三列是在训练集上的损失【逐渐减小】,第四列是在测试集上的损失【逐渐减小】,第五列是精度大小【逐渐上升】


这里显示了模型训练的结果 保存到了那个文件夹下:


这里显示了模型训练的参数保存到了哪个文件目录下:

best.pt:表示训练的5轮中效果最好的那一轮的参数

last.pt:表示训练5轮中的最后一轮的参数是什么

【注意:best.pt不一定等于last.pt,因为模型可能过拟合现象,但是我们训练的这次是相等的,因为明显5轮训练不够,所有一般我们都直接使用best.pt里面的参数】

 (2)模型预测

使用我们刚刚训练好的模型进行对一张图片的预测,

直接使用命令: python classify/predict.py --source 22.jpg  用的是yolo自己训练好的模型参数,而不是我们自己训练的参数。

所以我们应该指定模型参数用的是哪个,找到刚刚运行结果输出的模型参数保存路径:python classify/predict.py  --weights runs/train-cls/exp8/weights/best.pt --source 22.jpg 

结果:

        为什么没有person?y因为训练的轮数太少了,并且我们的5轮中不一定有人的图像标签,模型还不知道人长什么样子

(3)使用自己创建的数据集做训练

创建数据集

        首先你要了解yolov5自己训练使用的数据集目录结构长什么样子,以cifar10为例

具体图像的命名规则:


了解这些,我们来创建一个自己的数据集,以猫狗分类为例子;

①在datasets文件夹下创建一个文件夹,命名为jundogcat: 

②在jundogcat文件夹下创建一个train文件夹和一个test文件夹

③在test文件夹下建立两个文件夹: cat和dog【图像标签名称】

④按照命名规则放入具体的图像:

trian和test的一样,通常train里面的图像要比test的要多

这样我们就创建了一个自己的数据集,用于猫狗分类!!!将数据集压缩上传到服务器上解压就可以使用啦


模型训练

        接下来使用我们自己创建的数据集对模型进行训练

输入命令python classify/train.py --model yolov5-cls.pt --data ../datasets/jundogcat --epochs 5

【这里data的目录前面有两个. 是因为datasets这个文件夹和yolov5-master项目是平级的,所以我们要先退出yolov5-master才可以进入datasets】

记住模型权重路径

模型预测

          接下来使用我们刚刚训练好的模型进行预测,使用这个图片

输入命令: python classify/predict.py  --weights runs/train-cls/exp9/weights/best.pt --source data/images/dogclass.jpg

打开这个路径可以查看预测结果:

0.88 dog 0.12 cat,模型成功预测!!

四、目标检测任务

(1)如何使用/预测?

运行命令 :python detect.py --source data/images/bus.jpg  

在runs/detect/exp4 查看检测结果:

可以看到红线框出了bus这辆车 

代码如何预测边界框的呢?

        

  • (x1, y1): 左上角坐标
  • (x2, y2): 右下角坐标

(2)如何创建用于检测任务的数据集?


yolo目标检测数据集标注-CSDN博客

安装上面的博客教程来就好,将创建的数据集改个名字(jundogcatyolo)拷贝到服务器:

记得把这个data.yaml文件拷贝到 yolo-master项目文件的data 目录下:

仿照这里其他原有的任意一个数据集的yaml修改data.yaml

原来的data.yaml:

参考coco128.yaml:

修改后的yaml文件:

至此就可以使用数据集进行训练啦

(3)模型训练

确保路径在yolo-master下

运行命令 : python train.py --weights yolov5s.pt --img 640 --batch 16 --data ./data/data.yaml    --epoch 5

  • --weights yolov5s.pt:使用预训练的 YOLOv5 小型模型(yolov5s.pt)作为权重进行训练。
  • --img 640:将输入图像的尺寸设置为 640x640。【因为我们数据集都是640*640的】
  • --batch 16:设置每个批次的图像数量为 16。
  • --data ./data/data.yaml:指定数据集的 .yaml 配置文件,data.yaml 文件中应该定义数据集的路径以及类别。
  • --epoch 5:训练 5 个周期(epoch)。

P为精度值,R为召回率,可以看到对cat的切分比较好(P=0.813)

 打开 runs/train/exp3看看

 模型参数也保存在了 runs/train/exp3

(4)使用模型进行检测

刚刚训练的模型参数保存在了 runs/train/exp3

对这张图片进行检测

所以运行命令:

python detect.py --source ./data/images/catdog-d.jpg --weights  runs/train/exp3/weights/best.pt

进入runs/detect/exp5查看检测结果

!!!可以看到检测结果并不是很好,很正常,毕竟我们的数据集大小了,并且只训练了5个epoch 

五、实例分割任务

(1)创建数据集

使用自己的数据集的时候也需要对图像进行标注,这里 看博客

yolo目标检测、实例分割数据集标注-CSDN博客

(2)模型训练(这里先使用项目自带的coco128数据集)

输入命令: 

python segment/train.py --weights yolov5s-seg.pt   --data coco128-seg.yaml    --epochs 5

第二列可以看到class为128【因为coco128有128个类别】 ,模型参数保存到了runs/train-seg/exp5中

(3)模型预测

输入命令: python segment/predict.py  --img 320 --weights runs/train-seg/exp5/weights/best.pt --source data/images/catdog-d.jpg

 分割没有问题,但是把猫也识别成狗了........


 六、总结

        至此,通过这个项目,关于计算机视觉的分类目标检测、实例分割三大任务的数据的创建与标注、模型的训练、使用模型进行预测已经掌握啦,还有如何在AutoDL上使用服务器,运行代码也掌握的差不多了呢!加油哦ヾ(◍°∇°◍)ノ゙


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

相关文章

Spring、Spring Boot、Spring Cloud 的区别与联系

1. Spring 框架 定位:轻量级的企业级应用开发框架,核心是 IoC(控制反转) 和 AOP(面向切面编程)。 核心功能: 依赖注入(DI):通过 Autowired、Component 等注解…

爬虫案例八js逆向爬取网易音乐

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、js逆向的前期准备二、网站分析三、代码 前言 提示:这里可以添加本文要记录的大概内容: 爬取网易音乐 提示:以下是本篇…

【春招笔试】2025.03.13-蚂蚁春招笔试题

题目总结 题目一:区间未出现的最小值之和 1️⃣:统计全为1的子数组数量和全为0的子数组数量,利用公式计算 2️⃣:利用数学公式 n(n+1) - 2N0 - N1 计算最终答案 难度:中等 这道题目的关键在于理解 mex 的概念,并发现对于只含 0 和 1 的数组,mex 值只可能是 0、1 或 2。…

365天之第P10周:Pytorch实现车牌识别

365天之第P10周:Pytorch实现车牌识别 Pytorch实现车牌识别 365天之第P10周:Pytorch实现车牌识别一、导入数据1.获取类别名2. 数据可视化3. 标签数字化4. 加载数据文件5. 划分数据 二、自建模型三、 训练模型1. 优化器与损失函数2. 模型训练 四、 结果分析…

如何配置 Docker 以实现无需 sudo 使用

1. 背景知识:为什么需要 sudo? Docker 是一个容器化平台,其核心组件包括: Docker 守护进程(dockerd):负责管理容器的创建、运行和销毁。Docker CLI:用户通过命令行工具&#xff08…

DeepSeek-prompt指令-当DeepSeek答非所问,应该如何准确的表达我们的诉求?

当DeepSeek答非所问,应该如何准确的表达我们的诉求?不同使用场景如何向DeepSeek发问?是否有指令公式? 目录 1、 扮演专家型指令2、 知识蒸馏型指令3、 颗粒度调节型指令4、 时间轴推演型指令5、 极端测试型6、 逆向思维型指令7、…

【redis】Jedis 操作 Redis 基础指令(下)

列表操作 lpush/rpush 和 lpop/rpop 将一个或者多个元素从左/右侧放入(头/尾插)到 list 中 依次头插 从 list 左/右侧取出元素(即头/尾删) public static void test1(Jedis jedis) { jedis.flushAll(); long n jedis.lpush(…

时间语义与窗口操作:Flink 流式计算的核心逻辑

在实时数据流处理中,时间是最为关键的维度之一。Flink 通过灵活的时间语义和丰富的窗口类型,为开发者提供了强大的时间窗口分析能力。本文将深入解析 Flink 的时间语义机制,并通过实战案例演示如何利用窗口操作实现实时数据聚合。 一、Flink…