【CANN训练营】体验基于Caffe ResNet-50网络实现图片分类实践操作

实例功能

很简单的一个实例,功能就是一个实现图片分类的功能,然后拓展实现以下

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

环境及环境版本介绍

NPU:Ascend910(32GB)

CANN版本:CANN-8.0.RC3.alpha001

开始实践

创建conda环境

bash 复制代码
conda create -n cann_demo python=3.8 -y
conda activate cann_demo

安装CANN

bash 复制代码
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/Milan-ASL/Milan-ASL%20V100R001C20SPC703/Ascend-cann-toolkit_8.0.0.alpha003_linux-aarch64.run
bash Ascend-cann-toolkit_8.0.0.alpha003_linux-aarch64.run --full

激活环境变量

bash 复制代码
source /home/ma-user/Ascend/ascend-toolkit/set_env.sh

下载体验代码仓

bash 复制代码
git clone -b v0.3-8.0.0.alpha003 https://gitee.com/Ascend/samples

进入示例文件夹

bash 复制代码
cd samples/cplusplus/level2_simple_inference/1_classification/vpc_jpeg_resnet50_imagenet_classification

获取ResNet-50原始模型

下载模型CAFFE文件

bash 复制代码
cd caffe_model
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/resnet50/resnet50.caffemodel
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/resnet50/resnet50.prototxt
cd ..

安装依赖

bash 复制代码
pip install decorator attrs psutil sympy scipy 

转换模型

bash 复制代码
atc --model=caffe_model/resnet50.prototxt --weight=caffe_model/resnet50.caffemodel --framework=0 --soc_version=Ascend910 --insert_op_conf=caffe_model/aipp.cfg --output=model/resnet50_aipp 

准备测试图片

bash 复制代码
cd data
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/aclsample/dvpp_vpc_8192x8192_nv12.yuv
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/aclsample/persian_cat_1024_1536_283.jpg
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/aclsample/wood_rabbit_1024_1061_330.jpg
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/aclsample/wood_rabbit_1024_1068_nv12.yuv
cd ..

编译运行

安装依赖

bash 复制代码
conda install -c conda-forge cmake
conda install -c conda-forge binutils

创建目录

bash 复制代码
mkdir -p build/intermediates/host

设置环境变量

bash 复制代码
source /home/ma-user/Ascend/ascend-toolkit/set_env.sh
export DDK_PATH=$HOME/Ascend/ascend-toolkit/latest
export NPU_HOST_LIB=$DDK_PATH/runtime/lib64/stub

生成编译文件

bash 复制代码
cd build/intermediates/host
cmake ../../../src -DCMAKE_CXX_COMPILER=g++ -DCMAKE_SKIP_RPATH=TRUE
make

运行

设置main文件权限为可运行

bahs 复制代码
cd ../../../out
chmod +x main

将两张*.jpg格式的解码成两张YUV420SP NV12格式的图片,缩放,再进行模型推理,分别得到两张图片的推理结果

bash 复制代码
./main 0

运行结果

复制代码
[INFO]  ./main param, param represents a vpc feature and must be set
[INFO]  start check result fold:./result
[INFO]  make directory successfully.
[INFO]  check result success, fold exist
[INFO]  acl init success
[INFO]  set device 0 success
[INFO]  create context success
[INFO]  create stream success
[INFO]  get run mode 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]  model input width 224, input height 224
[INFO]  -------------------------------------------
[INFO]  start to process picture:../data/persian_cat_1024_1536_283.jpg
[INFO]  call JpegD
[INFO]  call vpcResize
[INFO]  Process dvpp success
[INFO]  create model input success
[INFO]  model execute success
[INFO]  destroy model input success
[INFO]  result : classType[283], top1[0.969727], top5[0.979855]
[INFO]  -------------------------------------------
[INFO]  start to process picture:../data/wood_rabbit_1024_1061_330.jpg
[INFO]  call JpegD
[INFO]  call vpcResize
[INFO]  Process dvpp success
[INFO]  create model input success
[INFO]  model execute success
[INFO]  destroy model input success
[INFO]  result : classType[331], top1[0.895508], top5[1.000134]
[INFO]  -------------------------------------------
[INFO]  unload model success, modelId is 1
[INFO]  destroy model description success
[INFO]  destroy model output success
[INFO]  execute sample success
[INFO]  end to destroy stream
[INFO]  end to destroy context
[INFO]  end to reset device 0
[INFO]  end to finalize acl

将两张*.jpg格式的解码成两张YUV420SP NV12格式的图片,抠图,再进行模型推理,分别得到两张图片的推理结果。

bash 复制代码
./main 1

运行结果

复制代码
[INFO]  ./main param, param represents a vpc feature and must be set
[INFO]  start check result fold:./result
[INFO]  check result success, fold exist
[INFO]  acl init success
[INFO]  set device 0 success
[INFO]  create context success
[INFO]  create stream success
[INFO]  get run mode 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]  model input width 224, input height 224
[INFO]  -------------------------------------------
[INFO]  start to process picture:../data/persian_cat_1024_1536_283.jpg
[INFO]  call JpegD
[INFO]  call vpcCrop
[INFO]  Process dvpp success
[INFO]  create model input success
[INFO]  model execute success
[INFO]  destroy model input success
[INFO]  result : classType[283], top1[0.996094], top5[0.999629]
[INFO]  -------------------------------------------
[INFO]  start to process picture:../data/wood_rabbit_1024_1061_330.jpg
[INFO]  call JpegD
[INFO]  call vpcCrop
[INFO]  Process dvpp success
[INFO]  create model input success
[INFO]  model execute success
[INFO]  destroy model input success
[INFO]  result : classType[330], top1[0.859863], top5[1.000106]
[INFO]  -------------------------------------------
[INFO]  unload model success, modelId is 1
[INFO]  destroy model description success
[INFO]  destroy model output success
[INFO]  execute sample success
[INFO]  end to destroy stream
[INFO]  end to destroy context
[INFO]  end to reset device 0
[INFO]  end to finalize acl

将两张*.jpg格式的解码成两张YUV420SP NV12格式的图片,抠图贴图,再进行模型推理,分别得到两张图片的推理结果。

bash 复制代码
./main 2

运行结果

复制代码
[INFO]  ./main param, param represents a vpc feature and must be set
[INFO]  start check result fold:./result
[INFO]  check result success, fold exist
[INFO]  acl init success
[INFO]  set device 0 success
[INFO]  create context success
[INFO]  create stream success
[INFO]  get run mode 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]  model input width 224, input height 224
[INFO]  -------------------------------------------
[INFO]  start to process picture:../data/persian_cat_1024_1536_283.jpg
[INFO]  call JpegD
[INFO]  call vpcCropAndPaste
[INFO]  Process dvpp success
[INFO]  create model input success
[INFO]  model execute success
[INFO]  destroy model input success
[INFO]  result : classType[283], top1[0.431885], top5[0.751892]
[INFO]  -------------------------------------------
[INFO]  start to process picture:../data/wood_rabbit_1024_1061_330.jpg
[INFO]  call JpegD
[INFO]  call vpcCropAndPaste
[INFO]  Process dvpp success
[INFO]  create model input success
[INFO]  model execute success
[INFO]  destroy model input success
[INFO]  result : classType[330], top1[0.685059], top5[0.969410]
[INFO]  -------------------------------------------
[INFO]  unload model success, modelId is 1
[INFO]  destroy model description success
[INFO]  destroy model output success
[INFO]  execute sample success
[INFO]  end to destroy stream
[INFO]  end to destroy context
[INFO]  end to reset device 0
[INFO]  end to finalize acl

将一张YUV420SP格式的图片编码为*.jpg格式的图片。

bash 复制代码
./main 3

运行结果

复制代码
[INFO]  ./main param, param represents a vpc feature and must be set
[INFO]  start check result fold:./result
[INFO]  check result success, fold exist
[INFO]  acl init success
[INFO]  set device 0 success
[INFO]  create context success
[INFO]  create stream success
[INFO]  get run mode success
[INFO]  dvpp init resource success
[INFO]  start to jpege picture ../data/wood_rabbit_1024_1068_nv12.yuv
[INFO]  end to destroy stream
[INFO]  end to destroy context
[INFO]  end to reset device 0
[INFO]  end to finalize acl

将一张分辨率为8192*8192的YUV420SP格式的图片缩放至4000*4000。

bash 复制代码
./main 4

运行结果

复制代码
[INFO]  ./main param, param represents a vpc feature and must be set
[INFO]  start check result fold:./result
[INFO]  check result success, fold exist
[INFO]  acl init success
[INFO]  set device 0 success
[INFO]  create context success
[INFO]  create stream success
[INFO]  get run mode success
[INFO]  dvpp process 8k resize begin
[INFO]  dvpp init resource success
[INFO]  dvpp process 8k resize success
[INFO]  end to destroy stream
[INFO]  end to destroy context
[INFO]  end to reset device 0
[INFO]  end to finalize acl

整体运行结果

执行可执行文件成功后,同时会在main文件同级的result目录下生成结果文件,便于后期查看。结果文件如下:

  • dvpp_output_0:persian_cat_1024_1536_283.jpg:图片经过缩放或抠图或抠图贴图之后的结果图片。
  • dvpp_output_1:wood_rabbit_1024_1061_330.jpg:图片经过缩放或抠图或抠图贴图之后的结果图片。
  • model_output_0:persian_cat_1024_1536_283.jpg:图片的模型推理结果,二进制文件。
  • model_output_0.txt:persian_cat_1024_1536_283.jpg:图片的模型推理结果,txt文件。
  • model_output_1:wood_rabbit_1024_1061_330.jpg:图片的模型推理结果,二进制文件。
  • model_output_1.txt:wood_rabbit_1024_1061_330.jpg:图片的模型推理结果,txt文件。
  • jpege_output_0.jpg:wood_rabbit_1024_1068_nv12.yuv:图片结果编码后的结果图片。
  • dvpp_vpc_4000x4000_nv12.yuv:dvpp_vpc_8192x8192_nv12.yuv:图片缩放后的结果图片。
相关推荐
码客前端1 分钟前
理解 Flex 布局中的 flex:1 与 min-width: 0 问题
前端·css·css3
Komorebi゛2 分钟前
【CSS】圆锥渐变流光效果边框样式实现
前端·css
工藤学编程14 分钟前
零基础学AI大模型之CoT思维链和ReAct推理行动
前端·人工智能·react.js
徐同保14 分钟前
上传文件,在前端用 pdf.js 提取 上传的pdf文件中的图片
前端·javascript·pdf
怕浪猫15 分钟前
React从入门到出门第四章 组件通讯与全局状态管理
前端·javascript·react.js
欧阳天风23 分钟前
用setTimeout代替setInterval
开发语言·前端·javascript
EndingCoder27 分钟前
箭头函数和 this 绑定
linux·前端·javascript·typescript
郑州光合科技余经理27 分钟前
架构解析:同城本地生活服务o2o平台海外版
大数据·开发语言·前端·人工智能·架构·php·生活
沐墨染29 分钟前
大型数据分析组件前端实践:多维度检索与实时交互设计
前端·elementui·数据挖掘·数据分析·vue·交互
xkxnq33 分钟前
第一阶段:Vue 基础入门(第 11 天)
前端·javascript·vue.js