Atlas800昇腾服务器(型号:3000)—SwinTransformer等NPU推理【图像分类】(九)

服务器配置如下:

CPU/NPU:鲲鹏 CPU(ARM64)+A300I pro推理卡
系统:Kylin V10 SP1【下载链接】【安装链接】
驱动与固件版本版本
Ascend-hdk-310p-npu-driver_23.0.1_linux-aarch64.run【下载链接】
Ascend-hdk-310p-npu-firmware_7.1.0.4.220.run【下载链接】
MCU版本:Ascend-hdk-310p-mcu_23.2.3【下载链接】
CANN开发套件:版本7.0.1【Toolkit下载链接】【Kernels下载链接】

测试om模型环境如下:

Python:版本3.8.11
推理工具:ais_bench
测试图像分类算法
(1)ShuffleNetv2
(2)DenseNet
(3)EfficientNet
(4)MobileNetv2
(5)MobileNetv3
(6)ResNet
(7)SE-ResNet
(8)Vision Transformer
(9)SwinTransformer

专栏其他文章
Atlas800昇腾服务器(型号:3000)—驱动与固件安装(一)
Atlas800昇腾服务器(型号:3000)—CANN安装(二)
Atlas800昇腾服务器(型号:3000)—YOLO全系列om模型转换测试(三)
Atlas800昇腾服务器(型号:3000)—AIPP加速前处理(四)
Atlas800昇腾服务器(型号:3000)—YOLO全系列NPU推理【检测】(五)
Atlas800昇腾服务器(型号:3000)—YOLO全系列NPU推理【实例分割】(六)
Atlas800昇腾服务器(型号:3000)—YOLO全系列NPU推理【关键点】(七)
Atlas800昇腾服务器(型号:3000)—YOLO全系列NPU推理【跟踪】(八)

1 mmcls安装

目的:mmcls图像分类模型库丰富,涵盖最新的图像分类算法,且安装一个环境,可用一个脚本转onnx模型!
链接:https://github.com/open-mmlab/mmpretrain

1.1 CUDA与cudnn安装

详情见:https://blog.csdn.net/weixin_45679938/article/details/138770542?spm=1001.2014.3001.5501

1.2 mmcls环境安装

mmcls版本:v0.25.0

(1)创建环境和安装pytorch

conda create -n open-mmlab python=3.8 pytorch=1.10 cudatoolkit=11.3 torchvision==0.11.0 -c pytorch -y
conda activate open-mmlab
pip3 install openmim
mim install mmcv-full

(2)下载mmcls=0.25.0版本,解压安装
在这里插入图片描述

# 对下载压缩包解压,不要用git,避免下载到最新版本
unzip XXX.zip
cd mmclassification
pip3 install -e .

1.3 pth转onnx

运行代码路径:./mmclassification-master/tools/deployment/pytorch2onnx.py

# pth转onnx命令示例-shufflenet_v2
python tools/deployment/pytorch2onnx.py configs/shufflenet_v2/shufflenet-v2-1x_16xb64_in1k.py --checkpoint checkpoints/shufflenet_v2.pth --output-file shufflenet_v2.onnx

生成的静态ONNX模型输入和输出可视化:
在这里插入图片描述

2 onnx转om模型

# onnx转om命令示例-shufflenet_v2
atc --framework=5 --model=onnx/shufflenet_v2.onnx --input_format=NCHW --input_shape="input:1,3,224,224" --output_type=FP32 --output=om/shufflenet_v2 --soc_version=Ascend310P3

结果由下可见,测试的图像分类模型均能成功生成om模型文件:
在这里插入图片描述

3 基于ais_bench推理工具推理

3.1 构建推理代码

新建一个om_infer.py脚本,内容如下:
其中,imagenet_classes.txt下载链接

import argparse
import time 
import cv2
import numpy as np
import osfrom ais_bench.infer.interface import InferSessionclass Image_Classfication:def __init__(self, om_model, imgsz=(224, 224), device_id=0, model_ndtype=np.single, mode="static", aipp=False):"""Initialization.Args:om_model (str): Path to the om model."""# 构建ais_bench推理引擎self.session = InferSession(device_id=device_id, model_path=om_model)# Numpy dtype: support both FP32(np.single) and FP16(np.half) om modelself.ndtype = model_ndtypeself.mode = modeself.aipp = aipp  self.model_height, self.model_width = imgsz[0], imgsz[1]  # 图像resize大小def __call__(self, im0):"""The whole pipeline: pre-process -> inference -> post-process.Args:im0 (Numpy.ndarray): original input image.Returns:index: 预测类别概率最大值的索引."""# 前处理Pre-processt1 = time.time()im = self.preprocess(im0)pre_time = round(time.time() - t1, 3)# 推理 inferencet2 = time.time()preds = self.session.infer([im], mode=self.mode)  # mode有动态"dymshape"和静态"static"等infer_time = round(time.time() - t2, 3)# 后处理Post-processt3 = time.time()index = self.postprocess(preds)post_time = round(time.time() - t3, 3)return index, (pre_time, infer_time, post_time)# 前处理,包括:resize, 其中HWC to CHW,BGR to RGB,归一化,增加维度CHW -> BCHW可选择是否开启AIPP加速处理def preprocess(self, image):img = cv2.resize(image, (self.model_width, self.model_height), interpolation=cv2.INTER_LINEAR)# 是否开启aipp加速预处理,需atc中完成if self.aipp:return imginput = img[:,:,::-1].transpose(2,0,1)  #BGR2RGB和HWC2CHWinput = input.astype(dtype=np.single)input[0,:] = (input[0,:] - 123.675) / 58.395   input[1,:] = (input[1,:] - 116.28) / 57.12input[2,:] = (input[2,:] - 103.53) / 57.375img = np.expand_dims(input, axis=0)return img# 后处理推理结果def postprocess(self, perds):prob = perds[0]max_index = np.argmax(prob)     # 获得最大值的索引return max_index# 加载标签文件获得分类标签def read_class_names(self, file_path="./imagenet_classes.txt"):class_names = []try:with open(file_path, 'r') as fp:for line in fp:name = line.strip()if name:class_names.append(name)except IOError:print("Could not open imagenet_classes.txt file...")import syssys.exit(-1)return class_namesif __name__ == '__main__':# Create an argument parser to handle command-line argumentsparser = argparse.ArgumentParser()parser.add_argument('--model_path', type=str, default=r"weights/shufflenet_v2.om", help='Path to OM model')parser.add_argument('--source', type=str, default=r'images', help='Path to input image')parser.add_argument('--out_path', type=str, default=r'results', help='结果保存文件夹')parser.add_argument('--imgsz_size', type=tuple, default=(224, 224), help='Image input size')parser.add_argument('--classes_path', type=str, default='imagenet_classes.txt', help='类别文件txt路径')parser.add_argument('--device_id', type=int, default=0, help='device id')parser.add_argument('--mode', default='static', help='om是动态dymshape或静态static')parser.add_argument('--model_ndtype', default=np.single, help='om是fp32或fp16')parser.add_argument('--aipp', default=False, action='store_true', help='是否开启aipp加速YOLO预处理, 需atc中完成om集成')args = parser.parse_args()# 创建结果保存文件夹if not os.path.exists(args.out_path):os.mkdir(args.out_path)print('开始运行:')# Build modelcls_model = Image_Classfication(args.model_path, args.imgsz_size, args.device_id, args.model_ndtype, args.mode, args.aipp)classes_label = cls_model.read_class_names(args.classes_path)for i, img_name in enumerate(os.listdir(args.source)):try:# Read image by OpenCVimg = cv2.imread(os.path.join(args.source, img_name))# 检测Inferenceindex, (pre_time, infer_time, post_time) = cls_model(img)label_text = classes_label[index]print('{}/{} ==>预测id:{}, 类别: {}, 预处理耗时: {:.3f}s, 推理耗时: {:.3f}s, 后处理耗时: {:.3f}s'.format(i+1, len(os.listdir(args.source)), index, label_text, pre_time, infer_time, post_time))# Draw rectanglescv2.putText(img, label_text, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0, 0, 255), 2, 8)cv2.imwrite(os.path.join(args.out_path, img_name), img)except Exception as e:print(e)      

3.2 预测分类结果

预测输入图如下
在这里插入图片描述

预测及推理耗时结果如下
(1)ShuffleNetv2【运行成功】
在这里插入图片描述
(2)DenseNet【运行成功】
在这里插入图片描述
(3)EfficientNet【运行成功】
在这里插入图片描述
(4)MobileNetv2【运行成功】
在这里插入图片描述
(5)MobileNetv3【运行成功】
在这里插入图片描述
(6)ResNet【运行成功】
在这里插入图片描述
(7)SE-ResNet【运行成功】
在这里插入图片描述
(8)Vision Transformer【运行成功】
在这里插入图片描述
(9)SwinTransformer【运行成功】
在这里插入图片描述

综上可知,常见的图像分类算法包括Transformer等均能适配该系列昇腾产品!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/460705.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

14. NSWindow 窗口与 NSWindowController 窗口控制器

NSWindowController窗口控制器主要用于管理xib/storyboard文件中加载的NSWindow对象:1、创建一个基于xib或storyboard的NSWindowController子类会自动创建一个NSWindow;2、如果手工创建NSWindow对象,则需要维护NSWindowController和NSWindow之…

02 什么是Babel

什么是Babel? Babel 是一个 JavaScript 编译器,提供了JavaScript的编译过程,能够将源代码转换为目标代码。AST -> Transform -> Generate 官网 Babel Babel 查看AST https://astexplorer.net/ Babel所有的包 babel/traverse Babel Babel 是…

【论文阅读笔记】VLP: A Survey on Vision-language Pre-training

目录 前言2 特征提取(Feature extraction)2.1.1 图象特征提取OD-based Region feature / RoIFreeze the pre-trained object detectorsGrid features(网格特征)CNN-GFsEnd-to-End Training(端到端训练)ViT-…

TortoiseSVN小乌龟下载安装(Windows11)

目录 TortoiseSVN 1.14.7工具下载安装 TortoiseSVN 1.14.7 工具 系统:Windows 11 下载 官网:https://tortoisesvn.subversion.org.cn/downloads.html如图选 TortoiseSVN 1.14.7 - 64 位 下载完成 安装 打开 next,next Browse&#xf…

Mac OS 搭建MySQL开发环境

Mac OS 搭建MySQL开发环境 文章目录 Mac OS 搭建MySQL开发环境一、安装Mysql:二、配置环境变量三、安装Navicat 本地环境: Mac OS Sequoia15.0.1(M3 Max) 目标状态: 下载安装Mysql,配置相关环境。 一、安装Mysql&…

docker Desktop开启远程访问端口

文章目录 问题解决方法1.首先开启docker Desktop的访问端口2.将本地端口绑定远程访问ip 验证 问题 Windows上部署的docker,没办法通过远程的ip进行访问,实现远程代码的部署。 解决方法 1.首先开启docker Desktop的访问端口 通过开启docker访问端口&am…

Linux文件系统学习(未完)

1. Linux文件系统的特点与类别 1.1 特点 Linux系统中,文件组织在一个统一的树形目录结构中,整个文件系统有一个根“/”(文件夹),然后以每个目录(文件夹)作为分叉,叶子节点作为文件…

Three.js 快速入门构建你的第一个 3D 应用

![ 开发领域:前端开发 | AI 应用 | Web3D | 元宇宙 技术栈:JavaScript、React、Three.js、WebGL、Go 经验经验:6年 前端开发经验,专注于图形渲染和AI技术 开源项目:github 晓智元宇宙、数字孪生引擎、前端面试题 大家好…

排序算法汇总

一、二分查找 public static int binarySearch(int[] nums,int target){int l 0, r nums.length-1;while(l < r){int mid l (r-l)/2;if(nums[mid] target){return mid;}else if(nums[mid] < target){r mid - 1;}else{l mid 1;}}return -1;} 对于防止溢出的 mid …

类和对象(2)

1.类的默认成员函数 默认成员函数就是⽤⼾没有显式实现&#xff0c;编译器会⾃动⽣成的成员函数称为默认成员函数。⼀个类&#xff0c;我们不写的情况下编译器会默认⽣成以下6个默认成员函数&#xff0c;需要注意的是这6个中最重要的是前4个&#xff0c;最后两个取地址重载不…

AcWing 1303:斐波那契前 n 项和 ← 矩阵快速幂加速递推

【题目来源】https://www.acwing.com/problem/content/1305/http://poj.org/problem?id3070【题目描述】 大家都知道 数列吧&#xff0c;。现在问题很简单&#xff0c;输入 和 &#xff0c;求 的前 项和 。【输入格式】 共一行&#xff0c;包含两个整数 和 。【输出格式】…

ElasticSearch备考 -- Index rollover

一、题目 给索引my-index-000001&#xff0c;创建别名my-index&#xff0c;并设置rollover&#xff0c;满足以下三个条件的 The index was created 7 or more days ago.The index contains 5 or more documents.The index’s largest primary shard is 1GB or larger. 二、思考…

zabbix 6.0 监控clickhouse(单机)

zabbix 6.0 LTS已经包含了clickhouse的监控模板&#xff0c;所以我们可以直接使用自带的模板来监控clickhouse了。 0.前置条件 clickhouse 已经安装&#xff0c;我安装的是24.3.5.47zabbix-agent 已经安装并配置。系统是ubuntu 2204 server 1. 新建监控用户 使用xml的方式为…

Jmeter自动化实战

一、前言 由于系统业务流程很复杂,在不同的阶段需要不同的数据,且数据无法重复使用,每次造新的数据特别繁琐,故想着能不能使用jmeter一键造数据 二、创建录制模板 可参考:jmeter录制接口 首先创建一个录制模板 因为会有各种请求头,cookies,签名,认证信息等原因,导致手动复制…

提升网站速度与性能优化的有效策略与实践

内容概要 在数字化快速发展的今天&#xff0c;网站速度与性能优化显得尤为重要&#xff0c;它直接影响用户的浏览体验。用户在访问网站时&#xff0c;往往希望能够迅速获取信息&#xff0c;若加载时间过长&#xff0c;轻易可能导致他们转向其他更为流畅的网站。因此&#xff0…

OpenCV视觉分析之目标跟踪(6)轻量级目标跟踪器类TrackerNano的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 Nano 跟踪器是一个超轻量级的基于深度神经网络&#xff08;DNN&#xff09;的通用目标跟踪器。 由于特殊的模型结构&#xff0c;Nano 跟踪器速度…

C数组手动输入问题

问题界面 解析 输入数组数据也需要加取地址符吗&#xff1f;数组不就是地址了吗&#xff1f; 理解array[i]和array[i][j]的区别&#xff1a; array[i]是一个指向第i行第一个元素的指针&#xff08;int*类型&#xff0c;指向array[i][0]&#xff09;。 array[i][j]是一个int类…

Hadoop-002-部署并配置HDFS集群

集群规划 Hadoop HDFS的角色包含 NameNode(主节点管理者)、DataNode(从节点工作者)、SeconddaryNameNode(从节点辅助) 节点CPU内存hadoop-11C4Ghadoop-21C2Ghadoop-31C2G 一、下载上传Hadoop包 注意: 登录hadoop-1节点root用户执行 1、官网下载安装包后上传 到hadoop-1服务…

Android 在github网站下载项目:各种很慢怎么办?比如gradle下载慢;访问github慢;依赖下载慢

目录 访问github慢gradle下载慢依赖下载慢 前言 大家好&#xff0c;我是前期后期&#xff0c;在网上冲浪的一名程序员。 为什么要看这篇文章呢&#xff1f;问题是什么&#xff1f; 我们在Github上面看到一些好的项目的时候&#xff0c;想下载下来研究学习一下。但经常遇到各…

信息安全数学基础(35)同态和同构

一、同态 定义&#xff1a; 设(M,)和(S,)是两个群&#xff08;或更一般的代数系统&#xff09;&#xff0c;如果存在一个映射σ:M→S&#xff0c;使得对于M中的任意两个元素a、b&#xff0c;都有σ(ab)σ(a)σ(b)&#xff0c;则称σ为M到S的同态或群映射。 性质&#xff1a; 同…