让模型识别更多种类的物体核心步骤是收集新类别的3D标注数据并在原模型基础上进行训练和微调。这个过程对工程能力有一定要求但基本路径是清晰的。整个训练流程主要包括以下四个阶段1. 数据集准备与标注准备新类别的图像与与之精确对齐的3D边界框标注。2. 浮点模型训练/微调基于地平线提供的算法参考框架加载预训练权重在自定义数据集上进行微调。3. 模型转换与量化通过地平线工具链将训练好的模型转换为能在芯片上高效运行的.hbm格式。4. 部署与集成将模型文件部署到RDK开发板上并修改代码以适配新的检测类别。 1. 数据集准备与标注这是最关键也最耗时的一步。高质量的标注数据是模型性能的基石。数据采集采集包含新类别物体的图片确保涵盖不同角度、距离、光照和背景。相机参数应与最终部署时一致。3D标注这是和普通2D检测最大的不同。你需要为每个物体标注3D边界框包括中心点坐标、长、宽、高和朝向角。这通常需要借助专门的3D标注工具。数据格式转换mono3d_indoor_detection示例使用的是COCO格式的标注文件 (train.json,val.json)。你需要将自己的3D标注数据转换成这种格式。关于使用合成数据的说明除了依赖稀少的真实3D标注数据在特定场景下使用仿真合成的3D数据进行训练也是一个值得考虑的路径。使用如NVIDIA Isaac Sim、Unreal Engine等仿真平台可以自动、大规模地生成带有精确3D框标注的图像数据有效降低对真实采集数据的依赖。️ 2. 模型训练与微调在PC端需具备NVIDIA GPU使用地平线的算法工具链来完成。2.1 基础环境搭建模型训练在PC端需具备NVIDIA GPU进行。推荐使用地平线官方提供的Docker镜像它可以一键配置好所有训练环境避免繁琐的依赖问题。2.2 获取示例与修改配置从地平线的horizon_model_train_sample目录中获取CenterNet的参考代码。在此基础上你需要进行以下几处关键修改修改数据集加载类在src/lib/datasets/dataset路径下创建一个新的数据集文件如my_dataset.py。你可以参考示例中的coco.py文件修改num_classes为你的总类别数并确保数据加载逻辑正确。修改配置文件找到用于训练的YAML配置文件将NUM_CLASSES修改为新数据集的类别总数。配置3D输出头最关键的一步。在配置文件中你需要找到用于回归3D信息的common_heads部分。CenterNet3DOutputParser的解析逻辑要求模型的输出必须包含特定顺序和含义的张量你需要根据这个要求来设计你的输出头。具体可以参考如下结构与任务对应关系:Head 名称输出维度 (示例)对应的几何语义reg2中心点偏移 (x, y)height1物体高度 (z)dim3物体的尺寸 (长, 宽, 高)rot2朝向 (编码为 sin(α), cos(α))2.3 开始训练完成上述配置后在PC端执行训练脚本bashpython main.py ctdet --exp_id my_custom_robot --dataset my_dataset --batch_size 8 --lr 1.25e-4命令中的my_dataset应与你上一步定义的类名一致。建议使用迁移学习策略加载COCO或KITTI等大型公开数据集的预训练权重能极大提升训练效率和最终精度。 3. 模型转换与部署训练完成后的浮点模型需要转换为.hbm文件才能在RDK上高效运行。3.1 导出ONNX模型将训练好的PyTorch模型导出为ONNX格式。3.2 使用地平线工具链量化地平线的BPU计算单元主要进行定点运算。因此你需要使用其模型转换工具将浮点模型量化为定点模型。这个过程中你需要准备上一步导出的.onnx模型文件。一个.yaml格式的模型转换配置文件。用于量化的校准数据集。工具链会提供PTQ训练后量化和QAT量化感知训练两种方式。PTQ流程简单通常能满足需求若精度不佳可尝试QAT。3.3 部署转换成功后你会得到一个.hbm文件。将它替换到RDK开发板的config目录下。最后你需要修改mono3d_indoor_detection节点代码中的CenterNet3DDetectionNode::PostProcess函数更新其中的类别名称打印逻辑使其能正确显示新类别的名字。 关键提示验证模型输入尺寸在转换时务必确保模型的输入尺寸与示例模型一致宽x高960x512。这是保证它能在参考代码框架中直接运行的关键。工具链文档是关键上述过程中的许多细节如YAML配置文件的具体语法、量化的参数等都依赖于地平线工具链的版本。请务必仔细查阅你所使用版本的官方工具链文档。从现有3D检测项目起步你也可以搜索并参考其他开源的单目3D检测项目如Monodle、FCOS3D等理解它们的完整实现对训练会很有帮助。不过将它们部署到地平线平台时仍需要遵循其工具链规范。