2. 基础知识

在正式进入地平线模型转换流程之前,先把“模型转换”这件事本身讲清楚。很多初学者会把模型转换简单理解为“把 PyTorch 的 .pt 文件换成 .bin 文件”,但真正落地到地平线征程(Journey)系列芯片上时,它其实是一条从训练框架到板端可执行产物的完整链路。理解这条链路上的概念、术语和工具,是后续实操不踩坑的前提。

一、什么是模型转换:从浮点图到板端可执行产物

模型转换(Model Conversion)是指把在通用训练框架中训练好的模型,经过图解析、算子映射、量化校准、编译优化等步骤,转换为目标芯片能够高效执行的部署产物的过程。对地平线工具链而言,最终产物通常是 .bin 模型文件,它由板端推理库 libdnn 加载运行。

这里有一个关键认知:模型转换不是“格式翻译”,而是“面向硬件的重新编译”。训练框架里的算子(如 Conv2d、LayerNorm、Softmax)需要映射到地平线 BPU(Brain Processing Unit)支持的算子集合;浮点权重需要经过量化变成定点表示;计算图需要经过融合、重排、内存分配等优化,才能匹配 BPU 的并行计算架构。因此,转换过程会涉及精度、性能、算子支持度三者的权衡。

模型转换的本质:框架图 → 中间表示 → 量化校准 → BPU 编译 → 板端可执行模型。每一步都可能影响最终精度与帧率,不能只关注“转换是否成功”。

二、常见术语:先统一语言,再动手操作

地平线工具链文档中有大量专有名词,初学时容易混淆。下面用一张表把最核心的术语集中说明,建议在阅读后续章节时随时回查。

术语 含义 在流程中的位置
ONNX 开放神经网络交换格式,训练框架与地平线工具链之间的通用中间表示 转换输入
BPU 地平线自研神经网络加速单元,负责板端推理计算 目标硬件
量化(Quantization) 把浮点权重/激活映射为定点表示,降低计算与带宽开销 精度与性能的关键环节
校准(Calibration) 用一批代表性数据统计激活分布,确定量化 scale 量化前处理
算子支持列表 BPU 支持的算子及其约束条件清单 模型检查依据
模型检查(Checker) 检查 ONNX 模型是否符合工具链要求,提前暴露不支持算子 转换前置步骤
编译(Compiler) 把量化后的模型编译为 BPU 可执行指令与内存布局 生成 .bin
Runtime / libdnn 板端推理库,负责加载 .bin 并调度 BPU 执行 部署运行

除了表格中的术语,还有几个高频词需要留意:输入布局(如 NCHW 与 NHWC)、动态维度(dynamic shape)、算子融合(fusion)、回退 CPU(fallback)。这些词会在转换日志和精度对比中反复出现。

三、典型应用场景:模型转换到底服务于什么

模型转换不是孤立的技术动作,它服务于具体的业务场景。理解场景有助于判断“该优先保精度还是保速度”。

  • 智能驾驶感知:BEV 感知、障碍物检测、车道线分割等模型,通常对精度敏感,量化时需谨慎校准。
  • 舱内交互:驾驶员监控(DMS)、手势识别、语音唤醒视觉前端,强调低延迟与低功耗。
  • 机器人/低速无人车:视觉 SLAM 前端、目标跟踪,模型较小但要求实时性稳定。
  • 边缘视频分析:多路视频流检测,关注吞吐量,常需要多模型并行与内存复用。

不同场景对转换策略的要求不同。例如,检测模型中的后处理(NMS)如果放在 BPU 上,需要确认算子支持;如果回退到 CPU,则要评估对整体帧率的影响。这些判断都建立在“先理解场景,再选择转换配置”的基础上。

四、地平线工具链概览:一条从训练到部署的流水线

地平线 OpenExplorer 工具链围绕“转换—量化—编译—部署”组织,核心组件包括模型检查工具、量化校准工具、编译器以及板端推理库。下图展示了从训练框架到板端运行的完整信号与数据流,帮助建立整体地图。

地平线模型转换工具链:从训练框架到板端推理 训练框架 PyTorch / TensorFlow ONNX 导出 统一中间表示 模型检查 算子支持 / 图结构 量化校准 校准数据 / scale BPU 编译 指令 / 内存布局 .bin 模型 板端可执行产物 板端 Runtime libdnn 加载推理 关键约束: 算子支持度决定能否上 BPU;校准数据质量决定量化精度;编译配置决定内存与吞吐;Runtime 版本需与编译产物匹配。

从图中可以看到,工具链并不是单点工具,而是一条有方向的数据流:训练框架导出 ONNX,模型检查提前暴露问题,量化校准决定精度基线,BPU 编译生成 .bin,最后由板端 Runtime 加载执行。任何一环配置不当,都会在后续环节放大成精度下降或性能不达标。

五、常见误区与复盘建议

误区一:转换成功就等于部署成功。 转换只说明图结构和算子通过了检查,不代表板端精度和性能达标。必须做板端一致性对比与实测帧率。
误区二:忽略校准数据的代表性。 校准集如果只覆盖简单场景,量化后的模型在复杂场景下精度会明显下降。校准数据应尽量贴近真实分布。
复盘建议: 每次转换前先跑模型检查,记录不支持的算子;转换后保存量化配置与校准日志;板端测试时同时记录精度指标与单帧耗时,形成可追溯的转换记录。