RK3588芯片部署yolo识别,并使用npu推理,环境搭建并运行
RK3588 NPU 部署 YOLOv8 全流程
第一步:确认硬件与搭建环境
-
确认 NPU 型号:你的 OK3588 开发板搭载的是 Rockchip RK3588 芯片,其集成的 NPU 算力高达 6 TOPS。这是我们加速推理的硬件基础。
-
搭建转换环境(在 PC 端进行):模型转换需要在 x86 架构的 Linux 电脑(通常是你的 Ubuntu 开发机)上进行。我们使用你熟悉的 Conda 来创建一个独立的环境。
# 创建 Python 3.8 环境(RKNN Toolkit 推荐) conda create -n rknn-env python=3.8 -y conda activate rknn-env # 安装必要的工具 # RKNN Toolkit 2 是模型转换的核心工具 pip install rknn-toolkit2==2.3.0 # 安装 YOLOv8 环境用于导出 ONNX pip install ultralytics onnx onnxsim
-
第二步:模型转换 (YOLOv8 PyTorch → RKNN)
这是最关键的一步,目的是将你训练好的
.pt模型转换成 NPU 能识别的.rknn格式。 -
导出 ONNX 格式:首先,将 PyTorch 模型转换为中间格式 ONNX。
# 在 rknn-env 环境中运行此脚本 from ultralytics import YOLO # 加载你的模型,如果没有就用官方预训练模型 yolov8n.pt 做测试 model = YOLO('yolov8n.pt') # 导出为 ONNX,设置 opset 版本为 12 model.export(format='onnx', opset=12)
4、ONNX 转 RKNN:编写一个 Python 脚本(如 convert_to_rknn.py)来完成最后的转换。
from rknn.api import RKNN
# 创建 RKNN 对象
rknn = RKNN(verbose=True)
# 1. 配置模型输入和量化参数
# target_platform 必须指定为 'rk3588'
rknn.config(mean_values=[[0, 0, 0]],
std_values=[[255, 255, 255]],
target_platform='rk3588')
# 2. 加载 ONNX 模型
ret = rknn.load_onnx(model='yolov8n.onnx')
if ret != 0:
print('模型加载失败!')
exit(ret)
# 3. 构建 RKNN 模型(do_quantization=True 表示进行 INT8 量化)
# 量化需要一个包含图像路径的 dataset.txt 文件,用于校准
ret = rknn.build(do_quantization=True, dataset='./dataset.txt')
if ret != 0:
print('模型构建失败!')
exit(ret)
# 4. 导出 RKNN 模型
ret = rknn.export_rknn('yolov8n_rk3588.rknn')
if ret != 0:
print('模型导出失败!')
exit(ret)
print('模型转换成功!')
dataset.txt 文件:这是一个文本文件,每行是一张用于量化校准的图片路径(例如 ./image1.jpg),建议准备 50-200 张有代表性的图片
第三步:在 OK3588 开发板上部署与推理
将生成的 yolov8n_rk3588.rknn 文件通过 U盘或 scp 命令传输到你的 OK3588 开发板上。
-
在开发板上安装运行环境:
bash
# 在 OK3588 开发板的终端执行 sudo apt update sudo apt install python3-opencv pip3 install rknn-runtime
rknn-runtime是 NPU 的推理库,比 Toolkit 轻量很多。 -
编写 NPU 推理脚本(处理图片/视频流):在开发板上创建
npu_detect.py。python
# npu_detect.py import cv2 from rknnlite.api import RKNNLite # 初始化 NPU rknn = RKNNLite() ret = rknn.load_rknn('yolov8n_rk3588.rknn') if ret != 0: print('加载 RKNN 模型失败') exit(ret) rknn.init_runtime() # 打开摄像头或 RTSP 流 # cap = cv2.VideoCapture(0) # 本地摄像头 cap = cv2.VideoCapture("rtsp://your_rtsp_stream_address") # 你的 RTSP 流 while True: ret, frame = cap.read() if not ret: break # 模型推理:输入图像,得到原始输出张量 outputs = rknn.inference(inputs=[frame]) # --- 此处需要添加后处理代码 --- # RKNN 模型的 outputs 是原始张量,需要解析成检测框、类别和置信度。 # 这部分逻辑可以从 rknn_model_zoo 的示例中获取。 # print(outputs) # 假设我们有一个自定义的 post_process 函数 # boxes, classes, scores = post_process(outputs) # 绘制结果(伪代码) # for box, cls, score in zip(boxes, classes, scores): # cv2.rectangle(frame, box[:2], box[2:], (255,0,0), 2) # cv2.putText(frame, f'{cls}:{score:.2f}', ...) # 显示画面 cv2.imshow("NPU Detection", frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() rknn.release()
第四步:针对 RTSP 流的优化建议
-
使用 RKNN Model Zoo 的 Demo:Rockchip 官方提供了
rknn_model_zoo,里面包含了针对 YOLOv8 优化好的 Python 和 C++ 示例代码,尤其是后处理部分,能帮你节省大量时间。建议直接参考它。 -
性能数据参考:根据官方示例,YOLOv8 Nano 模型在 RK3588 上通过 NPU 加速,可以达到 60+ FPS 的推理速度,处理 RTSP 流绰绰有余。
-
多线程处理:对于 RTSP 流,为了不丢帧,可以采用“采集线程 + 推理线程”的模式。一个线程专们负责读取视频帧,另一个或多个线程负责 NPU 推理,可以显著提高吞吐量。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)