本节介绍AscendCL样例工程ACL ResNet-50(C++)与ACL ResNet-50(Python)的使用,若需要更多样例,请查看https://gitee.com/ascend/samples。
功能描述
该样例主要是基于Caffe ResNet-50网络(单输入、单Batch)实现图片分类的功能。
将Caffe ResNet-50网络的模型文件转换为适配昇腾AI处理器的离线模型(*.om文件),在样例中,加载该om文件,对2张*.jpg图片进行同步推理,分别得到推理结果后,再对推理结果进行处理,输出top5置信度的类别标识。
图1 Sample示例
原理介绍
在该Sample中,涉及的关键功能点,如下表所示(以C++接口为例)。API接口的详细介绍请参见《应用软件开发指南(C&C++)》或《应用软件开发指南(Python)》。
初始化 |
- 调用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上的内存。
|
数据传输 |
如果在Host上运行应用,则需调用aclrtMemcpy接口:
- 将数据从Host传输到Device上,作为解码的输入数据。
- 模型推理结束后,将推理结果从Device传输到Host。
如果在Device上运行应用,则无需进行数据传输。
如果在开发者板上运行应用,则无需进行数据传输。 |
模型推理 |
- 调用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
processModel.DumpModelOutputResult();
processModel.OutputModelResult(); |
ACL ResNet-50(C++)使用指导
- 用户可以创建应用工程,请参见新建应用工程创建ACL ResNet-50(C++)样例工程。
- 准备模型文件和数据。
- 获取模型文件。
您可以从以下链接中获取ResNet-50网络的模型文件(*.prototxt)、权重文件(*.caffemodel),并以
MindStudio安装用户将获取的文件上传至
MindStudio安装服务器同一目录下。
- ResNet-50网络的模型文件(*.prototxt):单击Link下载该文件。
- ResNet-50网络的权重文件(*.caffemodel):单击Link下载该文件。
- 转换模型。
在添加模型文件前,您需要先进行模型转换将第三方模型转换为适配昇腾AI处理器的离线模型(*.om文件)。模型转换功能介绍详情请参见模型转换。
- 在MindStudio顶部菜单栏找到并单击,进入“Model Converter”功能。
- 填写模型转换信息,参考如下。
- Model File:选择已上传的ResNet-50网络的模型文件(*.prototxt)。
- Weight File:选择已上传的ResNet-50网络的权重文件(*.caffemodel)。
- Model Name:模型名称,本次步骤以“resnet50”为例。
- Target SoC Version:请以实际情况选择。
- OutputPath:选择转换后的(.om)模型输出目录(默认输出路径“$HOME/modelzoo/${Model Name}/${Target SoC Version}/”)。
- 单击“Next”,本次样例在“Data Pre-Processing”功能不进行配置,继续单击“Next”进入下一步。
- 在“Advanced Options Preview”页面下,可通过“Command Preview”检查配置后生成的模型转换命令,确认后单击“Finish”,开始模型转换。
- 添加模型文件。
请用户自行将模型om文件上传到
“工程文件根目录/model”文件夹下。添加模型文件后,可按如下目录在
“Project”窗口查看模型文件。
├── 工程名
│ ├── model
│ │ ├──resnet50.om //模型文件。
- 准备推理数据,请通过以下链接获取该样例的输入图片,根据实际使用场景进行操作。
图片获取链接:
数据图片1、
数据图片2。
- Linux使用场景。
- 以运行用户将获取的文件上传至开发环境的“工程目录/data”目录下。如果目录不存在,需自行创建。
- 以运行用户登录开发环境。
- 通过以下任意一种方式处理图片数据。
- 参见Python SDK依赖设置,配置Python解析器。在MindStudio的工程目录下找到“script/transferPic.py”选中并右键,在弹出的菜单中,选择,在弹出的运行配置中编辑“Working directory”配置为“工程目录/data”。配置完成,单击“OK”,再次右键单击“transferPic.py”选择。
- 切换到“工程目录/data”目录下,执行“transferPic.py”脚本。
python3 ../script/transferPic.py
将*.jpg转换为*.bin,同时将图片从1024 * 683的分辨率缩放为224 * 224。在“工程目录/data”目录下生成2个*.bin文件。
如果执行脚本出现以下报错,则表示缺少Pillow库,请使用pip3 install Pillow --user命令安装Pillow库。
ModuleNotFoundError: No module named 'PIL'
- Windows使用场景。
- 获取图片后,可以执行以下步骤转换图片格式,以图片存放在“C:\Users\user1\AscendProjects\MyApp1\data”路径为例。
- 打开系统命令提示符。
- 执行以下命令进入工程文件下“C:\Users\user1\AscendProjects\MyApp1\data”。
cd C:\Users\user1\AscendProjects\MyApp1\data
- 执行以下命令转换图片格式。
python ..\script\transferPic.py
- 编译应用工程。
在
MindStudio工程界面,顶部菜单栏中单击,进入编译配置页面。
- 配置编译参数,单击
添加新增配置。
列表中带有
“(default)”标记的配置项为当前默认配置项,如需进行变更,可选中所需配置项,并单击

进行切换。
图2 编译配置
表1 编译配置参数说明
参数配置 |
参数说明 |
Name |
编译配置的名称。 |
Build Type |
配置类型,可选:“Debug”或“Release”。 |
Toolchain |
工具链配置器,配置详情请参见Toolchains,支持本地和远程编译功能。 |
CMake options |
CMake选项,默认:“-DCMAKE_BUILD_TYPE=Debug -DCMAKE_SKIP_RPATH=TRUE”。 |
Build directory |
编译目录相对路径,该路径是相对于工程目录的路径。 |
Build options |
编译加速选项。 |
Environment Variables |
环境变量配置。
可直接手动配置或单击 符号,在弹出窗中配置管理。 |
- 单击“OK”保存编译工程。
- 开始编译。
在MindStudio工程界面,顶部菜单栏中单击。
- 运行应用工程。
在MindStudio工程界面,顶部菜单栏中单击,进入编译配置页面。
单击右上角“+”,新建“CMake Application”运行配置项,参考以下步骤进行配置。
- 配置运行参数。
图3为Linux使用场景配置示例。配置完成后,单击
“OK”,关闭运行配置窗口。(由于样例工程中使用了相对路径,
“Working Directory”请选择可执行文件
“main”所在的目录。)
图3 运行参数配置
- 在MindStudio工程界面,顶部菜单栏中单击“Run > Run...”。在弹出框中选择已创建好的运行配置信息,运行应用。
运行结果示例如图4,index及其value会根据运行环境的实际情况有所不同:
图4 运行结果
如果运行过程中有错误提示,且需要查看
运行环境的详细日志时,请参见
《日志参考》:
- 可参见“日志文件介绍”查看日志,日志文件路径默认为“$HOME/ascend/log ”。
- 可参见“设置日志级别”查看或修改日志级别(默认为ERROR)。
ACL ResNet-50(Python)使用指导
- 请参见新建应用工程创建ACL ResNet-50(Python)样例工程。
- 准备模型文件和数据。
- 获取模型文件。
您可以从以下链接中获取ResNet-50网络的模型文件(*.prototxt)、权重文件(*.caffemodel),并以
MindStudio安装用户将获取的文件上传至
MindStudio安装服务器同一目录下。
- ResNet-50网络的模型文件(*.prototxt):单击Link下载该文件。
- ResNet-50网络的权重文件(*.caffemodel):单击Link下载该文件。
- 转换模型。
在添加模型文件前,您需要先进行模型转换将第三方模型转换为适配昇腾AI处理器的离线模型(*.om文件)。模型转换功能介绍详情请参见模型转换。
- 在MindStudio顶部菜单栏找到并单击,进入“Model Converter”功能。
- 填写模型转换信息,参考如下。
- Model File:选择已上传的ResNet-50网络的模型文件(*.prototxt)。
- Weight File:选择已上传的ResNet-50网络的权重文件(*.caffemodel)。
- Model Name:模型名称,本次步骤以“resnet50”为例。
- Target SoC Version:请以实际情况选择。
- OutputPath:选择转换后的(.om)模型输出目录(默认输出路径“$HOME/modelzoo/${Model Name}/${Target SoC Version}/”)。
- 单击“Next”,本次样例在“Data Pre-Processing”功能不进行配置,继续单击“Next”进入下一步。
- 在“Advanced Options Preview”页面下,可通过“Command Preview”检查配置后生成的模型转换命令,确认后单击“Finish”,开始模型转换。
- 添加模型文件。
请用户自行将模型om文件上传到
“工程文件根目录/model”文件夹下。添加模型文件后,可按如下目录在
“Project”窗口查看模型文件。
├── 工程名
│ ├── model
│ │ ├──resnet50.om //模型文件。
- 准备推理数据,请通过以下链接获取该样例的输入图片,根据实际使用场景进行操作。
- 运行应用工程(如需配置Python解析器,请参见Python SDK依赖设置)。
在
MindStudio工程界面,顶部菜单栏中单击,进入编译配置页面。
- 配置运行参数。
图5为Linux使用场景配置示例,配置完成后,单击
“Apply”保存运行配置,单击
“OK”,关闭运行配置窗口。
图5 运行参数配置
- 在MindStudio工程界面,顶部菜单栏中单击“Run > Run...”。在弹出框中选择已创建好的运行配置信息,运行应用。
运行结果示例如图6,“index”及其“value”会根据运行环境的实际情况有所不同:
图6 运行结果
如果运行过程中有错误提示,且需要查看
运行环境的详细日志时,请参见
《日志参考》:
- 可参见“日志文件介绍”查看日志,日志文件路径默认为“$HOME/ascend/log ”。
- 可参见“设置日志级别”查看或修改日志级别(默认为ERROR)。