1. J6参考算法介绍
J6参考算法在覆盖J5已有的分类、检测和分割等高效参考算法的基础上,新增了面向J6平台的高效基础算法Backbone,同时面向典型智驾场景推出针对性的场景算法,覆盖动静态目标检测、双目、道路拓扑和预测等丰富场景,秉承地平线软硬件结合的理念,极大地赋能客户设计出J6平台高效的算法。J6平台新增的算法和模型包括:
高效Backbone:HENET系列;
动态障碍物检测:Bevformer、SparseBev等;
通用障碍物检测:FlashOCC等;
静态目标检测:MapTR系列;
多模态融合:Bevfusion等;
轨迹预测:QCNet等。
参考算法的Model Zoo:J6 算法工具链用户手册-参考算法Model Zoo
2. 快速上手
2.1 算法包获取
docker环境模型源码路径:/usr/local/lib/python3.10/dist-packages/hat
2.2 环境搭建
2.2.1 环境要求
开发机配置要求参考:J6 算法工具链用户手册-开发机准备
依赖 | 版本 |
|---|---|
python | 3.10 |
cuda | 11.8 |
torch/torchvision | 参考OE发布包 |
docker | 20.10.10 |
2.2.2 算法包安装
算法包本地安装流程复杂,并且为了不和用户本地开发环境冲突,强烈建议用户使用J6算法工具链提供的GPU Docker集成开发环境
验证当前开发环境已成功安装算法包方式:
正常打印算法包版本信息即为安装成功。
2.3 数据集准备
数据集 | 使用模型 | 准备流程 |
|---|---|---|
ImageNet | HENET | |
NuScenes | FlashOcc | |
Bevformer | ||
SparseBev | ||
MapTR | ||
Argoverse 2 | QCNet | |
MSCOCO | FCOS |
2.4 模型配置文件解读
模型配置config文件路径:samples/ai_toolchain/horizon_model_train_sample/scripts/configs
模型配置config文件负责定义了模型结构、数据集加载以及整套的训练流程:
注:所有已经提供的config配置,可以保证正常运行和复现精度。如果因为环境配置和训练时间等原因,需要修改配置的话,那么对应的训练策略可能也需要更改
2.5 模型训练
地平线参考算法提供每个阶段训练完成后的权重,在模型对应config文件目录下的README文件中,并指定config文件中ckpt_dir路径加载
2.5.1 浮点训练
完成config文件中参数的配置后,使用以下命令训练浮点模型:
训练完成后的浮点ckpt默认保存在ckpt_dir。
2.5.2 校准
该步骤涉及的QAT校准原理请参考用户手册:J6 算法工具链用户手册-Calibration指南
通过运行下面的脚本开启模型的Calibration:
校准calibration之前,通过修改config文件中calibration_trainer的checkpoint_path参数来配置加载的浮点训练权重。
2.5.3 QAT训练
该步骤涉及的QAT量化感知训练原理请参考用户手册:J6 算法工具链用户手册-量化感知训练指南
通过运行下面的脚本开启模型的量化感知训练:
2.6 模型导出
2.6.1 模型检查
在将PyTorch模型编译为板端可部署执行的模型之前,需要先导出为编译器中间表示模型,也即hbir模型。在导出hbir模型之前,可以对模型进行编译器算子支持以及结构支持的检查,通过如下脚本执行:
2.6.2 导出HBIR模型
当校准或量化训练阶段的模型精度满足预期后,可以使用如下命令导出伪量化hbir和定点hbir模型:
导出的hbir模型默认保存在ckpt_dir,可通过save-path指定自定义保存路径。其中qat.bc为伪量化hbir模型,quantized.bc为量化后的定点hbir模型。
注:默认保存在.hb_model_info目录下的onnx文件仅支持可视化,不支持推理
2.7 模型单帧推理
注:默认推理定点hbir模型(quantized.bc),推理的可视化结果保存路径通过--save-path指定。也可通过修改config文件中infer_cfg相关参数来更换推理伪量化hbir模型或指定输入,运行前需确认指定的输入路径有效
注:生成的单帧推理数据默认保存在config文件infer_cfg参数input_path指定的路径下,用户可自行修改。不指定--use-dataset情况下将自动读取input_path路径下的数据进行单帧推理,运行前需确认指定的路径和有效数据存在
2.8 模型精度验证
通过命令行指定stage参数为float、calibration、qat分别来验证浮点模型、校准模型、QAT模型的精度;使用NuScenes mini数据集进行精度验证时需要修改config中涉及“version”的参数项,可参考“常见问题”章节。
此外在导出定点hbir模型后,也可以通过下面的方式来验证定点hbir模型的精度,也即模型定点化后的量化精度:
2.9 模型编译
编译脚本执行前需确认quantized.bc所在的路径,为hbir_save_dir或ckpt_dir,若使用--save保存hbir模型,则需要将hbir_save_dir修改为--save指定的路径
定点hbir模型的精度满足要求后,使用以下方式将hbir模型编译成可以上板部署的hbm模型(同时该脚本也能预估在BPU上的运行性能):
编译完成后的产出物如下:
2.10 模型板端部署
2.10.1 性能测试
需提前配置好开发板端底软环境和推理库环境
2.10.2 AI Benchmark示例
3. J6参考算法详解
地平线参考算法面向硬件平台特性基于公版模型做了高效优化和改动,相关优化和改动总结于J6 算法工具链用户手册-高效模型设计指导。针对每个模型的详细介绍和详解见下面表格:
场景 | 模型 | 文档 |
|---|---|---|
高效Backbone | HENET | |
动态障碍物检测 | Bevformer | |
动态障碍物检测 | SparseBev | |
通用障碍物检测 | FlashOCC | |
静态目标检测 | MapTR | |
轨迹预测 | QCNet |
4. 常见问题
参考算法FAQ见J6 算法工具链用户手册-常见问题
使用NuScenes mini数据集时出现报错“Samples in split doesn't match samples in predictions”
答:使用NuScenes mini数据集做模型精度验证时,记得对应修改









