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

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

获取样例

单击vpc_jpeg_resnet50_imagenet_classification获取样例

功能描述

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

根据运行应用的入参,该样例可实现以下功能:

  • 将一张YUV420SP格式的图片编码为*.jpg格式的图片。
  • 将两张*.jpg格式的解码成两张YUV420SP NV12格式的图片,缩放,再进行模型推理,分别得到两张图片的推理结果后,处理推理结果,输出最大置信度的类别标识以及top5置信度的总和。
  • 将两张*.jpg格式的解码成两张YUV420SP NV12格式的图片,抠图,再进行模型推理,分别得到两张图片的推理结果后,处理推理结果,输出最大置信度的类别标识以及top5置信度的总和。
  • 将两张*.jpg格式的解码成两张YUV420SP NV12格式的图片,抠图贴图,再进行模型推理,分别得到两张图片的推理结果后,处理推理结果,输出最大置信度的类别标识以及top5置信度的总和。
  • 将YUV420SP NV12格式的图片(分辨率8192*8192)缩放,得到4000*4000。

该样例中用于推理的模型文件是*.om文件(适配昇腾AI处理器的离线模型),转换模型时,需配置色域转换参数,用于将YUV420SP格式的图片转换为RGB格式的图片,才能符合模型的输入要求。

原理介绍

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

初始化

  • 调用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

  • 图片编码

    调用acldvppJpegEncodeAsync接口将YUV420SP格式的图片编码为*.jpg格式的图片。

  • 图片解码

    调用acldvppJpegDecodeAsync接口将*.jpg图片解码成YUV420SP格式图片。

  • 缩放

    调用acldvppVpcResizeAsync接口对YUV420SP格式的输入图片进行缩放。

  • 抠图

    调用acldvppVpcCropResizeAsync接口按指定区域从输入图片中抠图,再将抠的图片存放到输出内存中,作为输出图片。

  • 抠图贴图

    调用acldvppVpcCropResizePasteAsync接口按指定区域从输入图片中抠图,再将抠的图片贴到目标图片的指定位置,作为输出图片。

模型推理

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

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

  • 调用aclmdlUnload接口卸载模型。

目录结构

样例代码结构如下所示。

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

├── data
│   ├── persian_cat_1024_1536_283.jpg            //测试数据,需要按指导获取测试图片,放到data目录下
│   ├── wood_rabbit_1024_1061_330.jpg            //测试数据,需要按指导获取测试图片,放到data目录下
│   ├── wood_rabbit_1024_1068_nv12.yuv            //测试数据,需要按指导获取测试图片,放到data目录下
│   ├── dvpp_vpc_8192x8192_nv12.yuv               //测试数据,需要按指导获取测试图片,放到data目录下

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

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

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

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

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

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

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

搜索结果
找到“0”个结果

当前产品无相关内容

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