摘要:本实验主要是以基于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/
软件使用方法:https://blog.csdn.net/xuanying_china/article/details/120080644

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

指令:

    cd /home/
su - HwHiAiUser

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

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

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

仓库资源链接:
https://gitee.com/ascend/samples/tree/master/cplusplus/level2_simple_inference/1_classification/resnet50_imagenet_classification

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_model
cd 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.prototxt
wegt https://modelzoo-train-atc.obs.cn-north-4.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/resnet50/resnet50.caffemodel

3、模型转换

上述下载的预训练模型需要首先运用ATC模型转换工具将该模型转换成昇腾AI处理器支持的离线模型(.om)
官方文档ATC工具学习资源:
https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/51RC2alpha005/infacldevg/atctool

流程:

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

    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.jpg
wget 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/latest
export NPU_HOST_LIB=$DDK_PATH/acllib/lib64/stub

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

    mkdir -p build/intermediates/host

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

    cd build/intermediates/host
cmake ../../../src -DCMAKE_CXX_COMPILER=g++ -DCMAKE_SKIP_RPATH=TRUE
make

可以在样例目录(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. 深度学习之神经网络核心原理与算法-caffe&keras框架图片分类

    之前我们在使用cnn做图片分类的时候使用了CIFAR-10数据集 其他框架对于CIFAR-10的图片分类是怎么做的 来与TensorFlow做对比. Caffe Keras 安装 官方安装文档: ht ...

  2. Caffe 议事(二):从零开始搭建 ResNet 之 网络的搭建(上)

    3.搭建网络: 搭建网络之前,要确保之前编译 caffe 时已经 make pycaffe 了. 步骤1:导入 Caffe 我们首先在 ResNet 文件夹中建立一个 mydemo.py 的文件,本参 ...

  3. 源码分析——迁移学习Inception V3网络重训练实现图片分类

    1. 前言 近些年来,随着以卷积神经网络(CNN)为代表的深度学习在图像识别领域的突破,越来越多的图像识别算法不断涌现.在去年,我们初步成功尝试了图像识别在测试领域的应用:将网站样式错乱问题.无线领域 ...

  4. 第二十二节,TensorFlow中的图片分类模型库slim的使用、数据集处理

    Google在TensorFlow1.0,之后推出了一个叫slim的库,TF-slim是TensorFlow的一个新的轻量级的高级API接口.这个模块是在16年新推出的,其主要目的是来做所谓的“代码瘦 ...

  5. 人脸识别(基于Caffe)

    人脸识别(基于Caffe, 来自tyd) 人脸识别(判断是否为人脸) LMDB(数据库, 为Caffe支持的分类数据源) mkdir face_detect cd face_detect mkdir ...

  6. (转载)基于比较的少样本(one/few-shoting)分类

    基于比较的方法 先通过CNN得到目标特征,然后与参考目标的特征进行比较. 不同在于比较的方法不同而已. 基本概念 数据集Omniglot:50种alphabets(文字或者文明); alphabet中 ...

  7. 基于Caffe训练AlexNet模型

    数据集 1.准备数据集 1)下载训练和验证图片 ImageNet官网地址:http://www.image-net.org/signup.php?next=download-images (需用邮箱注 ...

  8. Ubuntu下caffe:用自己的图片训练并测试AlexNet模型

    参考博客:https://blog.csdn.net/eereere/article/details/79118645#commentBox 目录 1.准备图片 2. 将 图片路径写入txt 参考 这 ...

  9. 人脸检测数据源制作与基于caffe构架的ALEXNET神经网络训练

    本篇文章主要记录的是人脸检测数据源制作与ALEXNET网络训练实现检测到人脸(基于caffe). 1.数据获取 数据获取: ① benchmark是一个行业的基准(数据库.论文.源码.结果),例如WI ...

随机推荐

  1. 【python疫情可视化】用pyecharts开发全国疫情动态地图,效果酷炫!

    一.效果演示 我用python开发了一个动态疫情地图,首先看下效果: 如图所示,地图根据实时数据通过时间线轮播的方式,动态展示数据的变化.随着时间的推移,疫情确诊数量的增多,地图各个省份颜色逐渐加深, ...

  2. gogin web框架部署学习

    首先去git上面找了一个gin框架拿来学习gin web开发: flipped-aurora/gin-vue-admin: 基于vite+vue3+gin搭建的开发基础平台(已完成setup语法糖版本 ...

  3. 832. Flipping an Image - LeetCode

    Question 832. Flipping an Image Solution 题目大意:将1列与最后n列对换,2列与n-1列对换-然后再将每个元素取反 思路:遍历二维数组的左半边,对每个元素先做对 ...

  4. Linux详解(基础、环境配置、项目部署入门)

    Linux(CentOS 7)操作系统 消息队列(Kafka.RabbitMQ.RocketMQ),缓存(Redis),搜索引擎(ES),集群分布式(需要购买多台服务器,如果没有服务器我们就只能使用虚 ...

  5. 【原创】史上最简单易懂的kali修改主机名方法

    前言 主机名:在一个局域网中,每台机器都有IP地址,但是IP地址不便于人们记忆.于是采用主机名,即利于主机之间的区分,又方便人们的记忆主机.--和域名差不多. 一,查看当前的主机名 ┌──(root㉿ ...

  6. 【ASP.NET Core】配置应用程序地址的N多种方法

    下面又到了老周误人子弟的时间,今天要误大伙的话题是:找找有多少种方法可以设置 ASP.NET Core 应用的地址,即 URL. 精彩马上开始! 1.UseUrls 方法 这是一个扩展方法,参数是可变 ...

  7. Hash表、 继承

    Hash表 我们来了解什么是Hash表?? 要想知道什么是哈希表,那得先了解哈希函数 二叉平衡树 红黑树 B B+树,它们的查找都是先从根节点进行查找,从节点取出数据或索引与查找值进行比较.那么,有没 ...

  8. ffmpeg使用总结

    2021-07-21 初稿 截图 ffmpeg -i <video> -ss <time> -vframes 1 <output_pic> 设置视频封面 ffmpe ...

  9. SAP APO - 简介

    SAP高级计划和优化(SAP APO)是SAP SCM中的关键模块之一,在供应链流程中控制供应网络计划,备件计划,TP / VS和需求计划. 它可以帮助组织在动态环境中管理其供应链流程. SAP AP ...

  10. .NET6接入Skywalking链路追踪完整流程

    一.Skywalking介绍 Skywalking是一款分布式链路追踪组件,什么是链路追踪? 随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求往往需要涉及到多个服务.互联网应用构建在不同的软 ...