ResNet18云空间部署

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:$PATHexport PATH=${TPUC_ROOT}/python/tools:$PATHexport PATH=${TPUC_ROOT}/python/utils:$PATHexport PATH=${TPUC_ROOT}/python/test:$PATHexport PATH=${TPUC_ROOT}/python/samples:$PATHexport LD_LIBRARY_PATH=$TPUC_ROOT/lib:$LD_LIBRARY_PATHexport PYTHONPATH=${TPUC_ROOT}/python:$PYTHONPATHexport 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:$PATHexport PATH=${TPUC_ROOT}/python/tools:$PATHexport PATH=${TPUC_ROOT}/python/utils:$PATHexport PATH=${TPUC_ROOT}/python/test:$PATHexport PATH=${TPUC_ROOT}/python/samples:$PATHexport LD_LIBRARY_PATH=$TPUC_ROOT/lib:$LD_LIBRARY_PATHexport PYTHONPATH=${TPUC_ROOT}/python:$PYTHONPATHexport MODEL_ZOO_PATH=${TPUC_ROOT}/../model-zoo

激活sophon-libsophon

激活导入sophon-libsophon环境

apt-get updateexport PATH=/opt/sophon/libsophon-current/bin:$PATHexport LD_LIBRARY_PATH=/opt/sophon/libsophon-current/lib:$LD_LIBRARY_PATHbm-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.rhkb.cn/news/104049.html

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

相关文章

综合能源系统(8)——综合能源系统支撑技术

综合能源系统关键技术与典型案例  何泽家,李德智主编 1、大数据技术 1.1、大数据技术概述 大数据是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高…

自动驾驶仿真:基于Carsim开发的加速度请求模型

文章目录 前言一、加速度输出变量问题澄清二、配置Carsim动力学模型三、配置Carsim驾驶员模型四、添加VS Command代码五、Run Control联合仿真六、加速度模型效果验证 前言 1、自动驾驶行业中,算法端对于纵向控制的功能预留接口基本都是加速度,我们需要…

【Unity小技巧】Unity探究自制对象池和官方内置对象池(ObjectPool)的使用

文章目录 前言不使用对象池使用官方内置对象池应用 自制对象池总结源码参考完结 前言 对象池(Object Pool)是一种软件设计模式,用于管理和重用已创建的对象。在对象池中,一组预先创建的对象被维护在一个池中,并在需要时…

树结构使用实例---实现数组和树结构的转换

文章目录 一、为什么要用树结构?二、使用步骤 1.引入相关json2.树结构的转换总结 一、为什么要用树结构? 本文将讲述一个实例,构造一棵树来实现数组和tree的转换,这在前端树结构中是经常遇到的 后端返回树结构方便管理&#xff…

【Vue框架】 router和route是什么关系

前言 之前没太注意,写着写着突然发现它们貌似不太一样,记录以下,回顾的看总结就好。 1、总结✨ route:当前激活路由的对象,用于访问和操作当前路由的信息 router:管理多个route的对象,整个应…

Qt双击某一文件通过自己实现的程序打开,并加载文件显示

双击启动 简述方法一方法二注意 简述 在Windows系统中,双击某类扩展名的文件,通过自己实现的程序打开文件,并正确加载及显示文件。有两种方式可以到达这个目的。 对于系统不知道的扩展名的文件,第一次打开时,需要自行…

Kali Linux中的SQL注入攻击如何进行

Kali Linux中的SQL注入攻击如何进行? 什么是SQL注入攻击? SQL注入是一种常见的Web应用程序漏洞,攻击者可以通过恶意构造的SQL查询字符串,绕过应用程序的验证和过滤,进而访问或操纵数据库中的数据。这可能导致泄露敏感…

Android OpenCV(七十五): 看看刚”转正“的条形码识别

前言 2021年,我们写过一篇《OpenCV 条码识别 Android 平台实践》,当时的条形码识别模块位于 opencv_contrib 仓库,但是 OpenCV 4.8.0 版本开始, 条形码识别模块已移动到 OpenCV 主仓库,至此我们无需自行编译即可轻松地调用条形码识别能力。 Bar code detector and decoder…

2.含电热联合系统的微电网运行优化

含电热联合系统的微电网运行优化 MATLAB代码:含电热联合系统的微电网运行优化 关键词:微网 电热联合系统 优化调度 参考文档:《含电热联合系统的微电网运行优化》完全复现 仿真平台:MATLAB yalmipcplex [火]主要内容&#xf…

设计模式篇---抽象工厂(包含优化)

文章目录 概念结构实例优化 概念 抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。 工厂方法是有一个类型的产品,也就是只有一个产品的抽象类或接口,而抽象工厂相对于工厂方法来说,是有…

THINKPHP 微联云投票系统源码独立版 + 支持刷礼物

THINKPHP 微联云投票系统源码独立版 支持刷礼物 nginxphp7.2以上 mysql5.6以上 简单测试后台基本没什么问题,暂时发现H5前端有bug,自行修复。

【Winform学习笔记(八)】通过委托实现跨窗体传值

通过委托实现跨窗体传值 前言正文1、委托及事件2、通过委托实现跨窗体传值的步骤1.在子窗体中定义委托2.在子窗体中声明一个委托类型的事件3.调用委托类型事件4.在实例化子窗体后,子窗体订阅事件接受方法5.实现具体的事件 3、具体示例4、完整代码5、实现效果 前言 …

CTFhub-sqli注入-Referer注入

在最后添加 Referer: (注意 R 大写, Referer后面是 :,Content-Length: 与 Referer: 之间没有空行) 1 2 3 1 union select 1,database() -1 union select 1,database() -1 union select 1,group_concat(table_name)from information_sche…

解决ios隔空播放音频到macos没有声音的问题

解决ios隔空播放音频到macos没有声音的问题 一、检查隔空播放支持设备和系统要求二、打开隔空播放接收器三、重置MAC控制中心进程END 一、检查隔空播放支持设备和系统要求 Mac、iPhone、iPad 和 Apple Watch 上“连续互通”的系统要求 二、打开隔空播放接收器 ps;我设备是同一…

springboot里 运用 easyexcel 导出

引入pom <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version> </dependency>运用 import com.alibaba.excel.EasyExcel; import org.springframework.stereotype.Contr…

对称输出字符串(对称+递归)--夏令营

题目 tips&#xff1a; 1、巧思&#xff1a;类似于将输入的字符串按一个上一个下输出&#xff1b;所以可以用递归栈思考&#xff0c;第一个输入的直接输出&#xff0c;第二个存下来存进栈&#xff0c;如果没有字符串了&#xff0c;就可以输出第二个字符串&#xff0c;如果还有…

「UG/NX」Block UI 选择特征SelectFeature

✨博客主页何曾参静谧的博客📌文章专栏「UG/NX」BlockUI集合📚全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C+&#

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

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

【boost网络库从青铜到王者】第六篇:asio网络编程中的socket异步读(接收)写(发送)

文章目录 1、简介2、异步写 void AsyncWriteSomeToSocketErr(const std::string& buffer)3、异步写void AsyncWriteSomeToSocket(const std::string& buffer)4、异步写void AsyncSendToSocket(const std::string& buffer)5、异步读void AsyncReadSomeToSocket(cons…