【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:图片缩放后的结果图片。
相关推荐
kyriewen28 分钟前
我把今年流传的前端 AI 面试题整理了一遍——4 类场景题+回答框架(附速查表)
前端·面试·程序员
计算机魔术师1 小时前
国产多模态模型正面硬刚Opus旗舰:差距从30%缩到3%
前端
风骏时光牛马1 小时前
程序员进阶:深度思考,解锁职场成长的底层逻辑
前端
IT_陈寒1 小时前
用了Proxy才发现以前的JavaScript白写了
前端·人工智能·后端
爱丶不疚2 小时前
Eval: Agent 说的 Eval 是什么?从单测、TDD 到 Sentry 聊起
前端·ai编程·vibecoding
求道於盲2 小时前
python中的类型标注
前端
计算机魔术师2 小时前
从硅谷测试到全球铺开,ChatGPT广告的10亿美元秘密
前端
专业抄代码选手3 小时前
08|Fiber 上的 `useState`:状态终于属于具体组件
前端·javascript·react.js
默_笙3 小时前
😭 Vibe Coding 翻车实录:AI 编程为什么必须先写"剧本"
前端·javascript
LEE3 小时前
原来 Claude Code 最厉害的工具,一行代码都不写
前端·后端