x5 cpu docker提取下载问题

RDK X5 工具链完整使用教程(保姆级)

既然 hb_mapper 已验证成功,下面给你从模型到板端部署的完整流程:


一、准备工作

1. 在宿主机准备项目目录

# 创建项目目录
mkdir -p ~/x5_project/{models,onnx,config,output}
cd ~/x5_project

# 准备你的 ONNX 模型(放到 onnx 目录)
cp your_model.onnx ~/x5_project/onnx/

2. 启动 Docker 容器

docker run -it --name x5_dev \
  -v ~/x5_project:/workspace \
  -w /workspace \
  registry.d-robotics.cc/deliver/ai_toolchain_ubuntu_20_x5_cpu:v1.2.8 \
  bash

二、模型转换流程

步骤 1:检查模型兼容性

cd /workspace/onnx

# 检查模型是否支持 X5 BPU
hb_mapper checker \
  --model your_model.onnx \
  --output-dir ../output/check_result

查看 ../output/check_result 下的检查报告,确认:

  • :white_check_mark: 算子是否都支持
  • :warning: 是否有算子需要 CPU fallback
  • :cross_mark: 是否有不支持的算子

步骤 2:创建转换配置文件

/workspace/config 下创建 x5_config.json

{
  "model_parameters": {
    "input_name": ["input"],
    "input_shape": [[1, 3, 640, 640]],
    "input_type": ["uint8"],
    "output_name": ["output"]
  },
  "compiler_parameters": {
    "target_chip": "X5",
    "core_type": "BPU",
    "optimization_level": 2
  }
}

参数说明:

  • input_name:模型输入节点名(用 netron 查看 ONNX 结构)
  • input_shape:输入形状 [batch, channel, height, width]
  • input_type:输入数据类型(uint8/float32)
  • target_chip:目标芯片(X5)

步骤 3:执行模型转换

cd /workspace

# 转换模型
hb_mapper convert \
  --model onnx/your_model.onnx \
  --config config/x5_config.json \
  --output-dir output/converted

成功后会生成:

  • output/converted/your_model.bin(BPU 模型文件)
  • output/converted/your_model.prototxt(模型描述文件)

三、量化流程(PTQ)

如果需要量化(推荐,提升推理速度):

步骤 1:准备校准数据

# 创建校准数据目录
mkdir -p /workspace/calib_data/images

# 放入 100-500 张代表性图片(jpg/png 格式)
# 图片应与实际推理场景一致

步骤 2:创建量化配置文件

/workspace/config/quant_config.json

{
  "model_parameters": {
    "input_name": ["input"],
    "input_shape": [[1, 3, 640, 640]],
    "input_type": ["uint8"],
    "output_name": ["output"]
  },
  "compiler_parameters": {
    "target_chip": "X5",
    "core_type": "BPU",
    "optimization_level": 2
  },
  "quantization_parameters": {
    "calibration_data_dir": "/workspace/calib_data/images",
    "calibration_method": "minmax",
    "quantization_type": "asymmetric"
  }
}

步骤 3:执行量化

hb_mapper quant \
  --model onnx/your_model.onnx \
  --config config/quant_config.json \
  --output-dir output/quantized

四、板端部署

步骤 1:传输文件到 X5 板子

# 在宿主机执行(退出容器后)
# 将转换后的模型文件传到 X5 板子
scp -r ~/x5_project/output/converted user@x5_ip:/home/user/models/

或者用 U 盘拷贝:

  • your_model.bin
  • your_model.prototxt

步骤 2:在 X5 板子上推理

X5 板子上需要安装 Horizon ROS2 包 或使用 hb_rt 推理库:

# 在 X5 板子上
cd /home/user/models

# 使用 hb_rt 推理(需要安装 runtime)
hb_rt --model your_model.bin --input input.jpg --output result.jpg

或者用 C++/Python SDK:

# 示例:Python 推理
from horizon_inference import BpuPredictor

predictor = BpuPredictor("your_model.bin")
result = predictor.predict(input_image)

五、完整示例(YOLO 检测)

参考社区教程:RDK YOLO Toolkit

# 1. 准备 YOLO ONNX 模型
cd /workspace/onnx
# 从 Ultralytics 导出:yolo export model=yolov8n.onnx

# 2. 检查模型
hb_mapper checker --model yolov8n.onnx --output-dir ../output/check

# 3. 创建 X5 配置文件
cat > /workspace/config/yolo_config.json << 'EOF'
{
  "model_parameters": {
    "input_name": ["images"],
    "input_shape": [[1, 3, 640, 640]],
    "input_type": ["uint8"],
    "output_name": ["output0"]
  },
  "compiler_parameters": {
    "target_chip": "X5",
    "core_type": "BPU"
  }
}
EOF

# 4. 转换模型
hb_mapper convert \
  --model onnx/yolov8n.onnx \
  --config config/yolo_config.json \
  --output-dir output/yolo_converted

# 5. 量化(可选)
hb_mapper quant \
  --model onnx/yolov8n.onnx \
  --config config/yolo_config.json \
  --output-dir output/yolo_quantized

六、常用命令速查

命令 说明
hb_mapper --help 查看帮助
hb_mapper checker 模型兼容性检查
hb_mapper convert 模型转换
hb_mapper quant PTQ 量化
hb_mapper dump 导出中间结果
netron model.onnx 查看 ONNX 结构(需安装 netron)

七、问题排查

# 1. 查看工具链版本
hb_mapper --version

# 2. 查看支持的算子
hb_mapper op_list --target_chip X5

# 3. 详细日志
hb_mapper convert --log_level debug ...

# 4. 查看转换报告
cat output/converted/report.json

八、推荐学习资源

资源 链接
官方工具链汇总帖 版本发布汇总
YOLO 部署教程 RDK YOLO Toolkit
AI Agent 量化部署 Skill 分享
官方文档 RDK DOC

下一步建议:

  1. 先用一个简单的 ONNX 模型(如 ResNet)跑通全流程
  2. 再尝试你的实际模型
  3. 遇到问题把 hb_mapper 的报错信息发到社区

需要我针对某个具体模型(如 YOLO、分类、分割)给更详细的配置吗?