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

06-02 1552阅读

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

------------25.3.25更新内容如下:

已在GitHub开源与本博客同步的YOLO11_RK3588_object_detect项目,地址:

https://github.com/A7bert777/YOLO11_RK3588_object_detect

详细使用教程,可参考README.md或参考本博客第六章 模型部署

文章目录

  • 一、项目回顾
  • 二、项目文件梳理
  • 三、YOLO11模型训练
  • 四、PT转ONNX
  • 五、ONNX转RKNN
  • 六、模型部署

    一、项目回顾

    博主之前有写过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版本一致)

    如图所示:

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

    注:此处特别注明,大家在Github上搜YOLOv8和YOLO11是发现是在ultralytics的同一个项目下,这是正确的,ultralytics对其划了不同分支,虽然还是用v8.x.xx,但是从v8.3.0开始就是YOLO11的版本Tags了,如下所示:

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

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

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

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

    三、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

    配置好环境后,把另外一些必要的文件准备好:

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

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

    train.py内容如下:

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

    yolo11.yaml内容如下:

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

    garbage.yaml文件如下:

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

    执行train.py文件:python train.py

    训练完成后,结果如下:

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

    四、PT转ONNX

    把前面经过300epoch训练得到的PT模型放置到第二个项目文件中

    注:我把PT模型重命名为yolo11_yaml_silu_best.pt,把第二项目文件重命名为ultralytics_yolo11(pt2onnx),其余照旧。

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

    调整 ./ultralytics/cfg/default.yaml 中 model 文件路径,默认为 yolo11n.pt,若自己训练模型,请调接至对应的路径。支持检测、分割、姿态、旋转框检测模型。我修改的结果如下:

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

    注:这里的yolo11_yaml_relu_300epoch_best.pt和yolo11_yaml_silu_best.pt是一个意思,你就把自己的pt模型的绝对路径复制过来就行了,这里我拿的是另一个pt模型转换时的截图,但流程一致。

    修改完default.yaml后,在终端输入:

    export PYTHONPATH=./

    python ./ultralytics/engine/exporter.py

    执行完毕后,会生成 ONNX 模型,如下所示:

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

    可以看到,我们在当前路径下得到了ONNX模型:yolo11_yaml_silu_best.onnx,用netron打开该模型,如下所示:

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

    可以看到,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

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

    此时,我们的转rknn环境就配置完成了。

    现在要进行模型转换,其实大家可以参考rknn_model_zoo-2.3.0\examples\yolo11下的README指导进行转换(注,现在需要用到第四个项目文件了,即rknn_model_zoo):

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

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

    这里我也给大家翻一下readme的意思:1.先修改python文件夹下的convert.py和yolo11.py,如下所示:

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

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

    修改完成后,在当前rknn230环境下的终端输入:python convert.py …/model/yolo11_yaml_silu_best.onnx rk3588

    终端显示如下:

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

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

    此时,在model文件夹下,生成了我们的rknn模型,如下所示:

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

    用netron打开rknn模型,输入输出如下:

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

    由上图可以看到,onnx模型的9个输出会一样出现在rknn模型上。所以如果onnx模型有问题,则无法转出正常的rknn模型

    六、模型部署

    如果前面流程都已实现,模型的结构也没问题的话,则可以进行最后一步:模型端侧部署。

    我已经帮大家做好了所有的环境适配工作,科学上网后访问博主GitHub仓库:YOLO11_RK3588_object_detect 进行简单的路径修改就即可编译运行。

    统一声明:

    1、这个仓库的项目只能做图片的批量检测,不支持视频流检测,没时间做这个,有需要的自己修改代码。

    2、从GitHub的README.md中加QQ后直接说问题和小星星截图,对于常见的相同问题,很多都已在CSDN博客中提到了(RKNN转换流程是统一的,可去博主所有的RKNN相关博客下去翻评论),已在评论中详细解释过的问题,不予回复。

    重点:请大家举手之劳,帮我的仓库点个小星星

    点了小星星的同学可以免费帮你解决转模型与部署过程中遇到的问题。

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

    git clone后把项目复制到开发板上,按如下流程操作:

    ①:cd build,删除所有build文件夹下的内容

    ②:cd src 修改main.cc,修改main函数中的如下三个内容:

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

    将这三个参数改成自己的绝对路径

    ③:cd src 修改postprocess.cc下的txt标签的绝对路径:

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

    解释一下,这个标签路径中的内容如下所示:

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

    其实就是你在训练yolov8是在yaml配置文件中的那几个类别名

    ④:修改include/postprocess.h 中的宏 OBJ_CLASS_NUM

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

    ⑤:把你之前训练好并已转成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
    

    运行结果如下所示:

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

    原inputimage文件夹下的图片:

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

    在执行完./rknn_yolo11_demo后在outputimage下的输出结果图片(图片中的纸巾、纸团不是待检目标):

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

    可以看到,与终端显示的检测结果一致。

    以下是其他场景部署结果示例:

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

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

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

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

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

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

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

相关阅读

目录[+]

取消
微信二维码
微信二维码
支付宝二维码