天工开物(Open Explorer,OE)是基于地平线硬件开发的算法全生命周期开发平台,主要包括芯片算法工具链、芯片算法仓库和应用开发SDK三大功能模块。其中,芯片算法工具链覆盖了模型训练(浮点训练和量化训练,可选)、转换、性能/精度验证、部署和推理等关键步骤。为了方便用户快速体验和学习地平线芯片算法工具链,OE开发包中提供了丰富、全面的示例。为了方便用户了解和使用这些示例,本文将对这些示例进行详细介绍。
首先,用户在获取OE开发包后,解压后的文件目录结构如下所示:
首先,用户在获取OE开发包后,解压后的文件目录结构如下所示:
其中,ddk/samples目录中提供了模型训练示例、浮点模型转定点模型示例、定点模型上板部署示例、AI Benchmark评测示例、目标检测全链路示例和DSP开发示例。下图为工具链使用的一般流程和示例的分布,让我们一起来看一下工具链各使用阶段分别有哪些示例吧:

在上图工具链的使用流程中,这些示例对应着不同的使用阶段:

在上图工具链的使用流程中,这些示例对应着不同的使用阶段:
- 模型转换示例包含了模型PTQ转换阶段的模型检查、校准数据处理、模型量化编译、单张图片推理和精度评估等过程;
- 模型训练示例包含了浮点模型训练(可选)和QAT量化训练(可选)阶段的数据集打包脚本、模型config文件、训练脚本以及其它工具脚本,当应用模型精度调优手段后仍未达到预期精度时,可以尝试QAT量化训练策略;
- 板端部署示例包含了模型部署阶段的编译脚本、运行脚本和源代码;
- AI Benchmark示例提供了Runtime应用开发常见分类、检测、分割和光流估计模型的性能和精度评测示例;
- 目标检测全链路示例展示如何在芯片上运行从Camera接入到目标检测模型推理的过程,并在web端展示结果;
- DSP开发示例展示了如何在j5芯片上使用DSP进行模型推理任务。
1. 模型训练示例
通过部署地平线的海图(Horizon Algorithm Toolkit,HAT)训练环境,可以实现模型的浮点训练和量化感知训练。ddk/samples/ai_toolchain/horizon_model_train_sample/目录下提供了模型训练示例,示例包结构如下所示:
通常只需要使用以下命令就可以实现模型的训练:
- TRAINING_STAGES指的是不同的训练阶段,可选为float, qat, int_infer,分别对应着浮点训练、量化训练和定点模型转化预测阶段。
- /PATH/TO/CONFIG 就是configs文件夹中模型训练对应的 config 文件,它定义了模型结构、数据集加载、以及整套的训练流程,示例中提供了包括分类、检测、分割和光流估计任务的模型。
- tools文件夹提供了包含数据集处理、模型训练、转换编译、计算量统计等执行脚本,相关脚本的功能如下:
train.py:模型训练脚本,支持浮点模型训练、量化训练功能
calops.py:网络模型计算量统计工具
align_bpu_validation.py:精度验证工具,提供和板端完全对齐的结果
compile_perf.py:模型编译和perf工具
create_data.py:数据集预处理工具
export_onnx.py:onnx模型导出工具
infer.py:单图预测和结果可视化工具
infer_lidar.py:点云模型可视化工具
model_checker.py:模型检查工具
predict.py:模型精度验证工具 - tools/dataset 文件夹下还提供了数据集打包和数据可视化脚本。
- release_models文件夹下包含了模型的权重文件和板端部署的模型。
模型训练示例的使用教程可以参考用户手册进阶内容-Horizon Torch Samples。
2. 模型转换示例
ddk/samples/ai_toolchain/horizon_model_convert_sample文件夹下提供了模型转换示例,示例包目录结构如下所示:
OE包里不仅提供了PTQ模型、QAT模型、特别输入、自定义算子模型转换示例,另外还包含了模型检查、校准数据预处理、转换编译、推理等一键运行脚本。如下为目录中相关示例的分布:

本文以horizon_model_convert_sample/03_classification/01_mobilenet/mapper目录下的mobilenet为例,介绍相关脚本的作用:
PTQ模型转换示例的使用教程请参考PTQ模型转换示例手册。
3. 板端部署示例
ddk/samples/ai_toolchain/horizon_runtime_sample目录下提供了模型部署示例的源代码和运行脚本,示例包结构如下所示:
- 00_quick_start:快速入门示例,基于 dnn API,以mobilenetv1模型为例进行单张图片模型推理和结果解析。
- 01_api_tutorial:dnn API使用教学代码, 包括:
-- mem:内存使用相关API( hbSysAllocMem、hbSysFlushMem 和 hbSysFreeMem )示例
--model:模型信息读取API示例
--roi_infer :roi推理API示例
--tensor :模型输入和输出tensor准备API示例 - 02_advanced_samples:特殊功能示例,包括:
--custom_identity:自定义算子推理示例
--multi_input:多输入模型推理示例
--multi_model_batch:多个小模型批量推理示例
--nv12_batch :batch模型推理示例 - 03_misc:非NV12输入模型的杂项示例。
- j5:示例运行脚本,预置了数据集和相关模型。
- build_j5.sh:程序一键编译脚本。
- build_x86.sh:x86仿真环境一键编译脚本。
- deps_gcc9.3:示例代码所需要的三方依赖, 用户在开发自己代码程序的时候可以根据实际情况替换或者裁剪。
模型部署示例使用教程可以参考用户手册基础示例包使用说明。
4. AI Benchmark评测示例
AI Benchmark示例包提供了Runtime应用开发常见分类、检测、分割和光流估计模型的性能和精度评测示例。 示例包中预置了模型推理和后处理源码、可执行程序和评测脚本,开发者可以在地平线开发板上进行体验,并基于这些示例直接进行应用开发,降低开发门槛。AI Benchmark示例使用教程可以参考用户手册AI-Benchmark使用说明。
AI Benchmark示例包位于ddk/samples/ai_benchmark/ 目录下,主要包括以下内容:
AI Benchmark示例包位于ddk/samples/ai_benchmark/ 目录下,主要包括以下内容:
编号 | 名称 | 内容 |
|---|---|---|
1 | code | 包含示例源码和编译脚本 |
2 | j5 | 示例包上板运行环境 |
示例包结构如下所示:
5. 目标检测全链路示例
目标检测全链路示例包展示如何在芯片上运行一个检测模型并在web端展示结果。全链路示例包位于ddk/samples/ai_forward_view_sample/目录下,主要包括以下内容:
- configs/vio/vin/camera:Camera输入数据模式配置
- configs/vio/vin/network:网络回灌输入模式配置
全链路示例使用教程请参考社区文章J5全流程示例解读。
6. DSP开发示例
地平线J5芯片中包含两个拥有强大的计算能力的DSP核,可以将一些不能用BPU加速且ARM低效的计算部署到DSP上,从而可以大大提高模型的推理性能。ddk/samples/vdsp_rpc_sample目录下提供了DSP开发示例,展示了如何在j5上采用自定义算子进行mobilenetv1的推理,示例包结构如图所示:
arm:arm侧自定义softmax算子实现示例,主要负责发起rpc调用dsp执行任务。
dsp:dsp侧自定义softmax算子实现示例,主要负责接收arm侧发来的任务,完成计算后将结果发送给arm。
dsp_wrap:dsp自定义算子封装,用于libdnn发起rpc调用。
deps:arm和dsp程序的依赖文件。
DSP开发示例使用教程可以参考社区文章DSP开发快速上手。

