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:$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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mybatis (3)-----分页的运用

目录 一、分页查询 二,特殊的字符处理 三、总结 前言:在我们上篇已经学的动态sql的基础上,今天继续讲解关于maybatis的分页,特殊的字符处理。希望这篇博客可以帮助到大家哦! 一、分页查询 为什么要重写mybatis的分…

星际争霸之小霸王之小蜜蜂(六)--让子弹飞

目录 前言 一、添加子弹设置 二、创建子弹 三、创建绘制和移动子弹函数 四、让子弹飞 五、效果 总结 前言 小蜜蜂的基本操作已经完成了,现在开始编写子弹的代码了。 一、添加子弹设置 在我的预想里,我们的小蜜蜂既然是一只猫,那么放出的子弹…

【MD5加密】

MD5加密 什么是MD5密码MD5用途MD5特点MD5加密MD5解密总结那我们上面也已经提到啦,说MD5是可以进行解密或者说他是可以泄露密码等,所以我们还可以使用以下方法进行再次加密 第一种:MD5固定盐值第二种:MD5随机盐值 什么是MD5密码 官…

基于鸽群算法优化的BP神经网络(预测应用) - 附代码

基于鸽群算法优化的BP神经网络(预测应用) - 附代码 文章目录 基于鸽群算法优化的BP神经网络(预测应用) - 附代码1.数据介绍2.鸽群优化BP神经网络2.1 BP神经网络参数设置2.2 鸽群算法应用 4.测试结果:5.Matlab代码 摘要…

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

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

机器人制作开源方案 | 滑板助力器

我们可以用一块废滑板做些什么呢? 如今,越来越多的人选择电动滑板作为代步工具或娱乐方式,市场上也涌现出越来越多的电动滑板产品。 (图片来源:Backfire Zealot X Belt Drive Electric Skateboard– Backfire Board…

在Linux系统上安装和配置Redis数据库,无需公网IP即可实现远程连接的详细解析

文章目录 1. Linux(centos8)安装redis数据库2. 配置redis数据库3. 内网穿透3.1 安装cpolar内网穿透3.2 创建隧道映射本地端口 4. 配置固定TCP端口地址4.1 保留一个固定tcp地址4.2 配置固定TCP地址4.3 使用固定的tcp地址连接 Redis作为一款高速缓存的key value键值对的数据库,在…

学会Mybatis框架:一文掌握MyBatis与GitHub插件分页的完美结合【三.分页】

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于Mybatis的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.Mybatis分页 1. Mybatis自带分页 2…

springboot小知识:配置feign服务超时时间

背景:当前项目通过feign服务调用了其他两个项目的接口,但是由于特殊需求,需要调整某一个项目的feign服务的默认超时时间: 默认连接超时10秒,默认读取超时时间 60秒 1.找到定义的FeignClient 2.根据FeignClient定义的名…

Node基础--Node简介以及安装教程

1.Node简介 Node.js发布于2009年5月,由Ryan Dahl开发,是一个基于Chrome V8引擎的JavaScript运行环境,使用了一个事件驱动、非阻塞式I/O模型,让JavaScript 运行在服务端的开发平台,它让JavaScript成为与PHP、Python、Pe…

对CSV格式的数据文件进行插值处理

使用Python程序,实现对一个较短的csv文件,进行差值处理,并绘制GUI界面; 这个程序是一个使用Python的Tkinter库构建的GUI应用程序,用于对CSV格式的数据文件进行插值处理。下面我会逐步解释程序的各个部分和功能&#x…

消息队列前世今生 字节跳动 Kafka #创作活动

消息队列前世今生 1.1 案例一: 系统崩溃 首先大家跟着我想象一下下面的这个的场景, 看到新出的游戏机,太贵了买不起,这个时候你突然想到,今天抖音直播搞活动,打开抖音搜索,找到直播间以后&am…

边缘计算节点BEC典型实践:如何快速上手PC-Farm服务器?

百度智能云边缘计算节点BEC(Baidu Edge Computing)基于运营商边缘节点和网络构建,一站式提供靠近终端用户的弹性计算资源。边缘计算节点在海外覆盖五大洲,在国内覆盖全国七大区、三大运营商。BEC通过就近计算和处理,大…

并发编程系列-分而治之思想Forkjoin

我们介绍过一些有关并发编程的工具和概念,包括线程池、Future、CompletableFuture和CompletionService。如果仔细观察,你会发现这些工具实际上是帮助我们从任务的角度来解决并发问题的,而不是让我们陷入线程之间如何协作的繁琐细节&#xff0…

一网打尽java注解-克隆-面向对象设计原则-设计模式

文章目录 注解内置注解元注解 对象克隆为什么要克隆?如何克隆浅克隆深克隆 Java设计模式什么是设计模式?为什么要学习设计模式? 建模语言类接口类之间的关系依赖关系关联关系聚合关系组合关系继承关系实现关系 面向对象设计原则单一职责开闭原…

仓库使用综合练习

目录 1、使用mysql:5.6和 owncloud 镜像,构建一个个人网盘。 2、安装搭建私有仓库 Harbor 3、编写Dockerfile制作Web应用系统nginx镜像,生成镜像nginx:v1.1,并推送其到私有仓库。 4、Dockerfile快速搭建自己专属的LAMP环境,生…

跨平台图表:ChartDirector for .NET 7.1 Crack

什么是新的 ChartDirector for .NET 7.0 支持跨平台使用,但仅限于 .NET 6。这是因为在 .NET 7 中,Microsoft 停止了用于非 Windows 使用的 .NET 图形库 System.Drawing.Common。由于 ChartDirector for .NET 7.0 依赖于该库,因此它不再支持 .…

小白到运维工程师自学之路 第七十九集 (基于Jenkins自动打包并部署Tomcat环境)1

一、传统的流程 1、传统网站部署的流程 在运维过程中,网站部署是运维的工作之一。传统的网站部署的流程大致分为:需求分 析-->原型设计-->开发代码-->提交代码-->内网部署-->内网测试-->确认上线-->备份数据-->外网更新-->外网测试--&g…

【ES6】—数组的扩展

一、类数组/ 伪数组 1. 类/伪数组: 并不是真正意义的数组,有长度的属性,但无法使用Array原型上的方法 let divs document.getElementsByTagName(div) console.log(divs) // HTMLCollection []let divs2 document.getElementsByClassName("xxx&q…

《操作系统真象还原》学习笔记:第七章 中断

由于 CPU 获知了计算机中发生的某些事,CPU 暂停正在执行的程序,转而去执行处理该事件的程序,当这段程序执行完毕后,CPU 继续执行刚才的程序。整个过程称为中断处理,也称为中断。 把中断按事件来源分类,来自…