摘要:本实验主要是以基于Caffe ResNet-50网络实现图片分类(仅推理)为例,学习如何在已经具备预训练模型的情况下,将该模型部署到昇腾AI处理器上进行推理。

本文分享自华为云社区《【CANN训练营】【2022第二季】【新手班】基于Caffe ResNet-50网络实现图片分类(仅推理)的实验复现》,作者: StarTrek 。

本实验主要是以基于Caffe ResNet-50网络实现图片分类(仅推理)为例,学习如何在已经具备预训练模型的情况下,将该模型部署到昇腾AI处理器上进行推理。该实验的主要任务有:

1、将Caffe ResNet-50网络的模型文件转换为适配昇腾AI处理器的离线模型( * .om文件);
2、加载该om文件,对2张 * .jpg图片进行同步推理,分别得到推理结果后,再对推理结果进行处理,输出top5置信度的类别标识;
3、将测试的图片替换为自己的图片并重新编译运行。

一、云服务器的使用

首先为了更好的让我们能够了解并学习昇腾的相关知识,华为CANN训练营为每一位学员都给予了一定的云服务器资源,关于云服务器的使用简单总结如下:

本次提供的共享镜像是:Ubuntu 18.04(系统) + 5.1.RC2.alpha005(CANN环境版本)

登陆华为云->进入控制台->申请ESC弹性云服务器->获取弹性公网IP->运用SSH远程访问云服务器->正常按照ubuntu系统的终端命令来操作使用服务器

资源链接:

远程终端软件推荐MobaXterm:https://mobaxterm.mobatek.net/
软件使用方法:MobaXterm详细使用教程_xuanying_china的博客-CSDN博客_mobaxterm

进入终端后为root用户,需要进入HwHiAiUser用户

指令:

 cd /home/su - HwHiAiUser

可以使用ls或者ll指令随意浏览系统中已有的文件情况。

二、基于Caffe ResNet-50网络实现图片分类(仅推理)实验

准备工作完成之后,下面就可以开始正式的实验之旅啦!可以按照仓库里的readme文件所述步骤一步步操作,此处也仅仅只是简单的给出实验的步骤和实验图。

仓库资源链接:samples: CANN Samples - Gitee.com

1、下载样例代码

克隆sample仓里的代码

 git clone https://gitee.com/ascend/samples.git

进入到resnet50_imagenet_classification样例的文件夹中

 cd samples/cd cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification

2、获取ResNet-50预训练模型

先创建一个用来存储该模型的文件夹,并打开该文件夹

 mkdir caffe_modelcd caffe_model

从网页直接通过命令下载预训练模型:权重文件(resnet50.caffemodel)和模型文件(resnet50.prototxt)

 wegt https://modelzoo-train-atc.obs.cn-north-4.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/resnet50/resnet50.prototxtwegt https://modelzoo-train-atc.obs.cn-north-4.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/resnet50/resnet50.caffemodel

3、模型转换

上述下载的预训练模型需要首先运用ATC模型转换工具将该模型转换成昇腾AI处理器支持的离线模型(.om)
官方文档ATC工具学习资源:昇腾社区-官网丨昇腾万里 让智能无所不及

流程:

首先先切换到样例目录下(接着上面的操作就是上一级目录)

 cd ../

然后运行模型转换工具

 atc --model=caffe_model/resnet50.prototxt --weight=caffe_model/resnet50.caffemodel --framework=0 --output=model/resnet50 --soc_version=Ascend310 --input_format=NCHW --input_fp16_nodes=data --output_type=FP32 --out_nodes=prob:0

打开model文件夹可以看到resnet50.om已经转换完成了

4、下载测试图片

进入data文件夹,并下载两张ImageNet数据集中存在类别的图片

 cd ../data/wget https://c7xcode.obs.cn-north-4.myhuaweicloud.com/models/aclsample/dog1_1024_683.jpgwget https://c7xcode.obs.cn-north-4.myhuaweicloud.com/models/aclsample/dog2_1024_683.jpg

测试的两张图

5、图片格式转换

下载的图片是JPEG格式的,需要转换成适合模型输入要求格式的二进制文件(.bin)
在data目录下,执行transferPic.py脚本,将*.jpg转换为*.bin,同时将图片从1024 * 683的分辨率缩放为224 * 224。

 python3 ../script/transferPic.py

6、编译运行

进入“cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification”样例目录

 cd ../

设置临时的环境变量,配置程序编译依赖的头文件与库文件路径

 export DDK_PATH=$HOME/Ascend/ascend-toolkit/latestexport NPU_HOST_LIB=$DDK_PATH/acllib/lib64/stub

建立build文件夹,准备编译代码文件

 mkdir -p build/intermediates/host

进入build文件夹,编译.cpp文件

 cd build/intermediates/hostcmake ../../../src -DCMAKE_CXX_COMPILER=g++ -DCMAKE_SKIP_RPATH=TRUEmake

可以在样例目录(cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification)下的out文件夹中找到编译好的可执行main文件,接下来我们直接运行main文件

 cd ../../../out/./main

三、替换图片数据进行测试

这里在网上随便找了两张图(一张金鱼label-1,一张金毛犬label-207),可以随意找几张图,只要是JPG格式的图片即可,图片中的事物类型最好是ImageNet数据集标签中的类型。

1、添加图片并转换格式

可以直接下载到本地电脑中,然后直接将文件拖到MobaXterm软件的云服务器文件列表中,为了方便直接先在列表中找到前面的data文件夹,然后直接拖拽到该文件夹下即可。

按照前面的操作(5、图片格式转换)重新进行图片文件格式的转换,在data目录下运行

 python3 ../script/transferPic.py

2、修改sample_process.cpp源码,添加新增的两张图片的路径

在testFile列表中增加前面新添加的并转换好的那两张bin格式的文件路径,路径仿照前两个写即可,不过别忘记不同文件路径间的逗号分隔哦

3、重新编译源码

按照前面的步骤进行即可(6、编译运行),需要注意的是,如果重启过服务器,之前设置的编译临时环境会丢失,需要再次设置临时的环境变量(配置程序编译依赖的头文件与库文件路径),然后可以在build/intermediates/host文件下直接运行make编译即可,编译器会自动编译修改过的源文件并覆盖。

4、推理

按照前面的步骤重新运行编译好的main文件即可(6、编译运行中的最后一步),注意文件的路径,需要在out文件夹下运行,因为main文件是被保存在这里的。

最后我们可以看到

标签为1是金鱼,第一张图是金鱼的概率为99.7070%
标签为207是金毛犬,第二张图是金毛犬的概率为99.5605%

点击关注,第一时间了解华为云新鲜技术~

基于Caffe ResNet-50网络实现图片分类(仅推理)的实验复现相关推荐

  1. 学习 | 文献通读《基于LDA的游客网络评论主题分类:以故宫为例》

    基于LDA的游客网络评论主题分类:以故宫为例 基于LDA的主题发现模型: [关注问题] 主题及情感倾向: 关键词 LDA 游客 网络评论 情感分析 故宫 [主要模块] 1.LDA主题分类,得到4个主题 ...

  2. 基于深度学习的网络加密流量分类与入侵检测框架

    写在前面: 本文翻译供个人研究学习之用,不保证严谨与准确 github链接:https://github.com/WithHades/network_traffic_classification_pa ...

  3. 深度学习入门(上)01(用cifar数据实现三层网络实现图片分类)

    目录 1-1深度学习入门-imagenet图像分类比赛 1-2计算机视觉面临的挑战和常规套路 1-3 K近邻进行图像分类 KNN的实现步骤 KNN总结 KNN的问题: 数据库样例: 测试结果 最近邻实 ...

  4. pytorch 搭建cnn resnet50网络进行图片分类 代码详解

    数据样式: 直接上代码: import pathlib import tensorflow as tf import matplotlib.pyplot as plt import os, PIL, ...

  5. 毕业设计-基于深度学习的网络流量异常检测系统

    目录 前言 课题背景和意义 实现技术思路 一.相关技术与理论介绍 二.基于深度学习的网络流量二分类模型 三.网络流量异常检测系统 实现效果图样例 最后 前言

  6. 基于caffe的鉴黄图片分类c++代码

    基于caffe的鉴黄图片分类c++代码 icity.cpp: #include <cstring> #include <map> #include <string> ...

  7. yolov8 做图片分类和 ResNet Efficientnet 等常用分类网络的对比

    文章大纲 yolo v8 图片分类 简介与原理说明 训练代码 数据集的组织 多尺度训练 参考内容 ResNet 简介与原理说明 训练代码与使用说明 Usage EfficientNet 推理代码 其他 ...

  8. 图片分类网络ViT、MobileViT、Swin-Transformer、MobileNetV3、ConvNeXt、EfficientNetV2

    文章目录 一.Vision Transformer 二.Swin-Transformer 三.MobileViT 3.1 为什么引入CNN与Transformer的混合架构 3.2 性能对比 3.3 ...

  9. 基于PaddlePaddle构建ResNet18残差神经网络的食物图片分类问题

    基于PaddlePaddle构建ResNet18残差神经网络的食物图片分类问题 Introduction 本项目是在李宏毅机器学习课程的作业3进行的工作,任务是手动搭建一个CNN模型进行食物图片分类( ...

  10. 【五一创作】使用Resnet残差网络对图像进行分类(猫十二分类,模型定义、训练、保存、预测)(二)

    使用Resnet残差网络对图像进行分类 (猫十二分类,模型定义.训练.保存.预测)(二) 目录 (6).数据集划分 (7).训练集增强 (8).装载数据集 (9).初始化模型 (10).模型训练 (1 ...

最新文章

  1. mysql 原理 ~ DDL之在线DDL
  2. jQuery Ajax 实例 全解析(转)
  3. php向指定文件发送消息,PHP-将文件发送给用户
  4. 午夜十分之凌晨三点半
  5. Ubuntu开启telnet服务
  6. 【NOIP2018】赛道修建【二分】【树形dp】【multiset】【贪心】
  7. comparator接口与Comparable接口的区别
  8. 6 操作系统第二章 进程管理 处理机调度
  9. Perl程序设计中常用的函数
  10. c语言不用临时变量交换两个数程序分析
  11. [导入]js 关联数组 详解
  12. File类的一些方法测试
  13. python----运行机制
  14. C#创建一个文本文件简单代码
  15. 连续状态空间模型离散化
  16. 怎样用微信与电脑连接服务器,怎么使用WebSocket进行微信小程序远程控制电脑屏幕?...
  17. php 菱形问号,python爬虫出现菱形问号乱码的解决方法
  18. 浅谈何为分布式,何为微服务架构
  19. cmdb 指南_无限供应商制造商指南
  20. 【原创】BERT知识融合

热门文章

  1. 妮可妮可妮 [Hash]
  2. 红米K40使用半个月,谈谈上手体验,“优缺点”非常明显!
  3. 安卓支付宝抢红包脚本软件
  4. redis分布式锁实现(以抢红包为例)
  5. 初探Matplotlib
  6. Fast-paced Multiplayer
  7. Codeforces Gym 100015 简要题解
  8. 网吧用计算机性能配件清单,如何查看网吧电脑配置清单图文教程
  9. 【对比Java学Kotlin】协程-创建和取消
  10. 鸿蒙无极造化玉牒,上古十大至强神器,东皇钟只能排第四,另外七件你知道是哪七件吗...