ResNet18云空间部署

news2025/4/20 14:51:54

1-6步骤可以在云空间运行,也可以在本地运行;步骤7 在云空间运行。

 1.编译ONNX模型

本章以 resnet18.onnx 为例, 介绍如何编译迁移一个onnx模型至BM1684X TPU平台运行。

该模型来自onnx的官网:

models/vision/classification/resnet/model/resnet18-v1-7.onnx at main · onnx/models · GitHub

本例模型和代码在 http://219.142.246.77:65000//sharing/hddTi2adl

下载到本地 model_resnet18.tar.gz,并解压:

  tar zxvf resnet18_classify.tar.gz

model_resnet18目录中包含以下文件:

  • model/resnet18.onnx resnet18原始模型
  • images/ 测试图片集
  • ILSVRC2012/ 量化用数据集
  • outputs 输出结果位置
  • Workspace 编译量化结果存放位置
  • calssify_resnet18.py 推理程序

2.加载TPU-MLIR

以下操作需要在Docker容器中。关于Docker的使用, 请参考 启动Docker Container

$ tar zxf tpu-mlir_xxxx.tar.gz

$ source tpu-mlir_xxxx/envsetup.sh

envsetup.sh 对环境变量的修改内容为:

export PATH=${TPUC_ROOT}/bin:$PATH

export PATH=${TPUC_ROOT}/python/tools:$PATH

export PATH=${TPUC_ROOT}/python/utils:$PATH

export PATH=${TPUC_ROOT}/python/test:$PATH

export PATH=${TPUC_ROOT}/python/samples:$PATH

export LD_LIBRARY_PATH=$TPUC_ROOT/lib:$LD_LIBRARY_PATH

export PYTHONPATH=${TPUC_ROOT}/python:$PYTHONPATH

export MODEL_ZOO_PATH=${TPUC_ROOT}/../model-zoo

3  准备工作目录

建立 model_resnet18目录, 注意是与tpu-mlir同级目录; 并把模型文件和图片文件都 放入 model_resnet18 目录中。操作如下:

$ mkdir model_resnet18 && cd model_resnet18

$ cp -rf $TPUC_ROOT/python/samples/classify_resnet18.py .

$ mkdir workspace && cd workspace

$ mkdir outputs

4 ONNX转MLIR

模型转换命令如下:

$ model_transform.py \   

        --model_name resnet18 \   

        --model_def ../model/resnet18.onnx \   

        --input_shapes [[1,3,224,224]] \   

        --mean 0.0,0.0,0.0 \   

        --scale 0.0039216,0.0039216,0.0039216 \   

        --keep_aspect_ratio \   

        --pixel_format rgb \   

        --output_names output \   

        --test_input ../images/dog.jpg \   

        --test_result resnet18_top_outputs.npz \     

        --mlir resnet18.mlir \

转成mlir文件后, 会生成一个 ${model_name}_in_f32.npz 文件, 该文件是模型的输入文件。

https://img-blog.csdnimg.cn/d2618b5051f245bd9ccd45be928a118f.png

model_transform.py参数表

参数名

必选?

说明

model_name

指定模型名称

model_def

指定模型定义文件, 比如`.onnx`或`.tflite`或`.prototxt`文件

input_shapes

指定输入的shape, 例如[[1,3,640,640]]; 二维数组, 可以支

持多输入情况

resize_dims

原始图片需要resize之后的尺寸; 如果不指定, 则resize成模

型的输入尺寸

keep_aspect_ratio

在Resize时是否保持长宽比, 默认为false; 设置时会对不足

部分补0

mean

图像每个通道的均值, 默认为0.0,0.0,0.0

scale

图片每个通道的比值, 默认为1.0,1.0,1.0

pixel_format

图片类型, 可以是rgb、bgr、gray、rgbd四种情况

output_names

指定输出的名称, 如果不指定, 则用模型的输出; 指定后用

该指定名称做输出

test_input

指定输入文件用于验证, 可以是图片或npy或npz; 可以不

指定, 则不会正确性验证

test_result

指定验证后的输出文件

excepts

指定需要排除验证的网络层的名称, 多个用,隔开

mlir

指定输出的mlir文件名称和路径

post_handle_type

将后处理融合到模型中,指定后处理类型, 比如yolo、

ssd

5 MLIR转F32模型 

将mlir文件转换成f32的bmodel, 操作方法如下

$ model_deploy.py \   

        --mlir resnet18.mlir \  

        --quantize F32 \  

        --chip bm1684x \   

        --test_input resnet18_in_f32.npz \   

        --test_reference resnet18_top_outputs.npz \   

        --tolerance 0.99,0.99 \  

        --model resnet18_1684x_f32.bmodel

编译完成后, 会生成名为 ${model_name}_1684x_f32.bmodel 的文件。

https://img-blog.csdnimg.cn/ac65136d3671454c867981720546e050.png

 6 MLIR转INT8模型

6.1生成校准表

   

run_calibration.py resnet18.mlir \



      --dataset ../ILSVRC2012 \



      --input_num 100 \



      -o resnet18_cali_table

https://img-blog.csdnimg.cn/c0a28592c59e4ab09e7f9342730a6e68.png

6.2 编译为INT8对称量化模型 

$ model_deploy.py \   

        --mlir resnet18.mlir \   

        --quantize INT8 \   

        --calibration_table resnet18_cali_table \   

        --chip bm1684x \   

        --test_input resnet18_in_f32.npz \   

        --test_reference resnet18_top_outputs.npz \  

        --tolerance 0.85,0.45 \   

        --model resnet18_1684x_int8_sym.bmodel

https://img-blog.csdnimg.cn/ad1189ae35c44117a0d688c02f30423c.png

 6.3转成INT8非对称量化模型

$ model_deploy.py \

    --mlir resnet18.mlir \

    --quantize INT8 \

    --asymmetric \

    --calibration_table resnet18_cali_table \

    --chip bm1684x \

    --test_input resnet18_in_f32.npz \

    --test_reference resnet18_top_outputs.npz \

    --tolerance 0.90,0.55 \

    --model resnet18_1684x_int8_asym.bmodel

https://img-blog.csdnimg.cn/02293a24f7814ec089a04dbf88e36d87.png

7 云空间部署

7.1云空间使用

用户申请的云空间审批后,将鼠标移至“进⼊空间”上⽅,会在当前页面弹出⼀个⼩窗⼝。

7.2 文件传输

如果用户需要在云空间主机与本地之间进⾏⽂件传输,可以点击“云空间⽂件系统“链接,进⼊⽂件传输与管理工作台。⽂件管理⼯作台操作的云空间主机⽬录默认是在/tmp下⾯,工作台提供了新建、删除、剪切、复制文件或文件夹的功能。

将tpu-mlir的压缩包上传到云空间文件夹中

将转换好的模型和数据上传到云空间

7.3环境配置

以下操作需要在云空间平台中。

$ tar zxf tpu-mlir_xxxx.tar.gz

$ source tpu-mlir_xxxx/envsetup.sh

envsetup.sh 对环境变量的修改内容为:


export PATH=${TPUC_ROOT}/bin:$PATH

export PATH=${TPUC_ROOT}/python/tools:$PATH

export PATH=${TPUC_ROOT}/python/utils:$PATH

export PATH=${TPUC_ROOT}/python/test:$PATH

export PATH=${TPUC_ROOT}/python/samples:$PATH

export LD_LIBRARY_PATH=$TPUC_ROOT/lib:$LD_LIBRARY_PATH

export PYTHONPATH=${TPUC_ROOT}/python:$PYTHONPATH

export MODEL_ZOO_PATH=${TPUC_ROOT}/../model-zoo

激活sophon-libsophon

激活导入sophon-libsophon环境

apt-get update

export PATH=/opt/sophon/libsophon-current/bin:$PATH

export LD_LIBRARY_PATH=/opt/sophon/libsophon-current/lib:$LD_LIBRARY_PATH

bm-smi

7.4 查看模型

cd  /tmp/model_resnet18/workspace

使用bmrt_test –bmodel 命令查看f32模型的属性

cd  /tmp/model_resnet18/workspace

使用bmrt_test –bmodel 命令查看INT8模型的属性

7.5测试

onnx模型测试

执行以下推理命令

python ./classify_resnet18.py --model_def model/resnet18.onnx --input images/cat.jpg --output outputs/cat_onnx.jpg  --category_file images/label.txt

Fp32模型测试

执行推理命令:

python ./classify_resnet18.py --model_def workspace/resnet18_1684x_f32.bmodel --input images/cat.jpg --output outputs/cat_f32.jpg  --category_file images/label.txt

INT8 对称模型测试

之后执行推理命令:

python ./classify_resnet18.py --model_def workspace/resnet18_1684x_int8_sym.bmodel --input images/cat.jpg --output outputs/cat_int8.jpg  --category_file images/label.txt

INT8 非对称模型测试

之后执行推理命令:

python ./classify_resnet18.py --model_def workspace/resnet18_1684x_int8_asym.bmodel --input images/cat.jpg --output outputs/cat_int8a.jpg  --category_file images/label.txt

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开学前必备,发布分班结果小工具推荐

暑假即将结束,开学后老师们将面临繁忙的工作,特别是负责开学相关事务的老师们。他们需要与家长进行良好的沟通,收集学生信息。有些学校的老师还需要发布分班情况,让学生家长知晓他们的孩子被分到哪个班级。为了简化这个过程&#…

算法通关村第6关【白银】| 树的层次遍历问题

一、基本层次遍历问题 1.二叉树的层次遍历 思路&#xff1a;使用队列可以很好的保存遍历状态&#xff0c;出队将结点左右子结点入队&#xff0c;用size记录下一层的元素个数&#xff0c;这样就能区分出层了 class Solution {public List<List<Integer>> levelOr…

RabbitMQ---订阅模型分类

订阅模型分类 在之前的模式中&#xff0c;我们创建了一个工作队列。 工作队列背后的假设是&#xff1a;每个任务只被传递给一个工作人员。 在这一部分&#xff0c;我们将做一些完全不同的事情 - 我们将会传递一个信息给多个消费者。 这种模式被称为“发布/订阅”。 订阅模型示意…

防火墙组建双击热备后老是主备自动切换怎么处理?

环境: 2台主备防火墙 8.0.75 AF-2000-FH2130B-SC 核心交换机 H3C S6520-26Q-SI version 7.1.070, Release 6326 问题描述: 防火墙组建双击热备后老是主备自动切换怎么处理? 查看切换日志,本地故障值小于对端,经常自动切换导致eth3接口业务老是自动断开,切换频率,…

全面介绍MES车间班次管理

一、什么是MES车间班次管理&#xff1f; MES车间班次管理是指利用制造执行系统&#xff08;MES&#xff09;来有效管理车间内的工人班次安排和生产计划。它涉及到车间人员的计划排班、考勤管理、生产数据的采集和分析等一系列工作。 二、MES车间班次管理的功能&#xff1a; 1…

bilibiliDown-极简纯净B站视频解析提取工具

bilibiliDown是一款免费极简纯净B站视频解析提取工具&#xff0c;可一键解析单视频、合集、分集、封面、srt字幕、xml弹幕、ass弹幕、视频下载链接&#xff0c;帮助你轻松将bilibili视频下载到本地电脑或手机相册&#xff0c;工具是一个前后端分离的项目&#xff0c;使用spring…

网工内推 | 锐捷招云工程师,HCIE、CCIE、RHCE优先,25k*13薪

01 锐捷网络 招聘岗位&#xff1a;云方案工程师 职责描述&#xff1a; 1、负责云数据中心方案项目方案设计撰写、项目实施交付、故障处理、业务割接、客户培训、现场保障、网络优化、网络巡检等技术相关业务 2、负责云数据中心方案新技术文档沉淀、体系建设、工具开发等标准化…

docker镜像和仓库管理练习

目录 一.使用mysql:5.6和owncloud镜像&#xff0c;构建一个个人网盘 二.安装搭建私有仓库Harbor 三.编写Dockerfile制作Web应用系统nginx镜像&#xff0c;生成镜像nginx:v1.1&#xff0c;并推送其到私有仓库&#xff0c;以下为具体要求&#xff1a; 四.Dockerfile快速搭建自…

如何使用操作系统迁移工具将 Windows 10 迁移到固态硬盘?

尽管微软已于2021年10月5日发布了Windows 11&#xff0c;但Windows 10仍然是很受欢迎的Windows桌面操作系统。如果您是Windows 10用户&#xff0c;在以下情况下您可能希望将Windows 10迁移到SSD&#xff1a; ​您当前的系统安装在硬盘上&#xff0c;启动计算机和加载程序的时间…

做一个蛋糕店小程序需要哪些步骤?

对于一些不懂技术的新手来说&#xff0c;创建蛋糕店小程序可能会感到有些困惑。但是&#xff0c;有了乔拓云平台的帮助&#xff0c;你可以轻松地创建自己的蛋糕店小程序。下面&#xff0c;我将为大家详细介绍一下具体的操作步骤。 首先&#xff0c;登录乔拓云平台并进入后台管理…

实验篇——基因组共线性分析

实验篇——基因组共线性分析 文章目录 前言一、名词解释二、实操1. 文件准备2. 共线性分析3. 共线性可视化4. 多个物种共线性可视化 总结 前言 本文主要介绍了使用TBtools软件来进行基因组间的共线性分析&#xff0c;并进行可视化。 一、名词解释 基因组共线性分析是一种用于比…

Unity3d:GameFramework解析:实体,对象池,资源管理,获取计数,引用计数,自动释放

基本概念 1.GF万物基于引用池IReference 2.ObjectBase : IReference类的m_Target持有unity中Mono&#xff0c;资源&#xff0c;GameObejct 3.AssetObject : ObjectBase类m_Target持有Assetbundle中的Asset&#xff0c;具有获取&#xff0c;引用两个计数管理释放 4.ResourceObj…

什么是网络安全工程师,你想知道的都在这里!

随着互联网的发展和大数据时代的到来&#xff0c;网络已经日渐深入到我们生活、工作中的方方面面&#xff0c;社会信息化和信息网络化&#xff0c;突破了应用信息在时间和空间上的障碍&#xff0c;使信息的价值不断提高。但是&#xff0c;与此同时&#xff0c;网页篡改、计算机…

JMeter性能测试(中)

断言 让程序自动判断预期结果和实际结果是否一致。 响应断言 例子2&#xff1a;可以在同一个HTTP请求下包含多个响应断言 例子1&#xff1a; 步骤; 添加线程组添加HTTP请求添加响应断言 测试字段&#xff1a;要检查的项&#xff08;实际结果&#xff09;模式匹配规则&#…

25-非父子通信 - event bus 事件总线

作用:非父子组件之间&#xff0c;进行简易消息传递。(复杂场景 -> Vuex) 1.创建一个都能访问到的事件总线(空 Vue 实例) -> utils/EventBus.js import Vue from vue const Bus new Vue() export default Bus 2. A组件(接收方),监听 Bus实例 的事件(支持多个组件同时监…

【C++小项目】实现一个日期计算器

目录 Ⅰ. 引入 Ⅱ. 列轮廓 Ⅲ. 功能的实现 构造函数 Print 判断是否相等 | ! ➡️: ➡️!: 判断大小 > | > | < | < ➡️>&#xff1a; ➡️<&#xff1a; ➡️>&#xff1a; ➡️<&#xff1a; 加减天数 | | - | - ➡️&#xff1a;…

CSS 盒子模型

前言 盒子模型-组成 CSS盒子模型是一种用来描述元素在页面布局中占据空间的模型。它将每个元素看作由内容区域、内边距、边框和外边距组成的一个矩形框。 盒子模型的组成部分包括&#xff1a; 内容区域&#xff08;Content&#xff09;&#xff1a;显示元素的实际内容&#xf…

嵌入式Linux开发实操(十一):ETH网络接口开发

# 前言 嵌入式linux也有些是支持网口的,比如RGMII,嵌入式系统资源支持以太网和其他基本接口的硬件平台(板上或片上系统),有充足的NOR或NAND Flash闪存,用于容纳OS、lib库、fileSystem文件系统、APP应用程序、Bootloader引导程序等。嵌入式Linux是开源的、可修改的,并且…

Grounded Language-Image Pre-training论文笔记

Title&#xff1a;Grounded Language-Image Pre-training Code 文章目录 1. 背景2. 方法&#xff08;1&#xff09;Unified Formulation传统目标检测grounding目标检测 &#xff08;2&#xff09;Language-Aware Deep Fusion&#xff08;3&#xff09;Pre-training with Scala…

【JavaEE基础学习打卡06】JDBC之进阶学习PreparedStatement

目录 前言一、PreparedStatement是什么二、重点理解预编译三、PreparedStatement基本使用四、Statement和PreparedStatement比较1.PreparedStatement效率高2.PreparedStatement无需拼接参数3.PreparedStatement防止SQL注入 总结 前言 &#x1f4dc; 本系列教程适用于JavaWeb初学…