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

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

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

Yolov5学习笔记(1)——训练出自己的模型_第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)——训练出自己的模型_第2张图片

Yolov5学习笔记(1)——训练出自己的模型_第3张图片

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

2.数据集制作

2.1公开数据集

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

1.帕依提提

Yolov5学习笔记(1)——训练出自己的模型_第4张图片

 2.Mo数据中心

Yolov5学习笔记(1)——训练出自己的模型_第5张图片

3.和鲸社区 

Yolov5学习笔记(1)——训练出自己的模型_第6张图片

4.AI studio 百度

Yolov5学习笔记(1)——训练出自己的模型_第7张图片

2.2 制作自己的数据集

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

2.2.1下载标注软件

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

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

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

 点击下载最新的windows版本

2.2.2标注数据集

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

Yolov5学习笔记(1)——训练出自己的模型_第9张图片

 Yolov5学习笔记(1)——训练出自己的模型_第10张图片

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

Yolov5学习笔记(1)——训练出自己的模型_第11张图片

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

Yolov5学习笔记(1)——训练出自己的模型_第12张图片

 选择图片数据目录

Yolov5学习笔记(1)——训练出自己的模型_第13张图片

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

Yolov5学习笔记(1)——训练出自己的模型_第14张图片

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

Yolov5学习笔记(1)——训练出自己的模型_第15张图片

单击Create RectBoxYolov5学习笔记(1)——训练出自己的模型_第16张图片

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

Yolov5学习笔记(1)——训练出自己的模型_第17张图片

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

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

 Yolov5学习笔记(1)——训练出自己的模型_第18张图片

 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)——训练出自己的模型_第19张图片

3.1下载Yolov5-5.0版本

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

Yolov5学习笔记(1)——训练出自己的模型_第20张图片

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

Yolov5学习笔记(1)——训练出自己的模型_第21张图片

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

Yolov5学习笔记(1)——训练出自己的模型_第22张图片

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

Yolov5学习笔记(1)——训练出自己的模型_第23张图片

3.2配置训练时各类需求

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

Yolov5学习笔记(1)——训练出自己的模型_第24张图片

解压上传的yolov5-5.0文件夹

unzip yolov5-5.0.zip

Yolov5学习笔记(1)——训练出自己的模型_第25张图片

 切到yolov5目录

cd yolov5-5.0

Yolov5学习笔记(1)——训练出自己的模型_第26张图片

安装训练所需要的依赖

pip install -r requirements.txt

 Yolov5学习笔记(1)——训练出自己的模型_第27张图片

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

Yolov5学习笔记(1)——训练出自己的模型_第28张图片

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

unzip /mnt/fruits_yolo.zip -d /all_data

 

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

 Yolov5学习笔记(1)——训练出自己的模型_第29张图片

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

Yolov5学习笔记(1)——训练出自己的模型_第30张图片

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

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

Yolov5学习笔记(1)——训练出自己的模型_第31张图片

把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)——训练出自己的模型_第32张图片

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

Yolov5学习笔记(1)——训练出自己的模型_第33张图片

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

Yolov5学习笔记(1)——训练出自己的模型_第34张图片

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

Yolov5学习笔记(1)——训练出自己的模型_第35张图片

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

Yolov5学习笔记(1)——训练出自己的模型_第36张图片

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

Yolov5学习笔记(1)——训练出自己的模型_第37张图片Yolov5学习笔记(1)——训练出自己的模型_第38张图片

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

Yolov5学习笔记(1)——训练出自己的模型_第39张图片

 

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)——训练出自己的模型_第40张图片

 在终端输入

python pt_to_wts.py

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

Yolov5学习笔记(1)——训练出自己的模型_第41张图片

 

 

你可能感兴趣的:(yolo,目标检测,深度学习,计算机视觉)