样例介绍
获取样例
单击Gitee,进入Ascend samples开源仓,详细参见README中的“版本说明”下载配套版本的sample包,从“python/level2_simple_inference/1_classification/resnet50_async_imagenet_classification”目录下获取resnet50_async_imagenet_classification样例。
功能描述
该样例主要是基于Caffe ResNet-50网络(单输入、单batch)实现图片分类的功能。
将Caffe ResNet-50网络的模型文件转换为适配昇腾AI处理器的离线模型(*.om文件)。该样例中加载该om文件,对2张jpg(*.jpg)图片进行n次异步推理(n作为运行应用的参数,由用户配置,可通过“--execute_times”参数设置,默认为4次),分别得到n次推理结果后,再对推理结果进行处理,输出top5置信度的类别标识。
主要接口
功能 |
对应ACL模块 |
ACL 接口函数 |
功能说明 |
---|---|---|---|
资源初始化 |
初始化 |
acl.init |
初始化ACL配置。 |
Device管理 |
acl.rt.set_device |
指定用于运算的Device。 |
|
Context管理 |
acl.rt.create_context |
创建Context。 |
|
模型初始化 |
模型加载与执行 |
acl.mdl.load_from_file |
从*.om文件加载模型到device侧。 |
数据类型及操作接口 |
acl.mdl.create_desc |
创建模型描述数据类型。 |
|
数据类型及操作接口 |
acl.mdl.get_desc |
获取模型描述数据类型。 |
|
模型推理 |
模型加载与执行 |
acl.mdl.execute_async |
执行模型异步推理。 |
同步等待 |
同步等待 |
acl.rt.subscribe_report |
指定处理Stream上回调函数的线程。 |
同步等待 |
acl.rt.unsubscribe_report |
取消线程注册,Stream上的回调函数不再由指定线程处理。 |
|
同步等待 |
acl.rt.launch_callback |
在Stream的任务队列中增加一个需要在Host/Device上执行的回调函数。 |
|
同步等待 |
acl.rt.process_report |
等待指定时间后,触发回调处理。 |
|
数据交互 |
内存管理 |
acl.rt.memcpy |
数据传输,Host->Device或Device->Host。 |
内存管理 |
acl.rt.malloc |
申请Device上的内存。 |
|
内存管理 |
acl.rt.malloc_host |
申请Host上的内存。 |
|
公共模块 |
-- |
acl.util.ptr_to_numpy |
void*数据转换为numpy类型数据。 |
-- |
acl.util.numpy_to_ptr |
numpy类型数据转换为void*数据。 |
|
-- |
acl.util.start_thread |
启动一个回调函数线程。 |
|
-- |
acl.util.stop_thread |
回收一个回调函数线程。 |
|
数据后处理 |
数据类型及操作接口 |
acl.mdl.get_dataset_buffer |
获取数据集中信息。 |
数据类型及操作接口 |
acl.mdl.get_dataset_num_buffers |
获取数据集中信息。 |
|
资源释放 |
内存管理 |
acl.rt.free |
释放Device上的内存。 |
内存管理 |
acl.rt.free_host |
释放Host上的内存。 |
|
模型加载与执行 |
acl.mdl.unload |
卸载模型。 |
|
Context管理 |
acl.rt.destroy_context |
销毁Context。 |
|
Device管理 |
acl.rt.reset_device |
复位当前运算的Device,回收Device上的资源。 |
|
去初始化 |
acl.finalize |
实现ACL去初始化。 |
目录结构
目录结构如下所示。
resnet50_async_imagenet_classification ├──src │ ├── acl_net.py //运行文件。 │ └── constant.py //常量定义。 ├── data │ ├── dog1_1024_683.jpg //测试图片数据。 │ └── dog2_1024_683.jpg //测试图片数据。 ├── caffe_model │ ├── resnet50.caffemodel //ResNet-50模型。 │ └── resnet50.prototxt // ResNet-50模型的网络文件。 └── model └── resnet50.om //转换后的模型文件。