1 引言
MobileSeg系列模型采用编解码架构,并以轻量级模型作为骨干网络,专为低算力硬件(如BPU、NPU、ARM CPU等)设计。这使得MobileSeg在边缘设备和移动端应用中表现出色,具备高效能和灵活性。本文将以MobileSeg分割模型为例,详细讲解如何在RV1126平台上进行模型量化操作,最大化发挥模型的性能优势。
2 环境声明
2.1 训练环境
- 操作系统:Ubuntu 20.04 x86_64
- 包管理工具:conda 24.3.0
- 依赖库:PaddleSeg 版本 2.8.1
2.2 部署环境
- 操作系统:Ubuntu 18.04 x86_64
- 工具包:rknn-toolkit 1.7.5
- 驱动支持:rknpu 1.7.3
注意:如果你不清楚如何安装rknn环境,可以参考【一步步搭建 RV1126 深度学习环境,轻松实现边缘推理】了解详细的安装步骤。
3 量化步骤
3.1 Paddle模型转换为ONNX格式
1、安装PaddleSeg环境。使用conda安装PaddleSeg环境,具体步骤请参考【PaddleSegGetStarted】。下载并安装PaddleSeg代码,确保环境正确配置,代码下载包位于,此处(https://github.com/PaddlePaddle/PaddleSeg/releases/tag/v2.8.0)。
2、本次实验使用MobileSeg模型,选择MobileNetV3作为Backbone进行分割模型测试。
3、下载模型保存到本地,此此使用模型配置文件,路径为:PaddleSeg/configs/mobileseg/mobileseg_mobilenetv3_cityscapes_1024x512_80k.yml
。
4、执行以下命令将下载的模型转换为pdmodel
格式。
python tools/export.py
--config configs/mobileseg/mobileseg_mobilenetv3_cityscapes_1024x512_80k.yml \
--model_path runs/mobileseg.official.v3/weights/model.pdparams \
--save_dir runs/mobileseg.official.v3/export/ \
--input_shape 1 3 512 512 --output_op none
执行成功后显示如下:
5、安装paddle2onnx,该工具用于将pdmodel转换为onnx格式。
pip install paddle2onnx==1.2.5 -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
6、使用以下命令将pdmodel模型转换为onnx格式。
paddle2onnx \
--model_dir runs/mobileseg.official.v3/export/ \
--model_filename model.pdmodel \
--params_filename model.pdiparams \
--opset_version 11 \
--save_file runs/mobileseg.official.v3/export/mobileseg_m3.onnx
7、执行Paddle优化策略(如有需要),进一步提升模型的推理性能:
python -m paddle2onnx.optimize --input_model runs/mobileseg.official.v3/export/mobileseg_m3.onnx --output_model runs/mobileseg.official.v3/export/mobileseg_m3.onnx
3.2 从ONNX到RKNN模型的转换
1、执行形状推断(Shape Inference)。由于得到的模型输入为[1, 3, 512, 512]
,且输出尺寸是动态的,需使用onnxsim
进行形状推断(Shape Inference)以确定模型的完整形状。
onnxsim runs/mobileseg.official.v3/export/mobileseg_m3.onnx runs/mobileseg.official.v3/export/mobileseg_m3.sim.onnx
2、使用rknn-toolkit进行模型转换。在基于rknn-toolkit的conda环境中,执行转换脚本convert.py,将ONNX模型转换为RKNN格式。
python convert.py
主要配置如下:
● rknn.config参数
:
● rknn.build参数
:
3、编译RKNN预编译模型。使用rknn-toolkit将模型编译为预编译模型,输出文件名为mobileseg_m3.hw.rknn。如果你不清楚如何预编译,可以参考我的预编译技术指导。
4、编写C++代码进行性能测试。使用C++编写代码,进行模型的性能测试,评估其在RV1126上的运行效果。
4 性能评估
我们分别运行模型推理5000次,观察推理时间的稳定性。在本次性能评估中,我们对比了绑定核心与不绑定核心两种配置下,NPU推理时间的变化。以下是绑定核心CPU的动态利用情况。
经过结果分析,发现在定频后绑定核心对NPU的稳定性存在不稳定性干扰。平均值前者是38.52ms,后者是38.46ms,相差不是很大。
5 技术交流
5.1 QQ群
● RKNN非官方交流
:909472035