Yolov5学习笔记(1)——训练出自己的模型

本教程系列将从模型训练开始,从0开始带领你部署Yolov5模型到jetson nano上

这是本系列的第一部分内容

Yolov5学习笔记(1)——训练出自己的模型

1.Yolov5介绍

Yolov5是一种目标检测算法,是ultralytics公司在yolov4的基础上加以改进诞生的,本教程基于让小白从0开始学会训练自己的yolov5模型,从而感受到人工智能的乐趣,对一些算法的细节不做过多讨论,并对训练环节做了简化处理,不严谨的地方还望各位技术大佬谅解。 

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

YOLO V5 在性能上稍弱于YOLO V4,但是在灵活性与速度上远强于YOLO V4,在模型的快速部署上具有极强优势。虽然现在的研究成果还达不到“下一代”YOLO的高度,但是被称作YOLO V4.5或者Above YOLO 是没问题的。其次还有人认为YOLO V5只是YOLO V4的Pytorch实现加上调参结果,你在没有实际阅读代码和运行之前发表这样的评论,是极不负责任的。

Yolov5学习笔记(1)——训练出自己的模型

Yolov5学习笔记(1)——训练出自己的模型

从上图的结果可以看出,YOLO V5确实在对象检测方面的表现非常出色,尤其是YOLO V5s 模型140FPS的推理速度非常惊艳。

2.数据集制作

2.1公开数据集

国内外有很多公开很优秀的数据集,很多都是开源且免费的,这里推荐几个数据集的网站,排名不分先后

1.帕依提提

Yolov5学习笔记(1)——训练出自己的模型

 2.Mo数据中心

Yolov5学习笔记(1)——训练出自己的模型

3.和鲸社区 

Yolov5学习笔记(1)——训练出自己的模型

4.AI studio 百度

Yolov5学习笔记(1)——训练出自己的模型

2.2 制作自己的数据集

当然,很多情况下我们需要制作自己的数据集满足相应的需求,数据集的制作会占用大量的时间

2.2.1下载标注软件

来到数据集标注工具Labelimg的官方releases网站

当然如果你进不去的话,我这里提供一份1.8.1版本的软件

链接:https://pan.baidu.com/s/1ZeJaTafbZv965wFLYziHgw 
提取码:1234 Yolov5学习笔记(1)——训练出自己的模型

 点击下载最新的windows版本

2.2.2标注数据集

解压后来到目录下,依次点开data->predefined_classes.txt

Yolov5学习笔记(1)——训练出自己的模型

 Yolov5学习笔记(1)——训练出自己的模型

 打开后可以更改你的种类名称,从上到下依次更改

Yolov5学习笔记(1)——训练出自己的模型

 回到程序目录,点开labelimg,笔者有遇到点不开的情况(windows11可能用不了),此时建议更换一台设备或者管理员模式打开

Yolov5学习笔记(1)——训练出自己的模型

 选择图片数据目录

Yolov5学习笔记(1)——训练出自己的模型

 随后会弹出让你选择标签目录,如果没有弹出也可以点击Change Save Dir 选择标签目录

Yolov5学习笔记(1)——训练出自己的模型

 一定记得单击此处使其为YOLO,保证标注文件为TXT格式的,以此简化数据集格式的复杂程度

Yolov5学习笔记(1)——训练出自己的模型

单击Create RectBoxYolov5学习笔记(1)——训练出自己的模型

 也可以在英文输入下按W,框选目标物品,在一旁的小窗口中选择目标种类的名称,点击OK

Yolov5学习笔记(1)——训练出自己的模型

重复上述步骤,直到完成所有数据的标注(这是一个漫长的过程,如果是一个团队可以几个人轮着来制)

把所有的数据集都准备好,保证目录下包含imgages(图片)、labels(对应标签)、yaml文件

 Yolov5学习笔记(1)——训练出自己的模型

 Yaml文件的简单格式如下:


# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/]
train: ./images  #训练集
# number of classes  #类别数量
nc: 11
# class names
names: ['apple','orange','pear','watermelon','durian','lemon','grape','pine','dragon fruit','cantaloupe','Hami melon']  #种类有哪些

train就是训练集的图片目录,nc是类别的数量,names是类别的名称(要按标注的顺序)

致此,数据集的制作完成,下一步就是训练了

3.训练模型

终于到了我们期待的一步了,很多时候我们的电脑都是windows的系统,但是作为未来的人工智能算法工程师,Linux系统的操作是需要且必须掌握了,本训练教程只对在Linux系统上训练做详细介绍,windows系统较为复杂,网上有更多优秀的教程

训练模型需要好的GPU和配置好环境,笔者受不了训练时主机那快要起飞的声音,因此笔者更喜欢在云上训练模型,平台我推荐使用矩池云,K80的GPU一个小时只需要1元(晚上的时候使用GPU资源的人比较少),新人还送5元时长,更重要的是它自带配置好的各种人工智能环境,如Tensorflow、Pytorch等(此处不是恰饭哈)

Yolov5学习笔记(1)——训练出自己的模型

3.1下载Yolov5-5.0版本

此教程系列训练模型的最终目的是为了部署到jetson nano上,因此需要利用tensorrtx做加速处理,题主所有tensorrt版本只更新到了yolov5-5.0,虽然新版本的yolov5已经更新到6.0,我们这里依然使用5.0版本的yolov5

Yolov5学习笔记(1)——训练出自己的模型

 选择Tags->v5.0下载yolov5代码 5.0的代码

Yolov5学习笔记(1)——训练出自己的模型

打开矩池云的JuypteLabr链接,此时你就已经进入你刚刚租用的服务器了

Yolov5学习笔记(1)——训练出自己的模型

上传刚刚下载的yolov5-5.0版本 

Yolov5学习笔记(1)——训练出自己的模型

3.2配置训练时各类需求

点击左边的+号,点击terminal打开终端

Yolov5学习笔记(1)——训练出自己的模型

解压上传的yolov5-5.0文件夹

unzip yolov5-5.0.zip

Yolov5学习笔记(1)——训练出自己的模型

 切到yolov5目录

cd yolov5-5.0

Yolov5学习笔记(1)——训练出自己的模型

安装训练所需要的依赖

pip install -r requirements.txt

 Yolov5学习笔记(1)——训练出自己的模型

 云上默认换了国内源,稍作等待下载完成

Yolov5学习笔记(1)——训练出自己的模型

解压数据集到目录下,我已经提前将做好的数据集上传到了网盘目录/mnt

unzip /mnt/fruits_yolo.zip -d /all_data

 Yolov5学习笔记(1)——训练出自己的模型

此时根目录的all_data下多出了三个文件夹 ,就是我们之前整理好的数据集

 Yolov5学习笔记(1)——训练出自己的模型

 还有一步,由于我们是下载的yolov5-5.0版本,官网的GitHub上面已经把5.0版本的权重文件给移除了,因此weights文件夹里面是一个shell脚本,用于下载权重文件,通常下载速度会很慢,因此我这里把原来的pt文件放网盘了

Yolov5学习笔记(1)——训练出自己的模型

链接:https://pan.baidu.com/s/1YFtNxZjHZzD_d1PeXt1dNg 
提取码:1234 

一共有四个,推荐优先使用最下那个yolov5s.pt

Yolov5学习笔记(1)——训练出自己的模型

把yolov5s.pt上传到weights文件夹

3.3开始训练

输入命令就可以训练了 

 python train.py --img 640 --batch 16 --epochs 200 --data /all_data/classes.yaml --cfg models/yolov5s.yaml --weights weights/yolov5s.pt
#python train.py --img 640 --bath (GPU越好数字填越大) --epochs (训练的轮数,我这里是200论) --data (yaml文件的路径)   --weights (权重文件的路径)

Yolov5学习笔记(1)——训练出自己的模型

下面可以看到每一论训练的进度条

Yolov5学习笔记(1)——训练出自己的模型

 选择越好的 GPU,训练的速度越快

Yolov5学习笔记(1)——训练出自己的模型

 点击详情可以查看使用情况

Yolov5学习笔记(1)——训练出自己的模型

当出现Optimizer stripped from 这句话时就说明已经训练完毕,模型已经导出

Yolov5学习笔记(1)——训练出自己的模型

打开训练完成后的路径,可以看到训练的各类结果

Yolov5学习笔记(1)——训练出自己的模型Yolov5学习笔记(1)——训练出自己的模型

 这些结果能直观的反映训练的情况,很多时候训练的结果和你的数据集有很大的关系

Yolov5学习笔记(1)——训练出自己的模型Yolov5学习笔记(1)——训练出自己的模型

 

3.4模型转化

 我们训练后得到的模型是pt格式的文件,想要部署在jetson nano上,需要将其转化未wts文件

首先将得到的模型文件best.pt放到yolov5-5.0文件夹中

新建一个文件,命名未pt_to_wts.py,输入以下代码

import torch
import struct
# utils.torch_utils from yolov5 github: https://github.com/ultralytics/yolov5
from utils.torch_utils import select_device
# Initialize
device = select_device('cpu')
# Load model
model = torch.load('best.pt', map_location=device)['model'].float()  # load to FP32
model.to(device).eval()
f = open('best.wts', 'w')
f.write('{}\n'.format(len(model.state_dict().keys())))
for k, v in model.state_dict().items():
    vr = v.reshape(-1).cpu().numpy()
    f.write('{} {} '.format(k, len(vr)))
    for vv in vr:
        f.write(' ')
        f.write(struct.pack('>f',float(vv)).hex())

 Yolov5学习笔记(1)——训练出自己的模型

 在终端输入

python pt_to_wts.py

目录下会多出一个best.wts文件,这个就是我们要的权重文件了

Yolov5学习笔记(1)——训练出自己的模型

 

 

版权声明:本文为博主一个码农儿原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/xiaoyuan2157/article/details/121220167

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(18)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2021年11月13日 下午5:17
下一篇 2021年11月13日 下午6:04

相关推荐