1. 理论介绍
1.1 为什么需要模型转换

为了实现将浮点模型量化、编译以及部署等操作,各家公司都推出了自己的一套工具,业内称之为“工具链”。量化层面,大多有两种方式:后量化(PTQ) 和 量化感知训练(QAT),其中PTQ在使用层面相对简单一些。
下面以地平线工具链为例,介绍用户可以如何使用hb_mapper工具完成PTQ方案模型转换。
1.2 如何实现模型转换
1.2.1 模型转换流程

1.2.2 fast-perf模式(面向性能评测)
为尽可能简化操作步骤,加速用户模型性能评测流程,从J5 OE v1.1.52,X3 OE v2.6.2,J3 OE v1.17.2版本开始,我们新增了fast-perf模型转换模式,可省去yaml文件和校准数据的准备过程,实现一行命令直接编译得到板端最高性能的 bin 模型(由于校准数据是随机生成的,该模型只可用于性能评测)。具体使用方法为:
在 fast-perf 模式下,工具内部会自动完成如下操作:
将 BPU 可执行算子尽可能运行在 BPU 上(即可通过 yaml 文件中 node_info 参数指定在 BPU 上运行的算子)
删除模型首尾部可删除的 CPU 算子,包括:量化/反量化节点、Transpose、Cast、Reshape 等
以性能最高的 O3 优化等级编译模型
1.3 性能评测简介
单帧延时latency体现了单个模型处理一帧数据所需的时间,是衡量芯片能满足实时性要求的一个重要指标,但因为不同计算平台有多核、大小核、异构计算等不同的架构和设计,所以单帧延时指标有时并不能体现芯片的全部性能,例如双核 BPU 的 J5 在评测单帧延时时就会有一个核心处于空闲状态。
帧率FPS体现了计算平台在满载/接近满载状态下,单位时间能够处理的图像总帧数。在真实场景中,计算平台要并发处理多个摄像头的数据,所以越大的吞吐量才能满足更大的数据处理要求,更贴合实际性能表现,也能作为统一的指标综合体现不同芯片架构的能力。
地平线提供了两个工具hb_perf和hrt_model_exec分别用来在开发机中预估性能(静态性能评估)和在板端实测性能(动态性能评估),关于性能不符合预期的情况,欢迎查看《模型性能分析与调优》。

1.3.1 静态性能评估简介


也可以获取到混合异构bin模型的结构图,如下图:

其中,深蓝色的表示BPU部分,灰色的表示CPU部分。
当我们在进行性能调优时,可以通过静态性能评估的方式查看模型BPU部分算子粒度的耗时信息,进而进行针对性的优化,特别是在缺乏硬件开发板的时候,静态性能评测可以粗略估计出模型的性能情况。
1.3.2 动态性能评估简介
理论介绍完毕,下面我们一起进入实操环节~
2. 模型转换实操(开发机)
为了方便大家复现和演示,准备的文件均从OE开发包中获取。
2.1 进入开发环境
2.2 使用fast-perf进行快速模型转换
模型转换的生成物都在model_output文件夹下,内容如下:
其中model.bin就是用来实现性能评测的混合异构模型,其它的xxx.onnx属于中间产物,主要用于精度评测。
3. 性能评测实操
3.1 静态性能评测(开发机)
使用hb_perf工具进行静态性能评估,命令如下:

3.2 动态性能评测(开发板)
将转换产出物efficientnet_lite0_fp32.bin传到板端,建议放置在/userdata/文件夹下。
先查看当前板端是否有其它程序正在运行:
通过如下命令评测latency:单核单线程跑1000帧看平均latency

通过如下命令评测FPS:双核多线程跑1000帧看平均FPS

至此,模型转换与性能评测完成,更详细性能评测信息欢迎参考:PTQ性能评测及结果解读。
