09-训练自己的模型

在上一个章节中。我们用的模型全部是来自yolo官网。

其模型识别的是别人训练的class。通常情况下,这个通用的模型并不能满足我们的需求。

因此我们需要训练自己的模型。本文以yoloV6为例。训练一个检测是否带安全头盔的模型。

1、下载yoloV6源码

待整理后上传【占位】

2、准备训练图片以及标签

在yolov6的源文件中进入data文件夹,新建一个名为kmbox的文件夹,此文件夹用于存放训练图片和标签。如下图所示:

1745502052217

进入kmbox文件夹,再创建两个文件夹,名字分别为images,labels.如下图所示:

1745502071973

在images中创建两个文件夹,train和val。同理在labels中也创建train和val两个文件夹。

image中的train用于存放训练集(图片),val用于存放验证集(图片)。同理labels中存放对应的标签。

图片集如下(你想训练什么):

1745502105215

标签集如下:

1745502118425

返回data目录,复制一下voc.yaml文件。重命名为kmbox.yaml

1745502165386

打开kmbox.yaml,做如下修改。

1745502182721

返回YOLOV6源码目录。将tools文件夹下的train.py脚本拷贝到源码目录下。取名kmbox.py

1745502196740

打开kmbox.py文件做如下修改。

1745502213137

3、准备训练环境

我们使用conda来搭建一个python3.8环境(windows电脑上操作):

1745502254053

进入YOLOV6的源码目录。注意文件路径中不要由中文。

1745502270552

安装依赖:pip install -r requirements.txt 在控制台输入左边的指令。等待安装完成。可能需要科学上网或指定国内源。

4、开始训练

输入python kmbox.py回车。

1745502310860

法克报错。大概是cuda不能用,应该是驱动不兼容。解决办法。重新安装torch。

pip install torch==2.3.1+cu118 torchvision==0.18.1+cu118 torchaudio==2.3.1+cu118 -f https://mirror.sjtu.edu.cn/pytorch-wheels/torch_stable.html

你的电脑是哪个版本可能得你自己解决。因为不同显卡对应的cuda不一样。不同torch配套的cuda也不一样。

再次运行python kmbox.py  可以看到已经开始正常训练了。GPU风扇在嗷嗷叫。等他训练完成即可。

1745502337659

如果训练过程中崩溃了。报各种错误。最简单的方法就是关机再开机重来。保证内存充足。炼丹嘛,炸炉是常有的事。炸了重来就行。如果一直炸,那就是炉子不行。再换环境。直到能用为止。

1745502351600

经过漫长等待。训练已经完成。

5、验证模型是否满足识别要求

训练的模型保存在runs文件夹下。train中

1745502390745

咱们取最后一次训练的权重。

1745502408209

为了方便起见(少敲点键盘)。把best_ckpt.pt复制到顶层YOLOv6的顶层目录中。随便拿一张测试图片,取名img.png. 执行下面指令用于验证。

python tools/infer.py --weights best_ckpt.pt --source img.png

1745502436634

执行命令后截图如下:

1745502457528

可以看到最后一行执行结果再runs/inference/exp中。打开对应文件夹看看结果。

1745502470165

法克。bicycle和person是什么鬼???别急。肯定是标签错了。打开tools/infer.py。

1745502487297

另外咱们训练图片尺寸是416x416的,这里也可以改成一致。改完后再次运行。上面的指令验证。

1745502506297

OK.已经能正常识别是否带头盔。

如果识别效果不好,那就换图片换标签。重新训练。直到能达到你的满意度为止。重复前面的234过程即可。

我很容易满足。上面已经达到我的预期。进入下一步。

6、导出rknn格式

上面训练出来的模型都是电脑上用的。我们最终需要是在kmbox内部运行。因此需要将模型进行格式转换。

导出模型执行下面这条指令:

python deploy/RKNN/export_onnx_for_rknn.py --weight ./best_ckpt.pt

导出后模型名字为best_ckpt.onnx

1745503159116

最后将best_ckpt.onnx模型转换为rknn。就是咱们盒子能用的格式。即可下载到kmbox内部使用。我们把best_ckpt.onnx拷贝到SDK内部的09-myYOLO-test/tools文件夹中。

执行命令:python convert.py best_ckpt.onnx可将其转换为yolov6.rknn (这是在虚拟机内操作)

1745503191653

至此,yolov6.rknn就是我们需要的能在开发板内部运行的模型。

7、板载验证

编译09-myYOLO-test工程。将得到的可执行文件和前面的yolov6.rknn下载到开发板中

并且准备一张测试图片。test.jpg 。

编译方法请参考前面章节。

1745563011878

运行截图如下:

1745567775570

实际效果图:

1745503276028

以上为yolov6训练自定义数据集到板载验证的全部流程。以此为例。可以训练用户自定义模型。

从打印可以看出。416x416的模型,推理时间大约25ms。比上一章中的640X640模型速度提升了大概20ms。基本上是成倍的增加。如果有兴趣可以测试一下320X320的。看看推理速度又是多少。

整个工程已打包上传。

FAQ常见问题

如何退出程序

1、控制台直接按键盘ctr+c

2、按键盘End快捷键(切换到内部UI快捷键,以你设置的为准)