样例介绍
获取样例
单击Gitee,进入Ascend samples开源仓,详细参见README中的“版本说明”下载配套版本的sample包,从“python/level2_simple_inference/1_classification/vpc_resnet50_imagenet_classification”目录下获取vpc_resnet50_imagenet_classification样例。
功能描述
该样例主要是基于Caffe ResNet-50网络(单输入、单batch)实现图片分类的功能。
将Caffe ResNet-50网络的模型文件转换为适配昇腾AI处理器的离线模型(*.om文件),在样例中,加载该om文件,对2张*.jpg图片进行解码、缩放、推理,分别得到推理结果后,再对推理结果进行处理,输出最大置信度的类别标识。
转换模型时,需配置色域转换参数,用于将YUV420SP格式的图片转换为RGB格式的图片,才能符合模型的输入要求。
主要接口
主要接口如表1所示。
功能  | 
        对应ACL模块  | 
        ACL 接口函数  | 
        功能说明  | 
       
|---|---|---|---|
资源初始化  | 
        初始化  | 
        acl.init  | 
        初始化ACL配置。  | 
       
Device管理  | 
        acl.rt.set_device  | 
        指定用于运算的Device。  | 
       |
Context管理  | 
        acl.rt.create_context  | 
        创建Context。  | 
       |
Stream管理  | 
        acl.rt.create_stream  | 
        创建Stream。  | 
       |
算子加载与执行  | 
        acl.op.set_model_dir  | 
        加载模型文件的目录。  | 
       |
模型初始化  | 
        模型加载与执行  | 
        acl.mdl.load_from_file  | 
        从*.om文件加载模型到device侧。  | 
       
数据类型及操作接口  | 
        acl.mdl.create_desc  | 
        创建模型描述数据类型。  | 
       |
数据类型及操作接口  | 
        acl.mdl.get_desc  | 
        获取模型描述数据类型。  | 
       |
数据预处理  | 
        媒体数据模块  | 
        acl.media.dvpp_jpeg_decode_async  | 
        图形解码接口。  | 
       
数据类型及操作接口  | 
        acl.media.dvpp_vpc_resize_async  | 
        将输入图片缩放到输出图片大小。  | 
       |
数据类型及操作接口  | 
        acl.media.dvpp_set_pic_desc系列接口  | 
        设置图片描述相关参数。  | 
       |
模型推理  | 
        模型加载与执行  | 
        acl.mdl.execute  | 
        执行模型同步推理。  | 
       
数据后处理  | 
        数据类型及操作接口  | 
        acl.op.create_attr  | 
        创建aclopAttr类型的数据。  | 
       
数据类型及操作接口  | 
        acl.create_tensor_desc  | 
        创建aclTensorDesc类型的数。  | 
       |
数据类型及操作接口  | 
        acl.get_tensor_desc_size  | 
        获取tensor描述占用的空间大小。  | 
       |
数据类型及操作接口  | 
        acl.create_data_buffer  | 
        创建aclDataBuffer类型的数据。  | 
       |
数据交互  | 
        内存管理  | 
        acl.rt.memcpy  | 
        数据传输,Host->Device或Device->Host。  | 
       
内存管理  | 
        acl.media.dvpp_malloc  | 
        分配内存给Device侧媒体数据处理时使用。  | 
       |
内存管理  | 
        acl.rt.malloc  | 
        申请Device上的内存。  | 
       |
内存管理  | 
        acl.rt.malloc_host  | 
        申请Host上的内存。  | 
       |
单算子推理  | 
        算子加载与执行  | 
        acl.op.execute  | 
        异步加载并执行指定的算子。  | 
       
公共模块  | 
        --  | 
        acl.util.ptr_to_numpy  | 
        指针转numpy类型数据。  | 
       
--  | 
        acl.util.numpy_to_ptr  | 
        numpy类型数据转指针。  | 
       |
资源释放  | 
        内存管理  | 
        acl.rt.free  | 
        释放Device上的内存。  | 
       
内存管理  | 
        acl.media.dvpp_free  | 
        通过acl.media.dvpp_malloc接口申请的内存。  | 
       |
内存管理  | 
        acl.rt.free_host  | 
        释放Host上的内存。  | 
       |
模型加载与执行  | 
        acl.mdl.unload  | 
        卸载模型。  | 
       |
Stream管理  | 
        acl.rt.destroy_stream  | 
        销毁Stream。  | 
       |
Context管理  | 
        acl.rt.destroy_context  | 
        销毁Context。  | 
       |
Device管理  | 
        acl.rt.reset_device  | 
        复位当前运算的Device,回收Device上的资源。  | 
       |
初始化  | 
        acl.finalize  | 
        实现ACL去初始化。  | 
       
图片解码缩放流程图
图片解码缩放流程图如图1所示。
目录结构
目录结构如下所示。
vpc_resnet50_imagenet_classification ├──src │ ├── acl_dvpp.py //图片缩放实现文件 │ ├── acl_model.py //模型推理实现文件 │ ├── acl_op.py //单算子精度转换实现文件 │ ├── acl_sample.py //运行文件 │ ├── acl_util.py //工具类函数实现文件 │ └── constant.py //常量定义 ├── data //测试数据 │ ├── dog1_1024_683.jpg │ └── dog2_1024_683.jpg ├── caffe_model │ ├── aipp.cfg │ ├── resnet50.caffemodel //resnet50模型 │ └── resnet50.prototxt // resnet50模型的网络文件 ├── op_models │ ├── 0_Cast_0_2_1000_1_2_1000.om //精度转换自定义算子 │ ├── 1_ArgMaxD_1_2_1000_3_2_1.om //精度转换自定义算子 │ └── op_list.json //精度转换算子配置文件 └── model └── resnet50_aipp.om //推理模型
