【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:图片缩放后的结果图片。
相关推荐
崔庆才丨静觅6 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60616 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了7 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅7 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅7 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅7 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment7 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅8 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊8 小时前
jwt介绍
前端
Liue612312318 小时前
YOLO11-C3k2-MBRConv3改进提升金属表面缺陷检测与分类性能_焊接裂纹气孔飞溅物焊接线识别
人工智能·分类·数据挖掘