一、学习目标
1.了解DVPP+推理端到端样例的执行流程和原理
2.学会如何分析模型及CV样例如何开发
二、样例调试
1.日志
(资料图)
(1)运行应用程序后,若出现报错或异常,需获取日志进一步定位问题。日志文件的默认目录为SHOME/ascend/log,·可通过环境变量指定日志文件的落盘路径,但需确保该目录为任意有读写权限的目录。
可通过环境变量将日志打屏显示
(2)日志格式如下:
(3)日志级别设置
日志模块根据系统设置的日志级别,记录不同详细程度的内容,满足不同系统维护需求。
设置全局日志级别,例如:
设置模块日志级别,例如:
开启Event日志:
2.接口调用逻辑问题
3.软件约束问题
4. 输入数据问题
三、样例结构
结合sampleResnetDVPP样例进行分析
样例流程如图:
模型转换:使用ATC工具将Resnet50.onnx模型转换为离线om模型。 资源初始化:初始化所有资源,包括DVPP初始化、模型初始化等。 输入数据处理:使用DVPP将数据处理到模型需要的大小。 模型推理:使用om模型进行推理。 输出数据处理:对模型推理结果进行处理,该样例是将输出前五置信度的标签进行打印。 资源释放:释放所有资源,包括DVPP及模型资源等。 数据传输:样例运行过程中进行的数据传输动作
四、模型分析
原始模型及输入输出分析是应用开发中极为关键的一环,也是最难的一环,模型分析的正确与否直接决定了样例是否可以正确编写,以及编写后是否能正常输出。
主要包含:原始模型获取、原始模型输入分析、预处理分析、原始模型输出分析及后处理分析。
五、样例编写
1.模型转换
经过上一节的分析,需要使用aipp对数据进行预处理,具体需要实现的有:
(1)将输入从YUV转换成RGB格式
(2)输入数据归一化,均值为[0.485255,0.456255,0.406*255],系数为[1/0.229255,1/0.224255,1/0.225*255]
因此aipp配置为
2.资源初始化
(1)AscendCL初始化
使用AscendCL接口开发应用时,必须先初始化AscendCL,否则可能会导致后续系统内部资源初始化出错,进而导致其它业务异常。
(2)运行管理资源申请与释放
初始化AscendCL后,需要按照固定流程申请运行管理资源。
(3)DVPP初始化
代码需要使用DVPP进行JpegD和Resize操作,由于这些操作中包含一些可复用的资源,所以在初始化中直接申请,避免程序运行过程中反复申请。
/
(4) 模型初始化
模型操作中存在可复用的操作,可以在初始化过程中进行操作。
3.输入数据处理
输入数据处理使用的是DVPP,主要为图片数据加载->JPEGD解码->VPC处理。
4.模型推理及数据后处理
5.资源释放
当程序运行结束后,需要将初始化的资源全部释放
六、样例编译运行
编写CMakeList并进行编译运行。