本教程系列将从模型训练开始,从0开始带领你部署Yolov5模型到jetson nano上
这是本系列的第一部分内容
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实现加上调参结果,你在没有实际阅读代码和运行之前发表这样的评论,是极不负责任的。
从上图的结果可以看出,YOLO V5确实在对象检测方面的表现非常出色,尤其是YOLO V5s 模型140FPS的推理速度非常惊艳。
2.数据集制作
2.1公开数据集
国内外有很多公开很优秀的数据集,很多都是开源且免费的,这里推荐几个数据集的网站,排名不分先后
1.帕依提提
2.Mo数据中心
3.和鲸社区
2.2 制作自己的数据集
当然,很多情况下我们需要制作自己的数据集满足相应的需求,数据集的制作会占用大量的时间
2.2.1下载标注软件
来到数据集标注工具Labelimg的官方releases网站
当然如果你进不去的话,我这里提供一份1.8.1版本的软件
链接:https://pan.baidu.com/s/1ZeJaTafbZv965wFLYziHgw
提取码:1234
点击下载最新的windows版本
2.2.2标注数据集
解压后来到目录下,依次点开data->predefined_classes.txt
打开后可以更改你的种类名称,从上到下依次更改
回到程序目录,点开labelimg,笔者有遇到点不开的情况(windows11可能用不了),此时建议更换一台设备或者管理员模式打开
选择图片数据目录
随后会弹出让你选择标签目录,如果没有弹出也可以点击Change Save Dir 选择标签目录
一定记得单击此处使其为YOLO,保证标注文件为TXT格式的,以此简化数据集格式的复杂程度
单击Create RectBox
也可以在英文输入下按W,框选目标物品,在一旁的小窗口中选择目标种类的名称,点击OK
重复上述步骤,直到完成所有数据的标注(这是一个漫长的过程,如果是一个团队可以几个人轮着来制)
把所有的数据集都准备好,保证目录下包含imgages(图片)、labels(对应标签)、yaml文件
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等(此处不是恰饭哈)
3.1下载Yolov5-5.0版本
此教程系列训练模型的最终目的是为了部署到jetson nano上,因此需要利用tensorrtx做加速处理,题主所有tensorrt版本只更新到了yolov5-5.0,虽然新版本的yolov5已经更新到6.0,我们这里依然使用5.0版本的yolov5
选择Tags->v5.0下载yolov5代码 5.0的代码
打开矩池云的JuypteLabr链接,此时你就已经进入你刚刚租用的服务器了
上传刚刚下载的yolov5-5.0版本
3.2配置训练时各类需求
点击左边的+号,点击terminal打开终端
解压上传的yolov5-5.0文件夹
unzip yolov5-5.0.zip
切到yolov5目录
cd yolov5-5.0
安装训练所需要的依赖
pip install -r requirements.txt
云上默认换了国内源,稍作等待下载完成
解压数据集到目录下,我已经提前将做好的数据集上传到了网盘目录/mnt
unzip /mnt/fruits_yolo.zip -d /all_data
此时根目录的all_data下多出了三个文件夹 ,就是我们之前整理好的数据集
还有一步,由于我们是下载的yolov5-5.0版本,官网的GitHub上面已经把5.0版本的权重文件给移除了,因此weights文件夹里面是一个shell脚本,用于下载权重文件,通常下载速度会很慢,因此我这里把原来的pt文件放网盘了
链接:https://pan.baidu.com/s/1YFtNxZjHZzD_d1PeXt1dNg
提取码:1234
一共有四个,推荐优先使用最下那个yolov5s.pt
把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 (权重文件的路径)
下面可以看到每一论训练的进度条
选择越好的 GPU,训练的速度越快
点击详情可以查看使用情况
当出现Optimizer stripped from 这句话时就说明已经训练完毕,模型已经导出
打开训练完成后的路径,可以看到训练的各类结果
这些结果能直观的反映训练的情况,很多时候训练的结果和你的数据集有很大的关系
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())
在终端输入
python pt_to_wts.py
目录下会多出一个best.wts文件,这个就是我们要的权重文件了
版权声明:本文为博主一个码农儿原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/xiaoyuan2157/article/details/121220167