(三)Open Explorer

什么是OE
OE是Open Explorer的缩写简称,中文名为天工开物(以下简称OE),它是基于地平线自研计算平台打造的全生命周期开发平台, 主要包括模型编译优化工具集、算法仓库和应用开发SDK三大功能模块。基于这三大功能模块开发的应用参考解决方案,为智能驾驶、智能物联网等行业方案提供了案例支撑。

1. 模型编译优化工具集:聚焦于智能业务场景,包括完成算法模型转换与编译流程中所涉及到的一系列软件工具集,提供模型量化、优化、编译、调试等功能。
2. 算法仓库:贴合时下智驾领域的基础算法结构,和重点业务算法技术点,地平线提供了丰富的开源最佳实践,赋能地平线合作伙伴更快、更省地开发出自己的智能产品。
3. 应用开发SDK:提供丰富的基础接口与工具,支撑业务算法在征程平台的部署,可以完整支撑客户在仿真和物理环境下的部署全流程。
OE可以为地平线合作伙伴提供丰富多样的算法资源、灵活高效的开发工具和简单易用的开发框架。 OE的特色和优势可以概括为以下四个方面:

工具链
地平线J5算法工具链(以下简称工具链)是一套完整的边缘计算平台算法落地解决方案,可以帮助您把浮点模型量化为定点模型, 并在地平线计算平台上快速部署自研算法模型。
目前在GPU上训练的模型大部分都是浮点模型,即参数使用的是float类型存储。地平线BPU架构的计算平台使用的是int8的计算精度(业内计算平台的通用精度),能运行定点量化模型。
从训练出的浮点精度转为定点模型的过程,我们称之为量化。同时模型量化后能够有效减少模型大小,加速深度学习推理的速度,因此也在学术界和工业界被广泛研究和应用。
依据是否要对量化后的参数进行调整,我们可以将量化方法分为训练后量化(PTQ)和量化感知训练(QAT)。 这两种方法的操作区别如下图所示(图左为PTQ,图右为QAT):

训练后量化PTQ是使用一批校准数据对训练好的模型进行校准,将训练过的FP32模型直接转换为定点计算的模型,过程中无需对原始模型进行任何训练,只需要对几个超参数进行调整就可以完成量化过程, 且过程简单快速,无需训练,因此该方法已被广泛地应用于大量的端侧和云侧部署场景。
量化感知训练QAT是将训练过的模型量化后又再进行重训练。由于定点数值无法用于反向梯度计算,实际操作过程是在某些OP前插入伪量化节点(fake quantization nodes), 用于在训练时获取流经该OP的数据的截断值,便于在部署量化模型时对节点进行量化时进行使用。需要在训练中通过不断优化精度来获取最佳的量化参数。
工具链由PTQ、QAT和嵌入式编译等部分组成,工具链组成示意图如下:

其中:
Runtime SDK 提供了异构模型的运行库支持,运行库包含arm和x86两个部分,分别用于在地平线计算平台和X86仿真平台执行异构模型。
工具链的整体使用流程如下图所示。

关键概念
- 原始浮点模型
指通过TensorFlow/PyTorch等等DL框架训练得到的可用模型,这个模型的计算精度为float32。
- 混合异构模型
是一种适合在地平线计算平台上运行的模型格式,之所以被称为异构模型是因为它能够支持模型同时在ARM CPU和BPU上执行。 由于在BPU上的运算速度会远大于CPU上的速度,因此会尽可能的将算子放在BPU上运算。对于BPU上暂时不支持的算子,则会放在CPU上进行运算。
- hbm文件
即Horizon BPU Model,HBDK编译器生成的模型文件,hbm包含BPU指令、模型参数、输入输出描述等信息。
- 算子
深度学习算法由计算单元组成,我们称这些计算单元为算子(Operator,也称op)。 算子是一个函数空间到函数空间上的映射,同一模型中算子名称是唯一的,但是同一类型的算子可以存在多个。 如:Conv1、Conv2,是两个算子类型相同的不同算子。
- 模型转换
指的是将原始浮点模型或QAT转换得到的onnx模型转换为地平线混合异构模型的过程。
- 模型量化
目前工业界最有效的模型优化方法之一,量化是指定点与浮点等数据之间建立一种数据映射关系,使得以较小的精度损失代价获得了推理性能收益,可简单理解为用“低比特”数字表示FP32等数值,如FP32–>INT8可以实现4倍的参数压缩,在压缩内存的同时可以实现更快速的计算。
- PTQ
即训练后量化方案,先训练浮点模型,然后使用校准图片计算量化参数,将浮点模型转为量化模型的量化方法。更详细的介绍可参考 PTQ、QAT简介 章节。
- QAT
即量化感知训练方案,在浮点训练的时候,就先对浮点模型结构进行干预,使得模型能够感知到量化带来的损失,减少量化损失精度的方案。更详细的介绍可参考 PTQ、QAT简介 章节。
- 张量
张量,也称Tensor,具备统一数据类型的多维数组,作为算子计算数据的容器,包含输入输出数据。 张量具体信息的载体,包含张量数据的名称、shape、数据排布、数据类型等内容。
- 数据排布
深度学习中,多维数据通过多维数组(张量)进行存储,通用的神经网络特征图通常使用四维数组(即4D)格式进行保存,即以下四个维度:
- N:Batch数量,如图片的数量。
- H:Height,图片的高度。
- W:Width,图片的宽度。
- C:Channel,图片的通道数。
但是数据只能线性存储,因此四个维度有对应的顺序,不同的数据排布(format)方式,会显著影响计算性能。 常见的数据存储格式有NCHW和NHWC两种:
- - NCHW:将同一通道的所有像素值按顺序进行存储。
- - NHWC:将不同通道的同一位置的像素值按顺序进行存储。
如下图所示:

- 数据类型
下文常用到的图片数据类型包括rgb、bgr、gray、yuv444、nv12、featuremap。
- rgb、bgr和gray都是比较常见的图像格式,每个数值都采用UINT8表示。
- yuv444也是一种常见的图像格式,它的每个数值都采用UINT8表示。
- nv12是常见的yuv420图像格式,每个数值都采用UINT8表示。
- featuremap适用于以上列举格式不满足您需求的情况,此type每个数值采用float32表示。例如雷达和语音等模型处理就常用这个格式。
Open Explorer 安装
Open Explorer 安装硬件要求
硬件/操作系统 | 要求 |
CPU | CPU I3以上或者同级别E3/E5的处理器 |
内存 | 16G或以上级别 |
GPU | CUDA11.6、驱动版本Linux:>= 510.39.01* (推荐驱动版本Linux:515.76) |
系统 | Ubuntu 20.04 |
