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.hqwc.cn/news/81719.html

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

相关文章

深度学习处理文本(NLP)

文章目录 引言1. 反向传播1.1 实例流程实现1.2 前向传播1.3 计算损失1.4 反向传播误差1.5 更新权重1.6 迭代1.7 BackPropagation & Adam 代码实例 2. 优化器 -- Adam2.1 Adam解析2.2 代码实例 3. NLP任务4. 神经网络处理文本4.1 step1 字符数值化4.2 step 2 矩阵转化为向量…

solidity0.8.0的应用案例11:透明代理合约

选择器冲突 智能合约中,函数选择器(selector)是函数签名的哈希的前4个字节。例如mint(address account)的选择器为bytes4(keccak256("mint(address)")),也就是0x6a627842. 由于函数选择器仅有4个字节,范围很小,因此两个不同的函数可能会有相同的选择器,例如…

CnetSDK .NET OCR SDK Crack

CnetSDK .NET OCR SDK Crack CnetSDK.NET OCR库SDK是一款高度准确的.NET OCR扫描仪软件,用于使用手写、文本和其他符号等图像进行字符识别。它是一款.NET OCR库软件,使用Tesseract OCR引擎技术,可将字符识别准确率提高99%。通过将此.NET OCR扫…

智慧党建VR虚拟3D数字化展厅发展和传承传统文化

三维全景虚拟现实技术应用在虚拟展馆中,主要是通过全景照片的虚拟与建模,营造出三维虚拟仿真的场景,从而结合展馆展示的需求,营造出更加有效的氛围,起到优化展示效果的作用。 三维全景虚拟现实技术的应用,能…

opencv 进阶16-基于FAST特征和BRIEF描述符的ORB(图像匹配)

在计算机视觉领域,从图像中提取和匹配特征的能力对于对象识别、图像拼接和相机定位等任务至关重要。实现这一目标的一种流行方法是 ORB(Oriented FAST and Rotated Brief)特征检测器和描述符。ORB 由 Ethan Rublee 等人开发,结合了…

8086汇编语言寄存器清零学习

mov ax, 0 这样应清零了; sub ax, ax 这样也清了; xor ax, ax 这样也清零了;自己跟自己异或,异或是同则结果为0、不同结果为1;自己和自己,每一位都是相同的,异或后结果为0; and …

【Java架构-包管理工具】-Maven进阶(二)

本文摘要 Maven作为Java后端使用频率非常高的一款依赖管理工具,在此咱们由浅入深,分三篇文章(Maven基础、Maven进阶、私服搭建)来深入学习Maven,此篇为开篇主要介绍Maven进阶知识,包含坐标、依赖、仓库、生…

Linux系统安装与配置Anaconda

Linux系统安装与配置Anaconda 下载Linux系统的Anaconda安装包安装Anaconda将Anaconda加入到环境变量测试Anaconda是否安装成功 下载Linux系统的Anaconda安装包 这里提供2种下载方式: 官网下载清华大学开源镜像软件 将下载的Anaconda包保存在Linux系统中。 安装A…

自动化部署及监测平台基本架构

声明 本文是学习 政务计算机终端核心配置规范. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 核心配置自动化部署及监测技术要求 自动化部署及监测平台基本架构 对于有一定规模的政务终端核心配置应用,需要配备自动化部署及监测平台&am…

Kubernetes(K8S)使用PV和PVC做存储安装mysql

Kubernetes使用PV和PVC做存储安装mysql 环境准备什么是PV和PVC环境准备配置nfs安装nfs配置nfs服务端 创建命名空间配置pv和pvcpv的yaml文件pvc的yaml文件 部署mysql创建mysql的root密码的secret创建mysql部署的yaml部署mysql链接mysql外部链接内部链接 环境准备 首先你需要一个…

计算机网络 QA

DNS 的解析过程 浏览器缓存。当用户通过浏览器访问某域名时,浏览器首先会在自己的缓存中查找是否有该域名对应的 IP 地址(曾经访问过该域名并且没有清空缓存)系统缓存。当浏览器缓存中无域名对应的 IP 地址时,会自动检测用户计算机…

opencv-dnn

# utils_words.txt 标签文件 import osimage_types (".jpg", ".jpeg", ".png", ".bmp", ".tif", ".tiff")def list_images(basePath, containsNone):# return the set of files that are validreturn list_file…