RV1126平台下的MobileSeg量化指南:高效部署低算力硬件

发布于:2024-12-19 ⋅ 阅读:(14) ⋅ 点赞:(0)

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 技术交流

MobileSeg模型

5.1 QQ群

RKNN非官方交流909472035


网站公告

今日签到

点亮在社区的每一天
去签到