4. 开发环境搭建

旭日(Sunrise)系列开发板通常搭载地平线(Horizon)X3、X5 等 AI 芯片,其目标检测部署链路是“PC 端训练与量化 → 交叉编译 → 板端推理”。因此开发环境不是单一主机环境,而是由宿主机(Ubuntu x86_64)、交叉编译工具链、板端运行环境三部分组成的协同体系。本节围绕这三层展开,给出可复现的配置流程与验证方法。

一、核心原理:为什么需要交叉编译环境

旭日开发板的 CPU 架构为 ARM(X3 为 ARM Cortex-A53,X5 为多核 ARM),而模型转换、量化、编译工具(如 horizon_joint_march、hb_mapper、hb_model_verifier)大多运行在 x86_64 的 Ubuntu 主机上。宿主机负责把 ONNX 模型编译成板端可执行的 .hbm 或 .bin 模型,板端只负责加载与推理。二者通过交叉编译工具链和共享的依赖库版本对齐,才能保证“编译通过、板端可跑”。

环境搭建的本质是版本对齐:Docker 镜像版本、工具链版本、板端系统镜像版本、Python 依赖版本必须属于同一发布批次,否则会出现算子不支持、ABI 不匹配、动态库缺失等典型问题。

旭日开发板目标检测部署环境三层结构 宿主机层(Ubuntu 20.04 x86_64) Docker 镜像 open_explorer:v1.x hb_mapper 工具链 模型转换 / 量化 Python 依赖 numpy / onnx / torch 模型仓库 ONNX / 校准集 交叉编译工具链层 gcc-arm-linux-gnueabihf ARM 交叉编译器 hb_model_verifier 精度一致性校验 hb_model_modifier 模型裁剪 / 融合 板端运行层(旭日 X3 / X5) 系统镜像 Ubuntu / Yocto BPU 驱动 libbpu / hb_dnn 推理运行时 hbm_runtime 模型文件 .hbm / .bin 模型转换 部署运行

二、方法流程:从零到可运行的四步配置

  1. 准备宿主机基础环境:安装 Ubuntu 20.04,配置 Docker,拉取官方 open_explorer 镜像。镜像内已集成 hb_mapper、交叉编译工具链与 Python 依赖,避免手工安装版本冲突。
  2. 安装交叉编译工具链:若需自行编译板端 C++ 推理程序,安装 gcc-arm-linux-gnueabihf 并验证目标架构。
  3. 安装依赖库:宿主机侧安装 onnx、numpy、opencv-python 等;板端侧确认 libbpu、hb_dnn、opencv 等运行库存在。
  4. 验证环境:用 hb_mapper 转换一个最小模型,用 hb_model_verifier 校验精度,再在板端加载 .hbm 模型跑通一次推理。
# 1. 拉取并启动官方 Docker 镜像
docker pull openexplorer/ai_toolchain_ubuntu_20_xj3_cpu:v1.2.0
docker run -it --rm -v $(pwd):/workspace openexplorer/ai_toolchain_ubuntu_20_xj3_cpu:v1.2.0 /bin/bash

# 2. 安装 ARM 交叉编译工具链
sudo apt update
sudo apt install -y gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
arm-linux-gnueabihf-gcc -v

# 3. 安装 Python 依赖
pip install numpy==1.19.5 onnx==1.10.0 opencv-python==4.5.5.64

# 4. 验证 hb_mapper 是否可用
hb_mapper --version
hb_model_verifier --help

三、依赖库安装与版本对齐清单

下表列出宿主机与板端的关键依赖及其版本对齐要求,是排障时最常查阅的对照表。

组件 所在位置 推荐版本 验证命令
Docker 镜像 宿主机 open_explorer v1.2.0 docker images
hb_mapper 宿主机 随镜像发布 hb_mapper --version
交叉编译器 宿主机 gcc-arm-linux-gnueabihf 9.x arm-linux-gnueabihf-gcc -v
ONNX 宿主机 1.10.0 python -c "import onnx;print(onnx.__version__)"
libbpu / hb_dnn 板端 与系统镜像一致 ls /usr/lib/libbpu*
OpenCV 板端 4.x pkg-config --modversion opencv4

四、案例场景:一次典型的“板端跑不起来”复盘

某次部署中,宿主机用 hb_mapper 成功生成了 yolov5s.hbm,但板端执行时报 libhbdnn.so: cannot open shared object file。排查发现:宿主机 Docker 镜像版本为 v1.1.0,而板端系统镜像为 v1.2.0,两者 BPU 运行时 ABI 不一致。解决方式是统一使用 v1.2.0 镜像重新转换模型,并在板端执行 ldconfig 刷新动态库缓存。

常见误区:只关注模型转换是否成功,忽略宿主机与板端的版本对齐。模型能转换不等于板端能加载,必须用 hb_model_verifier 做精度校验,并在真实板端做一次端到端推理。
验证建议:环境搭建完成后,先跑官方提供的 mobilenetv2 或 yolov5 示例,确认“转换—校验—板端推理”全链路通畅,再替换为自己的目标检测模型,可显著降低排障成本。