下载
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助
昇腾小AI

基于ResNet-50网络实现图片分类(图片解码+缩放+同步推理)

获取样例

单击vpc_resnet50_imagenet_classification获取样例

功能描述

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

将Caffe ResNet-50网络的模型文件转换为适配昇腾AI处理器的离线模型(*.om文件),在样例中,加载该om文件,对2张*.jpg图片进行解码、缩放、推理,分别得到推理结果后,再对推理结果进行处理,输出最大置信度的类别标识。

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

图1 Sample示例

原理介绍

在该样例中,涉及的关键功能点,如下表所示。

初始化

  • 调用aclInit接口初始化AscendCL配置。
  • 调用aclFinalize接口实现AscendCL去初始化。

Device管理

  • 调用aclrtSetDevice接口指定用于运算的Device。
  • 调用aclrtGetRunMode接口获取软件栈的运行模式,根据运行模式的不同,内部处理流程不同。
  • 调用aclrtResetDevice接口复位当前运算的Device,回收Device上的资源。

Stream管理

  • 调用aclrtCreateStream接口创建Stream。
  • 调用aclrtDestroyStream接口销毁Stream。
  • 调用aclrtSynchronizeStream接口阻塞程序运行,直到指定Stream中的所有任务都完成。

内存管理

  • 调用aclrtMallocHost接口申请Host上内存。
  • 调用aclrtFreeHost释放Host上的内存。
  • 调用aclrtMalloc接口申请Device上的内存。
  • 调用aclrtFree接口释放Device上的内存。

执行媒体数据处理时,若需要申请Device上的内存存放输入或输出数据,需调用acldvppMalloc申请内存、调用acldvppFree接口释放内存。

数据传输

如果在Host上运行应用,则需调用aclrtMemcpy接口:

  • 将数据从Host传输到Device上,作为解码的输入数据。
  • 模型推理结束后,将推理结果从Device传输到Host。

如果在板端环境上运行应用,则无需进行数据传输。

媒体数据处理V1

  • 调用acldvppJpegDecodeAsync接口将*.jpg图片解码成YUV420SP格式图片。
  • 调用acldvppVpcResizeAsync接口将YUV420SP格式图片缩小成分辨率为224*224的图片。

模型推理

  • 调用aclmdlLoadFromFileWithMem接口从*.om文件加载模型。
  • 调用aclmdlExecute接口执行模型推理。

    推理前,通过*.om文件中的色域转换参数将YUV420SP格式的图片转换为RGB格式的图片。

  • 调用aclmdlUnload接口卸载模型。

数据后处理(单算子调用)

处理模型推理的结果,通过调用算子Cast将推理结果的数据类型从float32转成float16,再调用ArgMaxD算子从推理结果中查找最大置信度的类别标识。

通过aclopSetModelDir接口加载单算子模型文件,通过aclopCast接口执行Cast算子、通过aclopExecuteV2接口执行ArgMaxD算子。

目录结构

样例代码结构如下所示。

├── caffe_model
│   ├── aipp.cfg        //带色域转换参数的配置文件,模型转换时使用

├── data
│   ├── dog1_1024_683.jpg            //测试数据,需要按指导获取测试图片,放到data目录下
│   ├── dog2_1024_683.jpg            //测试数据,需要按指导获取测试图片,放到data目录下

├── inc
│   ├── dvpp_process.h               //声明媒体数据处理相关函数的头文件
│   ├── model_process.h              //声明模型处理相关函数的头文件
│   ├── sample_process.h               //声明资源初始化/销毁相关函数的头文件
│   ├── singleOp_process.h              //声明单算子执行相关函数的头文件                   
│   ├── utils.h                       //声明公共函数(例如:文件读取函数)的头文件

├── out
│   ├── op_models
│   ├──├──op_list.json              //Cast算子和ArgMaxD算子的算子描述信息

├── src
│   ├── acl.json         //系统初始化的配置文件
│   ├── CMakeLists.txt         //编译脚本
│   ├── dvpp_process.cpp       //媒体数据处理相关函数的实现文件
│   ├── main.cpp               //主函数,图片分类功能的实现文件
│   ├── model_process.cpp      //模型处理相关函数的实现文件
│   ├── sample_process.cpp     //资源初始化/销毁相关函数的实现文件
│   ├── singleOp_process.cpp   //单算子执行相关函数的实现文件                                          
│   ├── utils.cpp              //公共函数(例如:文件读取函数)的实现文件

├── .project     //工程信息文件,包含工程类型、工程描述、运行目标设备类型等
├── CMakeLists.txt    //编译脚本,调用src目录下的CMakeLists文件

编译及运行应用(Ascend EP

单击vpc_resnet50_imagenet_classification获取样例,查看该样例下的README。

编译及运行应用(Ascend RC形态)

单击vpc_resnet50_imagenet_classification获取样例,查看该样例下的README。

编译及运行应用(Control CPU开放形态)

  1. 模型转换。
    1. 以运行用户登录开发环境
    2. 参考ATC工具使用指南,准备环境,包括获取工具、设置环境变量。
    3. 准备数据。

      您可以从以下链接中获取ResNet-50网络的模型文件(*.prototxt)、权重文件(*.caffemodel),并以运行用户将获取的文件上传至开发环境“vpc_resnet50_imagenet_classification样例目录/caffe_model”目录下。如果目录不存在,需要自行创建。

      • ResNet-50网络的模型文件(*.prototxt):单击Link下载该文件。
      • ResNet-50网络的权重文件(*.caffemodel):单击Link下载该文件。
    4. 将ResNet-50网络转换为适配昇腾AI处理器的离线模型(*.om文件),转换模型时,需配置色域转换参数,用于将YUV420SP格式的图片转换为RGB格式的图片。

      切换到vpc_resnet50_imagenet_classification样例所在的目录,执行如下命令:

      atc --model=caffe_model/resnet50.prototxt --weight=caffe_model/resnet50.caffemodel --framework=0 --output=model/resnet50_aipp --soc_version=${soc_version} --insert_op_conf=caffe_model/aipp.cfg
      • --soc_version:昇腾AI处理器的版本,请根据实际情况替换。

        可从ATC安装路径的“atc/data/platform_config”目录下查看昇腾AI处理器的版本,对应“*.ini”文件的名字(不带.ini后缀)即为soc_version。

      • --output:生成的resnet50_aipp.om文件存放在“样例目录/model”目录下。建议使用命令中的默认设置,否则在编译代码前,您还需要修改sample_process.cpp中的omModelPath参数值。
        const char* omModelPath = "../model/resnet50_aipp.om";

      关于各参数的详细解释,请参见ATC工具使用指南

    5. 将Cast和ArgMaxD两个算子的算子描述信息(*.json文件)编译成适配昇腾AI处理器的离线模型(*.om文件),用于运行算子时使用。

      切换到vpc_resnet50_imagenet_classification样例所在的目录,执行如下命令:

      atc --singleop=out/op_models/op_list.json --soc_version=${soc_version} --output=out/op_models
      • --soc_version:昇腾AI处理器的版本,请根据实际情况替换。

        可从ATC安装路径的“atc/data/platform_config”目录下查看昇腾AI处理器的版本,对应“*.ini”文件的名字(不带.ini后缀)即为soc_version。

      • --output参数:生成的om文件必须放在“out/op_models”目录下。

      关于各参数的详细解释,请参见ATC工具使用指南

  2. 以运行用户登录开发环境,并切换到vpc_resnet50_imagenet_classification样例所在的目录。
  3. 准备输入图片。

    请从以下链接获取该样例的输入图片,并以运行用户将获取的文件上传至开发环境“vpc_resnet50_imagenet_classification样例目录/data”目录下。如果目录不存在,需自行创建。

    https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/aclsample/dog1_1024_683.jpg

    https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/aclsample/dog2_1024_683.jpg

  4. 运行应用。
    1. 以运行用户将开发环境的vpc_resnet50_imagenet_classification样例目录及目录下的文件上传到运行环境(Device),例如“$HOME/acl_dvpp_resnet50”。
    2. 以运行用户登录运行环境(Device)。
    3. 切换到可执行文件main所在的目录,例如“acl_dvpp_resnet50/out”,给该目录下的main文件加执行权限。
      chmod +x main
    4. 切换到可执行文件main所在的目录,例如“acl_dvpp_resnet50/out”,运行可执行文件。
      ./main

      执行成功后,在屏幕上显示最大置信度的类别标识,示例如下,类别编号161表示["basset", "basset hound"],类别编号267表示["standard poodle"]。

      [INFO] acl init success
      [INFO] open device 0 success
      [INFO] create context success
      [INFO] create stream success
      [INFO] dvpp init resource success
      [INFO] load model ../model/resnet50_aipp.om success
      [INFO] create model description success
      [INFO] create model output success
      [INFO] start to process picture:../data/dog1_1024_683.jpg
      [INFO] Process dvpp success
      [INFO] model execute success
      [INFO] execute singleOp Cast success
      [INFO] execute ArgMaxD success
      [INFO] singleOp process success
      [INFO] ---> index of classification result is 161
      [INFO] start to process picture:../data/dog2_1024_683.jpg
      [INFO] Process dvpp success
      [INFO] model execute success
      [INFO] execute singleOp Cast success
      [INFO] execute ArgMaxD success
      [INFO] singleOp process success
      [INFO] ---> index of classification result is 267 
      [INFO] Unload model success, modelId is 1
      [INFO] execute sample success
      [INFO] end to destroy stream 
      [INFO] end to destroy context
      [INFO] end to reset device is 0
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词