下载
中文
注册

样例介绍

获取样例

单击YOLOV3_dynamic_batch_detection_picture获取样例

功能描述

该样例主要是基于Caffe YOLOv3网络、在动态Batch或动态多分辨率场景下实现目标检测的功能。

将Caffe YOLOv3网络的模型文件转换为适配昇腾AI处理器的离线模型(*.om文件),转换命令中需要设置不同档位的batch size(样例中batch档位分为1,2,4,8)或不同档位的分辨率(样例中分辨率档位分为416, 416;832,832;1248,1248),在应用中加载该om文件,通过传参设置选择不同档位的batch size或者分辨率进行推理,并将推理结果保存到文件中。

原理介绍

在该Sample中,涉及的关键功能点,如下表所示。

初始化

  • 调用aclInit接口初始化AscendCL配置。
  • 调用aclFinalize接口实现AscendCL去初始化。

Device管理

  • 调用aclrtSetDevice接口指定用于运算的Device。
  • 调用aclrtGetRunMode接口获取软件栈的运行模式,根据运行模式的不同,内部处理流程不同。
  • 调用aclrtResetDevice接口复位当前运算的Device,回收Device上的资源。

Stream管理

  • 调用aclrtCreateStream接口创建Stream。
  • 调用aclrtDestroyStream接口销毁Stream。

内存管理

  • 调用aclrtMalloc接口申请Device上的内存。
  • 调用aclrtFree接口释放Device上的内存。

数据传输

如果在Host上运行应用,则需调用aclrtMemcpy接口:

  • 将数据从Host传输到Device上,作为解码的输入数据。
  • 模型推理结束后,将推理结果从Device传输到Host。

如果在板端环境上运行应用,则无需进行数据传输。

模型推理

  • 调用aclmdlLoadFromFileWithMem接口从*.om文件加载模型。
  • 调用aclmdlSetDynamicBatchSize设置batch size或者调用aclmdlSetDynamicHWSize设置分辨率。
  • 调用aclmdlExecute接口执行模型推理,同步接口。
  • 调用aclmdlUnload接口卸载模型。

数据后处理

样例中提供了自定义接口DumpModelOutputResult,用于将模型推理的结果写入文件(运行可执行文件后,推理结果文件在运行环境上的应用可执行文件的同级目录下):

processModel.DumpModelOutputResult();

目录结构

样例代码结构如下所示。

├── data
│   ├── tools_generate_data.py            //测试数据生成脚本

├── inc
│   ├── model_process.h               //声明模型处理相关函数的头文件
│   ├── sample_process.h              //声明资源初始化/销毁相关函数的头文件                   
│   ├── utils.h                       //声明公共函数(例如:文件读取函数)的头文件

├── src
│   ├── acl.json         //系统初始化的配置文件
│   ├── CMakeLists.txt         //编译脚本
│   ├── main.cpp               //主函数,图片分类功能的实现文件
│   ├── model_process.cpp      //模型处理相关函数的实现文件
│   ├── sample_process.cpp     //资源初始化/销毁相关函数的实现文件                                          
│   ├── utils.cpp              //公共函数(例如:文件读取函数)的实现文件

├── .project     //工程信息文件,包含工程类型、工程描述、运行目标设备类型等
├── CMakeLists.txt    //编译脚本,调用src目录下的CMakeLists文件