地瓜机器人最新推出的RDK X5开发板,基于旭日5(Sunrise 5)芯片,将AI算力提升至10 TOPS,相比前代产品性能提升超过134% 。这款百元级国产开发板的出现,让嵌入式实时目标检测进入了全新的性价比阶段。本文将详细介绍如何在RDK X5上部署YOLOv8目标检测模型,充分利用其集成的BPU(贝叶斯架构)实现30FPS以上的实时推理,并与Jetson Xavier NX进行实测对比,展现国产AIoT平台的硬核实力。
一、RDK X5核心亮点
1.1 硬件规格
RDK X5搭载了地瓜自研的旭日5芯片,主要参数如下 :
-
CPU:8核ARM Cortex-A55,性能大幅提升
-
BPU:贝叶斯架构(Bayes-e),支持INT8量化加速
-
AI算力:10 TOPS(INT8),可高效运行YOLOv8、Transformer等模型
-
内存:4GB/8GB LPDDR4X可选
-
网络:双频Wi-Fi 6 + 蓝牙5.4,千兆以太网
-
接口:4个USB 3.0、全尺寸HDMI、MIPI CSI/DSI、40针GPIO
1.2 开发优势
RDK X5不仅硬件强悍,软件生态也十分完善。官方提供了RDK Studio图形化开发工具,支持闪连模式(一根Type-C线即可连接和烧录系统),大幅降低入门门槛 。同时,Model Zoo模型仓库中预置了数十种优化好的AI模型,开发者可以直接调用 。
二、环境搭建与系统准备
2.1 烧录系统镜像
首先从地瓜开发者社区下载RDK X5官方系统镜像(Ubuntu 22.04定制版):
# 镜像下载地址(需注册登录)
https://archive.d-robotics.cc/downloads/os_images/rdk_x5/
准备一张至少16GB的MicroSD卡,使用烧录工具(如balenaEtcher或Win32DiskImager)将下载的.xz压缩包解压后的.img文件写入SD卡 。
插入SD卡,连接电源和显示器,首次启动会自动扩展分区,约2-3分钟后进入系统。默认用户名和密码均为sunrise。
2.2 安装NPU开发环境
RDK X5的BPU驱动和推理库已预装在系统中,位于/opt/digit目录。我们只需要安装Python依赖:
sudo apt update && sudo apt upgrade -y
sudo apt install python3-pip python3-opencv
pip3 install ultralytics numpy
三、YOLOv8模型转换与优化
RDK X5的BPU仅支持INT8量化模型,需要将PyTorch格式的YOLOv8转换为ONNX,再通过地瓜工具链生成可执行模型。
3.1 导出ONNX模型
在PC或RDK X5上运行(需要网络下载预训练权重):
from ultralytics import YOLO
# 加载YOLOv8m模型(中等规模,平衡速度与精度)
model = YOLO('yolov8m.pt')
# 导出为ONNX,输入尺寸640x640
model.export(format='onnx', imgsz=640, dynamic=False)
3.2 使用工具链量化转换
地瓜官方提供了基于Docker的工具链环境,建议使用最新版本 :
# 拉取工具链Docker镜像(版本号以官方最新为准)
docker pull hub.d-robotics.cc/ai_toolchain/ubuntu_20.04_x5_gcc9:v1.2.6
# 运行容器并挂载当前目录
docker run -it --rm -v $(pwd):/data hub.d-robotics.cc/ai_toolchain/ubuntu_20.04_x5_gcc9:v1.2.6
在容器内进行模型转换:
cd /data
# 使用hb_mapper工具转换(地瓜BPU模型转换工具)
hb_mapper makertbin --model-type onnx \
--model ./yolov8m.onnx \
--proto-file ./yolov8_config.yaml \
--output ./yolov8m_x5.bin
其中yolov8_config.yaml需要配置输入节点、输出节点、量化校准参数等。官方Model Zoo提供了完整的YOLOv8配置文件模板 。
四、在RDK X5上运行实时检测
4.1 使用Python API部署
创建推理脚本yolo_x5_detect.py:
python
import cv2
import numpy as np
from horizon_tc_interface import HB_ONNXRuntime # 地瓜NPU推理接口
# 加载量化后的模型
sess = HB_ONNXRuntime(model_file="./yolov8m_x5.bin")
# 获取输入输出信息
input_name = sess.input_names[0]
output_names = sess.output_names
# 打开摄像头
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
# FPS计算
fps = 0
frame_count = 0
import time
start_time = time.time()
while True:
ret, frame = cap.read()
if not ret:
break
# 预处理:resize + 归一化 + NHWC格式
img = cv2.resize(frame, (640, 640))
img = img.astype(np.float32) / 255.0
# RDK BPU通常要求NHWC格式
img_input = np.expand_dims(img, axis=0) # (1, 640, 640, 3)
# 推理
outputs = sess.run(output_names, {input_name: img_input})
# 后处理(解析检测框,此处省略具体实现,可参考Model Zoo示例)
# boxes = postprocess(outputs)
# 在画面绘制检测结果(略)
# 计算FPS
frame_count += 1
if frame_count >= 30:
end_time = time.time()
fps = frame_count / (end_time - start_time)
print(f"FPS: {fps:.2f}")
frame_count = 0
start_time = time.time()
cv2.imshow("RDK X5 YOLOv8 Detection", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
注意:YOLOv8的后处理(包括解码框、NMS等)占用较多CPU资源。地瓜Model Zoo提供了C++优化的后处理实现,可以进一步提升整体帧率 。
4.2 使用Model Zoo快速体验
地瓜官方提供了预编译的YOLOv8示例,可以直接运行:
cd /app/pydev_demo/08_yolov8_sample/
sudo python3 ./yolov8_detect.py
系统会自动加载预置模型并调用USB摄像头,实时显示检测结果 。