地平线RDK X5是一款发布于2024年的国产嵌入式Linux开发板,具有10 TOPS的BPU算力。本文将分享自己的开发板到货后,安装BPU推理所需的依赖库,并运行官方例程的初体验。
安装过程:
按照教程:https://developer.d-robotics.cc/rdk_doc/Algorithm_Application/model_zoo/model_zoo_intro ,使用地平线RDK X5开发板安装modelzoo,执行命令:
pip install bpu_infer_lib_x5 -i http://sdk.d-robotics.cc:8080/simple/ --trusted-host sdk.d-robotics.cc
遇到了以下报错:
Defaulting to user installation because normal site-packages is not writeable Looking in indexes: http://sdk.d-robotics.cc:8080/simple/ WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPConnection object at 0xffffabbbb5e0>: Failed to establish a new connection: [Errno 111] Connection refused')': /simple/bpu-infer-lib-x5/ WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPConnection object at 0xffffabbbb970>: Failed to establish a new connection: [Errno 111] Connection refused')': /simple/bpu-infer-lib-x5/ WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPConnection object at 0xffffabbbbb80>: Failed to establish a new connection: [Errno 111] Connection refused')': /simple/bpu-infer-lib-x5/ WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPConnection object at 0xffffabbbbd90>: Failed to establish a new connection: [Errno 111] Connection refused')': /simple/bpu-infer-lib-x5/ WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPConnection object at 0xffffabbbbfa0>: Failed to establish a new connection: [Errno 111] Connection refused')': /simple/bpu-infer-lib-x5/ ERROR: Could not find a version that satisfies the requirement bpu_infer_lib_x5 (from versions: none) ERROR: No matching distribution found for bpu_infer_lib_x5
确定自己的RDK X5板子有WIFI连接,但就是无法连接到地瓜机器人官方的SDK软件源,导致pip找不到 bpu_infer_lib_x5 这个包。
原因是地平线(D-Robotics)官方已经将 pip 源迁移到了新的地址,并且 bpu_infer_lib_x5 这个包即将被废弃。根据这篇博客:https://www.cnblogs.com/SkyXZ/p/18692784 中的解决办法,执行命令:
pip install bpu_infer_lib_x5 -i http://archive.d-robotics.cc/simple/ --trusted-host archive.d-robotics.cc
仍然无法下载,于是采用了先下载后安装的解决方法:
下载whl 文件:
wget https://archive.d-robotics.cc/downloads/rdk_model_zoo/rdk_x5/bpu_infer_lib_x5-1.0.3-py3-none-any.whl
但是whl 文件本身有问题 - 文件名是 bpu_infer_lib_x5,但内部的元数据目录名却是 bpu_infer_lib_x3,导致 pip 校验失败,因此要解压后再重命名:
创建临时目录
mkdir -p ~/whl_fix && cd ~/whl_fix
解压 whl 文件(whl 本质是 zip)
unzip ~/bpu_infer_lib_x5-1.0.3-py3-none-any.whl
查看实际目录名(你会发现是 bpu_infer_lib_x3-1.0.3.dist-info)
ls -la
重命名目录(将 x3 改为 x5)
mv bpu_infer_lib_x3-1.0.3.dist-info bpu_infer_lib_x5-1.0.3.dist-info
恢复zip文件并安装:
在终端运行以下代码:
python3 -c " import zipfile import os with zipfile.ZipFile('bpu_infer_lib_x5-1.0.3-py3-none-any.whl', 'w', zipfile.ZIP_DEFLATED) as whl: for root, dirs, files in os.walk('.'): if root == '.' and any(f.endswith('.whl') for f in files): files = [f for f in files if not f.endswith('.whl')] for file in files: file_path = os.path.join(root, file) arcname = os.path.relpath(file_path, '.') whl.write(file_path, arcname) print(f'Added: {arcname}') "
之后重新安装:
pip install bpu_infer_lib_x5-1.0.3-py3-none-any.whl --force-reinstall
即可在RDK X5开发板里面运行bin类型的模型了!
运行示例demo:
装好了jupyterlab和rdk_model_zoo后,先进入rdk_model_zoo所在的文件夹:
cd rdk_model_zoo
使用如下命令进入Jupyter Lab:(ip要替换为使用板卡的ip)
jupyter lab --allow-root --ip 192.168.128.10
使用命令后,会出现以下日志,复制以下链接,即可进入Jupyter Lab(如下图所示):
jupyter lab界面:
运行yoloworld模型结果:
增加了推理时长测试的代码(修改原先的ipynb文件):
image = cv2.imread('dog.jpeg', cv2.IMREAD_COLOR)
resize_scale = 640. / max(image.shape[:2])
scale = max((image.shape[0], image.shape[1])) / 640
image_resized = cv2.resize(image, (0, 0), fy=resize_scale, fx=resize_scale)
input_image = np.zeros((640, 640, 3), dtype=np.float32)
input_image[:image_resized.shape[0], :image_resized.shape[1], :] = image_resized
input_image = input_image[:, :, [2, 1, 0]] # bgr->rgb
input_image = input_image[None].transpose(0, 3, 1, 2)
# ==================== 2. 模型推理(核心计时部分) ====================
inf = bpu_infer_lib.Infer(False)
inf.load_model("yolo_world.bin")
# 准备输入
inf.read_input(input_image, 0)
inf.read_input(text_embeddings, 1)
# 只计时 forward() 推理(核心修改)
start_infer = time.time()
inf.forward()
end_infer = time.time()
inference_time = (end_infer - start_infer) * 1000 # 转换为毫秒
print(f"🚀 BPU 推理时间: {inference_time:.2f} ms")
# 获取输出
inf.get_output()
推理时长132ms,似乎有点慢?



