AscendCL样例工程使用指导

本节介绍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++)使用指导

  1. 用户可以创建应用工程,请参见新建应用工程创建ACL ResNet-50(C++)样例工程。
  2. 准备模型文件和数据。

    1. 获取模型文件。
      您可以从以下链接中获取ResNet-50网络的模型文件(*.prototxt)、权重文件(*.caffemodel),并以MindStudio安装用户将获取的文件上传至MindStudio安装服务器同一目录下。
      • ResNet-50网络的模型文件(*.prototxt):单击Link下载该文件。
      • ResNet-50网络的权重文件(*.caffemodel):单击Link下载该文件。
    2. 转换模型。

      在添加模型文件前,您需要先进行模型转换将第三方模型转换为适配昇腾AI处理器的离线模型(*.om文件)。模型转换功能介绍详情请参见模型转换

      1. 在MindStudio顶部菜单栏找到并单击Ascend > Model Converter,进入“Model Converter”功能。
      2. 填写模型转换信息,参考如下。
        • 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}/”)。
      3. 单击“Next”,本次样例在“Data Pre-Processing”功能不进行配置,继续单击“Next”进入下一步。
      4. “Advanced Options Preview”页面下,可通过“Command Preview”检查配置后生成的模型转换命令,确认后单击“Finish”,开始模型转换。
    3. 添加模型文件。
      请用户自行将模型om文件上传到工程文件根目录/model”文件夹下。添加模型文件后,可按如下目录在“Project”窗口查看模型文件。
      ├── 工程名
      │   ├── model          
      │   │   ├──resnet50.om           //模型文件。
    4. 准备推理数据,请通过以下链接获取该样例的输入图片,根据实际使用场景进行操作。
      图片获取链接:数据图片1数据图片2
      • Linux使用场景。
        1. 以运行用户将获取的文件上传至开发环境的工程目录/data”目录下。如果目录不存在,需自行创建。
        2. 以运行用户登录开发环境。
        3. 通过以下任意一种方式处理图片数据。
          1. 参见Python SDK依赖设置,配置Python解析器。在MindStudio的工程目录下找到“script/transferPic.py”选中并右键,在弹出的菜单中,选择Run‘transferPic’,在弹出的运行配置中编辑“Working directory”配置为工程目录/data”。配置完成,单击“OK”,再次右键单击“transferPic.py”选择Run‘transferPic’
          2. 切换到工程目录/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使用场景。
        1. 获取图片后,可以执行以下步骤转换图片格式,以图片存放在“C:\Users\user1\AscendProjects\MyApp1\data”路径为例。
        2. 打开系统命令提示符。
        3. 执行以下命令进入工程文件下“C:\Users\user1\AscendProjects\MyApp1\data”
          cd C:\Users\user1\AscendProjects\MyApp1\data
        4. 执行以下命令转换图片格式。
          python ..\script\transferPic.py

  3. 编译应用工程。

    MindStudio工程界面,顶部菜单栏中单击Build > Edit Build Configuration...,进入编译配置页面。
    1. 配置编译参数,单击添加新增配置。
      列表中带有“(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

      环境变量配置。

      可直接手动配置或单击符号,在弹出窗中配置管理。

    2. 单击OK保存编译工程。

  4. 开始编译。

    MindStudio工程界面,顶部菜单栏中单击Build > Build CMake Project

  5. 运行应用工程。

    MindStudio工程界面,顶部菜单栏中单击Run > Edit Configuration...,进入编译配置页面。

    单击右上角“+”,新建“CMake Application”运行配置项,参考以下步骤进行配置。
    1. 配置运行参数。
      图3为Linux使用场景配置示例。配置完成后,单击“OK”,关闭运行配置窗口。(由于样例工程中使用了相对路径,“Working Directory”请选择可执行文件“main”所在的目录。)
      图3 运行参数配置
    2. MindStudio工程界面,顶部菜单栏中单击“Run > Run...”。在弹出框中选择已创建好的运行配置信息,运行应用。

      运行结果示例如图4,index及其value会根据运行环境的实际情况有所不同:

      图4 运行结果
      如果运行过程中有错误提示,且需要查看运行环境的详细日志时,请参见日志参考
      • 可参见“日志文件介绍”查看日志,日志文件路径默认为“$HOME/ascend/log ”
      • 可参见“设置日志级别”查看或修改日志级别(默认为ERROR)。

ACL ResNet-50(Python)使用指导

  1. 请参见新建应用工程创建ACL ResNet-50(Python)样例工程。
  2. 准备模型文件和数据。

    1. 获取模型文件。
      您可以从以下链接中获取ResNet-50网络的模型文件(*.prototxt)、权重文件(*.caffemodel),并以MindStudio安装用户将获取的文件上传至MindStudio安装服务器同一目录下。
      • ResNet-50网络的模型文件(*.prototxt):单击Link下载该文件。
      • ResNet-50网络的权重文件(*.caffemodel):单击Link下载该文件。
    2. 转换模型。

      在添加模型文件前,您需要先进行模型转换将第三方模型转换为适配昇腾AI处理器的离线模型(*.om文件)。模型转换功能介绍详情请参见模型转换

      1. 在MindStudio顶部菜单栏找到并单击Ascend > Model Converter,进入“Model Converter”功能。
      2. 填写模型转换信息,参考如下。
        • 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}/”)。
      3. 单击“Next”,本次样例在“Data Pre-Processing”功能不进行配置,继续单击“Next”进入下一步。
      4. “Advanced Options Preview”页面下,可通过“Command Preview”检查配置后生成的模型转换命令,确认后单击“Finish”,开始模型转换。
    3. 添加模型文件。
      请用户自行将模型om文件上传到工程文件根目录/model”文件夹下。添加模型文件后,可按如下目录在“Project”窗口查看模型文件。
      ├── 工程名
      │   ├── model          
      │   │   ├──resnet50.om           //模型文件。
    4. 准备推理数据,请通过以下链接获取该样例的输入图片,根据实际使用场景进行操作。
      图片获取链接:数据图片1数据图片2
      • Linux使用场景。

        以运行用户将获取的文件上传至开发环境的工程目录/data”目录下。如果目录不存在,需自行创建。

      • Windows使用场景。

        获取图片后,将图片存放在本地路径工程目录/data”目录下(以“C:\Users\user1\AscendProjects\MyApp1\data”路径为例)。

  3. 运行应用工程(如需配置Python解析器,请参见Python SDK依赖设置)。

    MindStudio工程界面,顶部菜单栏中单击Run > Edit Configuration...,进入编译配置页面。
    1. 配置运行参数。
      图5为Linux使用场景配置示例,配置完成后,单击“Apply”保存运行配置,单击“OK”,关闭运行配置窗口。
      图5 运行参数配置
    2. MindStudio工程界面,顶部菜单栏中单击“Run > Run...”。在弹出框中选择已创建好的运行配置信息,运行应用。

      运行结果示例如图6“index”及其“value”会根据运行环境的实际情况有所不同:

      图6 运行结果
      如果运行过程中有错误提示,且需要查看运行环境的详细日志时,请参见日志参考
      • 可参见“日志文件介绍”查看日志,日志文件路径默认为“$HOME/ascend/log ”
      • 可参见“设置日志级别”查看或修改日志级别(默认为ERROR)。