如何用Python在RDKX5上轻松部署推理,有多种方式?

摘要:作者:SkyXZ CSDN:SkyXZ~-CSDN博客 博客园:SkyXZ - 博客园 宿主机环境:WSL2-Ubuntu22.04+Cuda12.6、D-Robotics-OE 1.2.8、Ubuntu20.04 GPU
作者:SkyXZ CSDN:SkyXZ~-CSDN博客 博客园:SkyXZ - 博客园 宿主机环境:WSL2-Ubuntu22.04+Cuda12.6、D-Robotics-OE 1.2.8、Ubuntu20.04 GPU Docker 端侧设备环境:RDK X5-Server-3.1.0 2025年随着RDK X5的发布,地瓜官方随之也开放了RDK系列DNN推理部署的Python版的API进一步降低了使用X5的门槛,上一篇文章我介绍了C++版的API,这一篇文章我将介绍一下如何使用Python在我们的RDK X5上部署推理代码,地瓜的算法工具链的安装、模型的量化及C++端部署的教程在上一篇已经写了具体请参照:学弟一看就会的RDKX5模型转换及部署,你确定不学? - SkyXZ - 博客园 地瓜这次释放的Python推理API可以分为两种版本,一种版本为BSP,使用hobot_dnn包,这是地瓜BSP(Board Support Package)提供的底层API,可以给用户提供更底层的控制,虽然需要手动实现更多的预处理和后处理步骤,但是可以更精细地控制内存和计算资源,适合需要深度优化或自定义处理的场景;另外一种版本为ModelZoo,使用bpu_infer_lib,这是地瓜ModelZoo提供的高级封装API适合用来进行快速验证和部署,其API更加简洁,使用也更方便,这个包提供更完整的预处理和后处理功能,包含了很多内置的辅助函数且模型加载和推理过程更简化,我们将在此结合手册手把手介绍这两种推理方式的使用 一、ModelZoo——bpu_infer_lib 参考资料:4.3.2 ModelZoo快速上手 | RDK DOC 我们先从最简单最易用的包开始讲起叭,根据这个包中的.cpython-310-aarch64-linux-gnu.so文件可以知道bpu_infer_lib模块是为Python 3.10编译的,因此我们首先要确保我们的Python环境是3.10的版本,在安装完环境之后我们便可以从地瓜官方仓库下载bpu_infer_lib包啦(其他包如:OpenCV默认大家已经自行安装),具体命令如下大家可以根据自己的设备(X3 or X5)来选择下载: # RDK X5 Python3.10 pip install bpu_infer_lib_x5 -i http://archive.d-robotics.cc/simple/ --trusted-host archive.d-robotics.cc # RDK X3 pip install bpu_infer_lib_x3 -i http://archive.d-robotics.cc/simple/ --trusted-host archive.d-robotics.cc 安装完之后我们先来查看地瓜官方的API手册,根据手册的介绍ModelZoo的推理API为一个Infer类,而这个类里面一共只有四个用法,分别是load_model、read_input、forward和get_output用于加载模型、读取输入、推理以及获取输出,整个推理的步骤使用起来非常的简单,接下来我将手把手带着大家结合API以及官方在ModelZoo中给出的jupyter_ModelZoo_YOLOv5.ipynb示例代码来从零部署一遍推理部分,首先我们先导入一些必要的包: import cv2 import numpy as np from scipy.special import softmax from scipy.special import expit as sigmoid from time import time import bpu_infer_lib # Model Zoo Python API from typing import Tuple import os (1)封装BPU_Detect类及初始化 我们还是使用类的形式来实现我们的检测,因此我们还是来创建我们的BPU_Detect类,我们在这个类里首先将常见参数进行初始化,由于初始化特征图网络只需要加载一次因此我们创建了一个私有的_init_grids用于加载特征图,同时我们依旧按照前处理、推理、后处理的推理流程来对应创建了三个函数PreProcess、detect、PostPrecess以及一系列的辅助函数:bgr2nv12_opencv、draw_detection和结果处理函数detect_result class BPU_Detect: def __init__(self, labelnames, model_path, conf, iou, anchors, strides,
阅读全文