【2023·CANN训练营第一季】ResNet50图片分类应用——运行调试
运行应用
请注意,下文中的样例目录均指“
cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification
”目录。
export APP_HOME=$HOME/samples/cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification
# 样例目录
-
开发环境和运行环境分离
即开发环境和运行环境不在同一台服务器上时
-
上传文件
以运行用户将开发环境的样例目录及目录下的文件上传到运行环境
scp -r $APP_HOME 用户@运行环境IP:/目录
-
登陆运行环境
以运行用户登录运行环境
-
添加权限
切换到可执行文件main所在的目录,给该目录下的main文件加执行权限。
-
运行程序
切换到可执行文件main所在的目录,运行可执行文件。
-
-
开发环境和运行环境合设
-
运行程序
切换到可执行文件main所在的目录,运行可执行文件。
-
执行成功后,在屏幕上的关键提示信息示例如下,提示信息中的index表示类别标识、value表示该分类的最大置信度,这些值可能会根据版本、环境有所不同,请以实际情况为准:
说明: 类别标签和类别的对应关系与训练模型时使用的数据集有关,本样例使用的模型是基于imagenet数据集进行训练的,您可以在互联网上查阅imagenet数据集的标签及类别的对应关系,可单击imagenet数据集类别标签和对应的英文中文对照表查看。 当前屏显信息中的类别标识与类别的对应关系如下:
"161": ["basset", "basset hound"], "267": ["standard poodle"]
关键接口介绍
在该Sample中,涉及的关键功能点及其关键接口,如下所示:
-
初始化
- 调用aclInit接口初始化AscendCL配置。
- 调用aclFinalize接口实现AscendCL去初始化。
-
Device管理
- 调用aclrtSetDevice接口指定用于运算的Device。
- 调用aclrtGetRunMode接口获取昇腾AI软件栈的运行模式,根据运行模式的不同,内部处理流程不同。
- 调用aclrtResetDevice接口复位当前运算的Device,回收Device上的资源。
-
Context管理
- 调用aclrtCreateContext接口创建Context。
- 调用aclrtDestroyContext接口销毁Context。
-
Stream管理
- 调用aclrtCreateStream接口创建Stream。
- 调用aclrtDestroyStream接口销毁Stream。
-
内存管理
- 调用aclrtMalloc接口申请Device上的内存。
- 调用aclrtFree接口释放Device上的内存。
-
数据传输
调用aclrtMemcpy接口通过内存复制的方式实现数据传输。
-
模型推理
- 调用aclmdlLoadFromFileWithMem接口从*.om文件加载模型。
- 调用aclmdlExecute接口执行模型推理,同步接口。
- 调用aclmdlUnload接口卸载模型。
-
数据后处理
提供样例代码,处理模型推理的结果,直接在终端上显示top5置信度的类别编号。
另外,样例中提供了自定义接口DumpModelOutputResult,用于将模型推理的结果写入文件(运行可执行文件后,推理结果文件在运行环境上的应用可执行文件的同级目录下),默认未调用该接口,用户可在sample_process.cpp中,在调用OutputModelResult接口前,增加如下代码调用DumpModelOutputResult接口:
// print the top 5 confidence values with indexes.use function DumpModelOutputResult // if want to dump output result to file in the current directory modelProcess.DumpModelOutputResult(); modelProcess.OutputModelResult();