SSU_IPU使用参考


1. IPU


1.1. 简介

IPU(Image Processing Unit)

MI IPU模块实现了AI模型的推演功能加速。IPU的使用包括PC端IPU SDK对模型的训练、转换和仿真以及芯片端MI IPU对模型的调用、推算等。

IPU SDK的使用请参考IPU SDK目录下的文档,MI IPU相关API介绍和使用请参考MI IPU API文档。本篇主要介绍IPU在芯片端常用的调试方法以及SSTAR人脸/人形算法demo的使用。

本文所提及Demo,请移步:https://github.com/aaron201912/Opera_Demo


1.2. MI_IPU芯片端验证模型是否正确

IPU模型在PC端仿真得到了结果,需要在芯片端验证模型的结果是否和仿真的匹配。可以通过dla_simulator来验证。

示例:

./prog_dla_dla_simulator -i ./480x800.jpeg -m ./sypfa5.480302_fixed.sim_sgsimg.img -c Unknown --format BGRA

注意:如果是ARGB格式,format要设置BGRA,SSTAR平台的ARGB存储顺序采用的方式是调转的。如果模型跟标准的classification或detection不一致,-c需要填Unknown。

运行log会打印tensor、model等信息,以及推算耗时,以评估帧率等性能。

在out目录下得到板端推算的output Tensor定点类型输出类似下图的结果,与PC端仿真的浮点类型结果做对比,来确认模型的精度是否正常。

定点类型和浮点类型对比会存在一些小误差,这属于正常现象。

nbatch模型的验证请使用dla_simulator_nbatch demo,跟dla_simulator demo的使用区别只在于多了个-n参数指定一次最大推演数。


1.3. 通过IPU Log进行性能分析

通过板端生成的IPU Log和IPU SDK带的分析工具,用户可以看倒每层性能耗时占比,从而对算法模型进行优化。

MI IPU API文档中,有关于板端IPU的一些debug命令,包括查看修改IPU clock、开启抓取IPU Log等。要生成IPU Log需要用命令先开启抓取IPU Log,之后使用IPU SDK分析工具时输入参数需要传递当前IPU clock,也可以通过命令来确认。

分析工具的使用具体阅读IPU SDK文档中用户手册7.11.IPU Log性能分析工具的讲解,这边只对板端IPU Log生成做介绍,使用dla_show_img_info.zip demo,使用举例如下:

将会在指定路径生成xxx_log_core0.bin和xxx_log_corectrl0.bin两个文件。

之后将两个bin文件搭配分析工具转换成json文件再用chrome浏览器打开就可以看到各信息。


1.4. MI_IPU使用率统计

MI_IPU与CPU类似,都是执行指令运算,但与CPU不同的是,IPU没有系统给IPU做硬件上的分时复用,所以IPU运算时都是把core的算力拉到最高的。IPU只有使用率的概念,即IPU核在一段时间内工作时间占的比例。由于每一次推算之间都会存在几微秒的间隔,这主要是上层软件执行的时间,所以IPU不存在使用率100%的情况。

以下demo提供了使用率统计的功能,可以统计IPU核在一段时间内工作了多长时间,并计算出百分比。

ipu_utilization.c

编译指令:

 arm-linux-gnueabihf-gcc ipu_utilization.c -o Ipu_calculate

运行:

/mnt # ./Ipu_calculate
usage: ./Ipu_calculate -t time_interval 多久统计并打印一次,单位:秒
/mnt # ./Ipu_calculate -t 1

结果举例:

因为当前芯片只有一个IPU核,所以只关注core0的数值即可。


1.5. 如何拉满IPU使用率

在一些特定场景,如:测试PCB板温度、功耗等数据,要求把IPU使用率拉到最高。

在1.2.所述的dla_simulatordemo code中修改如下:

让IPU不停的做Invoke即可,再用1.3.所述的demo统计当前的使用率,可以看到已经接近100%。


2. SSTAR人脸/人形检测算法


2.1. 简介

SSTAR人脸/人形检测算法是将MI IPU的接口调用封装到了lib中,lib中已经实现了后处理,用户只需通过算法API文档和demo了解算法的使用,即可实现人脸/人形检测功能。

算法功能如下:

检测图像中的所有目标,标记出每个目标的坐标位置,不限制目标数量。常见的适用场景如下:

(1)轻度斜拍;

(2)轻度遮挡,截断等;

(3)轻度密集场景。

需要说明的是:

(1)对于图像质量差的图像,例如:模糊、严重遮挡、光线暗等情况,检测效果会受到影响。

(2)红外图像缺少颜色特征,算法效果与可见光相比,有一定差异;

(3)demo中Threshold是给出的建议值,作为参考,不同的业务场景测试结果可能会有差异,需要根据实际测试情况选取合适的阈值。


2.2. CPU送图检测demo

本Demo主要针对的是IPU运算人脸、人形检测的使用介绍,推单张或多张图给算法运算的场景。

文件:Algo_detection_image_demo

文件结构如下图:

doc: SSTAR算法介绍文档和api文档

inc: 所需头文件

libs: SSTAR人脸/人形检测算法库

model: SSTAR人脸/人形检测模型

out: 输出可执行文件

res: 测试用图片

test_draw.cpp: demo源码

具体的使用方法请参考ReadMe文档。


2.3. Sensor图像检测实时屏幕显示demo

本Demo主要针对的是IPU运算人脸、人形检测的使用介绍,sensor图像实时送给算法运算并显示在屏幕的场景。注:需要SDK支持DRM && Dma_heap。

文件:Algo_detection_sensor_demo

文件结构请参考2.2.所述。

具体的使用方法请参考ReadMe文档。