[具身智能-652]:RDK X5模型文件:PC端通用模型文件ONNX文件、RDK第一代模型文件bin文件、RDK新一代模型文件hbm文件,以及hbm模型文件生成过程中的临时文件bin。
RDK X5 四类模型文件完整区分 + 生成 & 使用示例
先做全局定义,杜绝概念混淆
- ONNX:PC 通用原始模型(跨平台标准)
- 旧版可执行
.bin(第一代地平线模型):easy_dnn/bpu_infer_lib 加载,RDK X3、早期 X5 legacy 镜像使用 - 新版可执行
.hbm(新一代地平线模型):hb_dnn/hbm_runtime 标准格式,OS3.x 主推 - 编译临时
.bin:hb_mapper 编译 hbm 过程自动产出,中间碎片,不可独立加载
核心时序链路 PyTorch 训练 → 导出 ONNX → PC OE Docker 执行 hb_mapper → 生成一批临时 bin 权重文件 → 打包封装 → hbm
旧方案:ONNX → 老版本工具链 → 生成第一代可执行 bin 模型(现已淘汰!!!)
一、ONNX 文件(PC 通用模型文件)
生成方式(PC,PyTorch 示例)
python
运行
# export_onnx.py
import torch
from ultralytics import YOLO
model = YOLO("yolov8n.pt")
# 导出ONNX,固定输入尺寸640×640
model.export(format="onnx", imgsz=640)
执行
bash
运行
python3 export_onnx.py
# 输出:yolov8n.onnx
可选优化(推荐)
bash
运行
onnxsim yolov8n.onnx yolov8n_simplified.onnx
使用方法
唯一用途:作为模型编译器hb_mapper的输入源。 不能直接在 RDK 开发板运行!
bash
运行
# 在地平线OE Docker内执行编译
hb_mapper makertbin --config yolov8_nv12.yaml --model-type onnx
二、第一代可执行模型:*.bin(legacy 旧格式,淘汰方案)
对应在
/app/model/basic/看到的yolov8_640x640_nv12.bin
生成方式
使用 ** 老版本地平线工具链(OE1.x)** 编译 ONNX,现已不再推荐,新版 OE 不再支持输出此类 bin。
⚠️ 新版 OE v2.x(适配 RDK X5 bayes-e)无法生成该类 bin 模型。
使用方法(仅旧镜像 OS2.x + easy_dnn)
- 将
yolov8_640x640_nv12.bin传到 RDK X5 - C++ 代码使用
easy_dnn接口加载
cpp
运行
// 旧版legacy伪代码
EasyDNN dnn;
dnn.Init("yolov8_640x640_nv12.bin");
dnn.SetInputData(nv12_frame_buf);
dnn.Run();
兼容性红线
OS3.x 官方镜像通常移除libeasy_dnn.so,无法加载此类 bin,直接报错。新项目禁止使用。
三、hbm 新一代标准模型文件(当前主推)
生成流程:ONNX → hb_mapper → 临时 bin → 打包生成 hbm
步骤 1:准备编译配置 yaml(yolov8_nv12.yaml,RDK X5 固定 march: bayes-e)
yaml
model_parameters:
onnx_model: 'yolov8n_simplified.onnx'
march: 'bayes-e' # RDK X5固定架构
output_model_file: 'yolov8n_640_nv12.hbm'
input_parameters:
input_name: 'images'
input_type: 'nv12'
input_layout: 'hwc'
input_shape: [640,640,3]
步骤 2:在 OE Docker 中执行编译命令
bash
运行
hb_mapper makertbin --config yolov8_nv12.yaml --model-type onnx
编译过程磁盘文件变化:
- 工具自动生成大量 临时.bin*(量化权重分片)
- 全部参数整合封装 → 最终产出
yolov8n_640_nv12.hbm - 编译完成后临时 bin 可以直接删除,不再需要
使用方法(RDK X5 新版 TROS hb_dnn / Python hbm_runtime)
C++ 示例伪代码
cpp
运行
// 加载hbm模型
HbmModel model;
model.Load("yolov8n_640_nv12.hbm");
// 送入vio_capture输出的NV12图像buffer
model.SetInput(nv12_buf);
model.Infer(); // BPU硬件推理
model.GetOutput();
Python 示例
python
运行
from hbm_runtime import HbmRuntime
runtime = HbmRuntime("yolov8n_640_nv12.hbm")
runtime.infer(nv12_image_data)
四、编译过程产生的【临时 bin 文件】
生成时机
执行hb_mapper makertbin编译 ONNX 期间自动生成,文件名随机。
使用规则
- 开发者不手动操作、不拷贝、不上板
- 仅编译器内部读取,用于组装 hbm
- 脱离编译环境单独使用无任何意义
- hbm 生成成功即可全部删除
❌ 重大误区:不要混淆「临时 bin」和「legacy 可执行 bin 模型」!两者后缀相同、用途完全无关。
四类文件汇总对照表
表格
| 文件类型 | 产生位置 | 生成工具 | RDK 板端能否直接推理 | 配套推理库 |
|---|---|---|---|---|
| ONNX | PC 训练环境 | PyTorch/TensorFlow 导出 | ❌ 不能 | 仅作编译输入 |
| legacy 可执行 *.bin(第一代模型) | PC 旧版 OE1.x | 老 hb_mapper | ✅ OS2.x 旧镜像 | easy_dnn / bpu_infer_lib |
| hbm(新一代标准模型) | PC 新版 OE2.x | hb_mapper | ✅ OS3.x 全系列 | hb_dnn / hbm_runtime |
| 编译临时 *.bin | PC OE 编译目录 | hb_mapper 运行时自动生成 | ❌ 不能独立运行 | 无,仅供编译器内部使用 |
极简开发推荐流程(新项目统一标准)
PyTorch 训练 → 导出 ONNX → OE Docker hb_mapper 编译 → 丢弃临时 bin → 获得 hbm → RDK X5 hb_dnn 加载推理
答辩口述精简总结
ONNX 是 PC 端训练导出的通用模型,作为编译输入;
早期旧工具链可编译生成 legacy 格式 bin 模型,搭配 easy_dnn 运行,现已淘汰;
当前标准方案使用新版 hb_mapper 编译 ONNX,编译中途生成若干临时 bin 权重文件,最终封装输出 hbm;
hbm 是 RDK X5 新一代标准模型,通过 hb_dnn 库加载驱动 BPU 推理,推荐所有新项目使用。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)