【YOLO11部署至RK3588】模型训练→转换RKNN→开发板部署

在这里插入图片描述

------------25.3.25更新内容如下:
已在GitHub开源与本博客同步的YOLO11_RK3588_object_detect项目,地址:
https://github.com/A7bert777/YOLO11_RK3588_object_detect
详细使用教程,可参考README.md或参考本博客第六章 模型部署

一、项目回顾

博主之前有写过YOLOv8目标检测&图像分割、YOLOv10目标检测、MoblieNetv2图像分类的模型训练、转换、部署文章,感兴趣的小伙伴可以了解下:
【YOLOv8部署至RK3588】模型训练→转换rknn→部署全流程
【YOLOv8seg部署RK3588】模型训练→转换rknn→部署全流程
【YOLOv10部署RK3588】模型训练→转换rknn→部署流程
【MobileNetv2图像分类部署至RK3588】模型训练→转换rknn→部署流程
YOLOv8n部署RK3588开发板全流程(pt→onnx→rknn模型转换、板端后处理检测)

最近,原YOLOv8团队发布了新的检测算法:YOLO11,算是和YOLOv10前后脚了,v10最大的特点是去除了NMS处理,YOLO11的亮点则是采用了全新的C3k2模块与C2PSA层,因此想从模型训练开始试试其最终部署效果,以下为正文。

二、项目文件梳理

YOLO11训练、转换、部署所需四个项目文件:
第一个:YOLO11模型训练项目文件(链接在此),
第二个:瑞芯微仓库中YOLO11的pt转onnx项目文件(链接在此);
第三个:用于在虚拟机中进行onnx转rknn的虚拟环境配置项目文件(链接在此);
第四个:在开发板上做模型部署的项目文件(链接在此)。

注:
1.第四个项目文件中的内容很多,里面涉及到rknn模型转换以及模型部署的所有内容,所以该文件在模型转换中也要与第三个文件配合使用。
2.我上面的四个链接都是已经链接到项目的对应版本了,打开链接后直接git clone或者download zip即可。

这四个文件的版本如下:
第一个模型训练文件是v8.3.31
第二个ONNX转换文件为默认main分支
第三个文件rknn-toolkit2为v2.3.0
第四个文件rknn_model_zoo也用v2.3.0(rknn-toolkit2尽量和rknn_model_zoo版本一致)
如图所示:
在这里插入图片描述
注:此处特别注明,大家在Github上搜YOLOv8和YOLO11是发现是在ultralytics的同一个项目下,这是正确的,ultralytics对其划了不同分支,虽然还是用v8.x.xx,但是从v8.3.0开始就是YOLO11的版本Tags了,如下所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、YOLO11模型训练

YOLO11的模型训练和此前的YOLOv8、YOLOv10基本一致。
先从训练环境搭建开始,YOLO11的环境搭建非常简单,不需要再pip install -r requirements.txt和pip install -e .了。

步骤如下:
1. conda create -n YOLO11 python=3.9
2. conda activate YOLO11
3. pip install ultralytics

配置好环境后,把另外一些必要的文件准备好:
在这里插入图片描述
自己创建一个trian.py脚本,放在和ultralytics文件夹同级位置,然后把ultralytics文件夹中的yolo11.yaml文件复制出来,在把yolov8n.py和yolo11n.pt放过来,因为训练开始前会用预训练权重进行Automatic Mixed Precision(AMP自动混合精度)check,如果你没放预训练权重,终端会自己下载,但是速度较慢,所以先提前放置过来。

train.py内容如下:
在这里插入图片描述
yolo11.yaml内容如下:
在这里插入图片描述
garbage.yaml文件如下:
在这里插入图片描述
执行train.py文件:python train.py

训练完成后,结果如下:
在这里插入图片描述

四、PT转ONNX

把前面经过300epoch训练得到的PT模型放置到第二个项目文件
注:我把PT模型重命名为yolo11_yaml_silu_best.pt,把第二项目文件重命名为ultralytics_yolo11(pt2onnx),其余照旧。
在这里插入图片描述
调整 ./ultralytics/cfg/default.yaml 中 model 文件路径,默认为 yolo11n.pt,若自己训练模型,请调接至对应的路径。支持检测、分割、姿态、旋转框检测模型。我修改的结果如下:
在这里插入图片描述
注:这里的yolo11_yaml_relu_300epoch_best.pt和yolo11_yaml_silu_best.pt是一个意思,你就把自己的pt模型的绝对路径复制过来就行了,这里我拿的是另一个pt模型转换时的截图,但流程一致。

修改完default.yaml后,在终端输入:
export PYTHONPATH=./
python ./ultralytics/engine/exporter.py

执行完毕后,会生成 ONNX 模型,如下所示:
在这里插入图片描述
可以看到,我们在当前路径下得到了ONNX模型:yolo11_yaml_silu_best.onnx,用netron打开该模型,如下所示:

在这里插入图片描述
可以看到,YOLO11的输出还是和YOLOv8一样的,都是9个,具体含义不再详述,可以去我的YOLOv8相关内容中查看

最后该模型down下来后复制到虚拟机中。

五、ONNX转RKNN

在进行这一步的时候,如果你是在云服务器上运行,请先确保你租的卡能支持RKNN的转换运行。博主是在自己的虚拟机中进行转换。
先安装转换环境
这里我们先conda create -n rknn230 python=3.8创建环境.
然后conda activate rknn230激活当前环境

现在需要用到rknn-toolkit2-2.3.0文件,即第三个项目文件
进入该项目文件的目录,如下所示,找到两个文件:txt和whl
在终端输入pip install -r requirements_cp38-2.3.0.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
然后再输入pip install rknn_toolkit2-2.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

在这里插入图片描述
此时,我们的转rknn环境就配置完成了。

现在要进行模型转换,其实大家可以参考rknn_model_zoo-2.3.0\examples\yolo11下的README指导进行转换(注,现在需要用到第四个项目文件了,即rknn_model_zoo):
在这里插入图片描述
在这里插入图片描述
这里我也给大家翻一下readme的意思:1.先修改python文件夹下的convert.py和yolo11.py,如下所示:
在这里插入图片描述
在这里插入图片描述
修改完成后,在当前rknn230环境下的终端输入:python convert.py …/model/yolo11_yaml_silu_best.onnx rk3588
终端显示如下:
在这里插入图片描述
在这里插入图片描述
此时,在model文件夹下,生成了我们的rknn模型,如下所示:

在这里插入图片描述

用netron打开rknn模型,输入输出如下:
在这里插入图片描述
由上图可以看到,onnx模型的9个输出会一样出现在rknn模型上。所以如果onnx模型有问题,则无法转出正常的rknn模型

六、模型部署

如果前面流程都已实现,模型的结构也没问题的话,则可以进行最后一步:模型端侧部署。
我已经帮大家做好了所有的环境适配工作,科学上网后访问博主GitHub仓库:YOLO11_RK3588_object_detect 进行简单的路径修改就即可编译运行。

重点:请大家举手之劳,帮我的仓库点个小星星
点了小星星的同学可以免费帮你解决转模型与部署过程中遇到的问题。
在这里插入图片描述
git clone后把项目复制到开发板上,按如下流程操作:
①:cd build,删除所有build文件夹下的内容
②:cd src 修改main.cc,修改main函数中的如下三个内容:
在这里插入图片描述
将这三个参数改成自己的绝对路径
③:cd src 修改postprocess.cc下的txt标签的绝对路径:
在这里插入图片描述
解释一下,这个标签路径中的内容如下所示:
在这里插入图片描述
其实就是你在训练yolov8是在yaml配置文件中的那几个类别名

④:修改include/postprocess.h 中的宏 OBJ_CLASS_NUM
在这里插入图片描述

⑤:把你之前训练好并已转成RKNN格式的模型放到YOLO11_RK3588_object_detect/model文件夹下,然后把你要检测的所有图片都放到YOLO11_RK3588_object_detect/inputimage下。
在运行程序后,生成的结果图片在YOLO11_RK3588_object_detect/outputimage下

⑥:进入build文件夹进行编译

cd build
cmake ..
make

在build下生成可执行文件文件:rknn_yolo11_demo
在build路径下输入

./rknn_yolo11_demo

运行结果如下所示:
在这里插入图片描述
原inputimage文件夹下的图片:
请添加图片描述
在执行完./rknn_yolo11_demo后在outputimage下的输出结果图片(图片中的纸巾、纸团不是待检目标):
请添加图片描述
可以看到,与终端显示的检测结果一致。

以下是其他场景部署结果示例:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

可以看到模型检测精度还可以,量化时会有一定的精度损失,推理速度平均20ms左右,图片大小为1080P,整体效果是要比YOLOv10优秀的。

上述即博主此次更新的YOLO11部署RK3588,包含PT转ONNX转RKNN的全流程步骤,欢迎交流!

评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值