训练一个生成 centernet.hbm 的模型,核心是分为两阶段走:先在PC上用PyTorch等框架训练好一个浮点模型,再用地平线的工具链将它量化和编译成.hbm格式

下面的图表清晰地展示了整个流程。


🔬 第一阶段:浮点模型训练

这个阶段的目标是得到一个能正常工作的.onnx格式的浮点模型。关键挑战在于Align with your 3D output parser

  • 1. 环境搭建
    你可以选择地平线官方提供的PyTorch开发环境(包括Docker镜像或本地安装)

,也可以使用更熟悉的CenterNet3D开源项目(如maudzung/CenterNet3D-PyTorch)自行搭建

  • 2. 数据准备
    模型的输入是关键:训练图像的尺寸须固定为512x960,色彩空间为BGR。对于标签,你得按照CenterNet3D的方式,为每个目标生成一个高斯热力图,并准备好其3D属性

  • 3. 模型架构修改 (最重要)
    这是整个训练任务中最关键的一步。你的模型输出必须与 centernet_3d_output_parser.cpp 完全匹配,这个解析器通过以下5个特定名称的“头”(Head)来获取3D信息

模块/函数 说明
heatmap (热力图) 预测类别
size_2d (2D尺寸) 输出维度: 2
offset_2d (2D偏移) 输出维度: 2
depth (深度) 输出维度: 2
offset_3d (3D偏移) 输出维度: 3
size_3d (3D尺寸) 输出维度: 3
heading (朝向) 输出维度: 12

设置自定义模型输出头:

python

self.heads = {
    'heatmap': num_class,   # 类别数量
    'offset_2d': 2,         # 2D偏移量
    'size_2d': 2,           # 2D尺寸
    'depth': 2,             # 深度信息
    'offset_3d': 2,         # 3D偏移量
    'size_3d': 3,           # 3D尺寸 (长宽高)
    'heading': 12           # 朝向角编码
}
  • 4. 模型训练
    使用修改好的架构在自定义3D数据集上训练浮点模型。为更快收敛,强烈建议使用在KITTI或COCO等大型数据集上预训练的模型作为起点。

  • 5. 导出ONNX
    训练完成后,将PyTorch模型导出为ONNX格式。这一步是连接两个阶段的桥梁。这里有个优化点:可以将后处理的一部分(比如解码)直接写入模型图,这样能减少部署后的开发工作量,提升推理效率


⚙️ 第二阶段:模型转换与编译

工具链的核心功能是模型量化、转换、编译和性能分析

  • 1. 环境搭建:进入地平线工具链的Docker环境
    首先,从地平线官网获取与你芯片匹配的工具链Docker镜像

。地平线强烈建议使用官方提供的Docker镜像以获得稳定一致的开发环境

  • 2. 配置与量化
    你需要准备三样东西:

    • 浮点模型 (ONNX): 上一步导出的centernet3d.onnx

    • 校准数据集 (Calibration Data): 从训练集中挑选能代表真实场景的少量图片样本

  • YAML配置文件: 这是核心,需要定义输入节点、输出节点、量化校准参数(如calibration_type)等。建议复制官方示例(如yolov5s_config.yaml)进行修改

  • 3. 模型检查
    使用hb_mapper checker命令检查模型算子的兼容性

  • 。这一步会告诉模型转换工具来检查你的ONNX模型,确保所有算子都受支持,并预测运算将如何在BPU/CPU上分配。

  • 4. 生成 .hbm 模型
    最后,使用hb_mapper makertbin命令进行模型编译

  • 。将上面准备好的模型、校准集和配置都喂给指令,就能生成最终的centernet.hbm文件了。指令执行成功后,你就拿到了可以在RDK开发板上直接使用的最终产物。

常见问题排查
  • 算子兼容性问题: 如果hb_mapper checker报错,说明有算子不支持。这时可以尝试简化模型结构,或者在工具链支持列表里寻找替代方案

  • 量化后精度下降: 这是常见问题。可以调整YAML中的校准参数,或尝试使用量化感知训练(QAT) 进行更精细的调优

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐