---
title: 样例介绍
description: "单击Gitee(https://gitee.com/ascend/samples/)，进入Ascend samples开源仓，详细参见README中的“版本说明”下载配套版本的sample包，从“python/level2_simple_inference/1_classification/vdec_resnet50_classification”目录下获取vdec_resnet50_classification样例。"
url: https://www.hiascend.com/document/detail/zh/Atlas200IDKA2DeveloperKit/latest/Application%20Development%20Guide/aadgp/aclpythondevg_02_0017.html
sourcePath: /source/zh/Atlas200IDKA2DeveloperKit/23.0.RC2/Application Development Guide/aadgp/aclpythondevg_02_0017.html
indexId: 2762fc2fbf114de9e08d44b72baec39a0a1b570f792895c9ad847f82f1a14e5a108
---
# 样例介绍

#### 获取样例

单击Gitee(https://gitee.com/ascend/samples/)，进入Ascend samples开源仓，详细参见README中的“版本说明”下载配套版本的sample包，从“python/level2_simple_inference/1_classification/vdec_resnet50_classification”目录下获取vdec_resnet50_classification样例。


#### 功能描述

该样例主要是基于Caffe ResNet-50网络（单输入、单batch）实现图片分类的功能。

将Caffe ResNet-50网络的模型文件转换为适配昇腾AI处理器的离线模型（*.om文件）。该样例中加载该om文件，将1个h265格式（*.h265）的视频码流（仅包含一帧）循环10次解码出10张YUV420SP NV12格式的图片，对该10张图片做缩放，并对缩放的图片进行推理，分别得到推理结果后，再对推理结果进行处理，输出最大置信度的类别标识以及top5置信度的总和。

转换模型时，需配置色域转换参数，用于将YUV420SP格式的图片转换为RGB格式的图片，才能符合模型的输入要求。


#### 主要接口

主要接口如表1所示。


**表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.mdl.load\_from\_file | 从\*.om文件加载模型到device侧。 |
| 模型初始化 | 数据类型及操作接口 | acl.mdl.create\_desc | 创建模型描述数据类型。 |
| 模型初始化 | 数据类型及操作接口 | acl.mdl.get\_desc | 获取模型描述数据类型。 |
| 数据预处理 | 媒体数据模块 | acl.media.vdec\_send\_frame | 视频解码接口。 |
| 数据预处理 | 数据类型及操作接口 | acl.media.vdec\_set\_channel\_desc系列接口 | 设置视频处理通道描述信息。 |
| 数据预处理 | 数据类型及操作接口 | 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.maclloc | 申请Device上的内存。 |
| 数据交互 | 内存管理 | acl.rt.malloc\_host | 申请Host上的内存。 |
| 单算子推理 | 算子加载与执行 | acl.op.execute | 异步加载并执行指定的算子。 |
| 公共模块 | \-\- | acl.util.ptr\_to\_numpy | 通过指针地址获取numpy.ndarray对象。 |
| 公共模块 | \-\- | acl.util.numpy\_to\_ptr | 获取numpy.ndarray对象的内存数据的指针地址。 |
| 资源释放 | 内存管理 | 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所示。


图1 视频解码及模型推理流程图


#### 目录结构

目录结构如下所示。


```
vdec_resnet50_classification
├──src
│ ├── acl_dvpp.py //图片缩放实现文件。
│ ├── acl_model.py //模型推理实现文件。
│ ├── acl_sample.py //运行文件。
│ ├── acl_util.py //工具类函数实现文件。
│ ├── acl_vdec.py //视频解码实现文件。
│ └── constant.py //常量定义。
├── data
│ └── vdec_h265_1frame_rabbit_1280x720.h265 //用户待处理的视频文件，由用户自行获取。
├── caffe_model
│ ├── aipp.cfg
│ ├── resnet50.caffemodel //ResNet-50模型。
│ └── resnet50.prototxt // ResNet-50模型的网络文件。
└── model
└── resnet50_aipp.om //推理模型。
```
