TPU-MLIR实战——ResNet18部署

这篇具有很好参考价值的文章主要介绍了TPU-MLIR实战——ResNet18部署。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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 文件, 该文件是模型的输入文件。

TPU-MLIR实战——ResNet18部署,mlir

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

图片类型, 可以是rgbbgrgrayrgbd四种情况

output_names

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

该指定名称做输出

test_input

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

指定, 则不会正确性验证

test_result

指定验证后的输出文件

excepts

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

mlir

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

post_handle_type

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

ssd

5 MLIR转F32模型 

mlir文件转换成f32bmodel, 操作方法如下

$ 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 的文件。

TPU-MLIR实战——ResNet18部署,mlir

 6 MLIR转INT8模型

6.1生成校准表
    run_calibration.py resnet18.mlir \

      --dataset ../ILSVRC2012 \

      --input_num 100 \

      -o resnet18_cali_table

TPU-MLIR实战——ResNet18部署,mlir

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 

TPU-MLIR实战——ResNet18部署,mlir

 6.3INT8非对称量化模型
$ 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

TPU-MLIR实战——ResNet18部署,mlir

 7 测试

7.1 onnx模型测试

执行以下推理命令 

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

./calssify_resnet18.py 执行当前目录下的py文件

--model_def  模型参数,输入模型的位置,可以是onnx,bmodel

--input 输入图片

--output 输出路径

--category_file label的路径

7.2 Fp32模型测试

执行推理命令:

./classify_resnet18.py --model_def workspace/resnet18_1684x_f32.bmodel --input images/cat.jpg --output outputs/cat_f32.jpg  --category_file images/label.txt
7.3 INT8 对称模型测试
./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

8 结果对比

TPU-MLIR实战——ResNet18部署,mlir

onnx结果

TPU-MLIR实战——ResNet18部署,mlir

 F32结果

TPU-MLIR实战——ResNet18部署,mlir

INT8 对称量化结果

TPU-MLIR实战——ResNet18部署,mlir

 INT8 非对称量化结果文章来源地址https://www.toymoban.com/news/detail-524787.html

到了这里,关于TPU-MLIR实战——ResNet18部署的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 首个中文Stable Diffusion模型开源;TPU演进十年;18个PyTorch性能优化技巧 | AI系统前沿动态...

    1. TPU演进十年:Google的十大经验教训 希腊神话中,特洛伊战争的起因是两方争夺世界上最美的女人——海伦,后世诗人将海伦的美貌“令成千战舰为之起航”。TPU就像海伦,它的出现引起了“成千芯片与之竞逐”。 可以说,TPU的问世引发了硅谷的“地震”。TPU宣布诞生后,

    2024年02月09日
    浏览(57)
  • 【ResNet】Pytorch从零构建ResNet18

    第一章 从零构建ResNet18 第二章 从零构建ResNet50 ResNet 目前是应用很广的网络基础框架,所以有必要了解一下,并且resnet结构清晰,适合练手 pytorch就更不用多说了。( 坑自坑 ) 懂自懂 本文使用以下环境构筑 深度残差网络(Deep residual network, ResNet)的提出是CNN图像史上的一件里

    2024年02月03日
    浏览(36)
  • 【pytorch】ResNet18、ResNet20、ResNet34、ResNet50网络结构与实现

    选取经典的早期Pytorch官方实现代码进行分析 https://github.com/pytorch/vision/blob/9a481d0bec2700763a799ff148fe2e083b575441/torchvision/models/resnet.py 各种ResNet网络是由BasicBlock或者bottleneck构成的,它们是构成深度残差网络的基本模块 ResNet的大部分各种结构是1层conv+4个block+1层fc 需要注意的是最后

    2024年02月02日
    浏览(44)
  • ResNet18、50模型结构

    论文地址: https://arxiv.org/pdf/1512.03385.pdf pytorch官方 预训练模型 地址: pytorch官方 resnet网络 代码(包括resnet18、34、50、101、152,resnext50_32x4d、resnext101_32x8d、wide_resnet50_2、wide_resnet101_2): torchvision.models.resnet — Torchvision 0.11.0 documentation https://pytorch.org/vision/stable/_modules/torchvis

    2024年02月06日
    浏览(39)
  • ResNet18详细原理(含tensorflow版源码)

            ResNet18是一个经典的深度卷积神经网络模型,由微软亚洲研究院提出,用于参加2015年的ImageNet图像分类比赛。ResNet18的名称来源于网络中包含的18个卷积层。 ResNet18的基本结构如下: 输入层:接收大小为224x224的RGB图像。 卷积层:共4个卷积层,每个卷积层使用3x3的卷积

    2024年02月04日
    浏览(31)
  • 基于ResNet-18实现Cifar-10图像分类

    安耀辉,男,西安工程大学电子信息学院,22级研究生 研究方向:小样本图像分类算法 电子邮箱:1349975181@qq.com 张思怡,女,西安工程大学电子信息学院,2022级研究生,张宏伟人工智能课题组 研究方向:机器视觉与人工智能 电子邮件:981664791@qq.com CIFAR-10 数据集由 60000张图

    2024年02月06日
    浏览(44)
  • Resnet18训练CIFAR10 准确率95%

    准确率 95.31% 几个关键点: 1、改模型:原始的resnet18首层使用的7x7的卷积核,CIFAR10图片太小不适合,要改成3x3的,步长和padding都要一并改成1。因为图太小,最大池化层也同样没用,删掉。最后一个全连接层输出改成10。 2、图片增强不要太多,只要训练集和验证集结果没有出

    2024年02月02日
    浏览(38)
  • pytorch 手动顺序搭建resnet18、附带训练代码、测试代码

    文件名:mode_resnet18 去网上随便下载一张图

    2024年02月16日
    浏览(44)
  • Yolov5中使用Resnet18作为主干网络

    采用Resnet-18作为主干网络,首先第一件事情就要了解Resnet的网络结构 以及resnet-18中的残差层是做什么的 引入残差层是为了解决伴随着层数的递增,而出现的梯度消失的问题,从而引入了残差层即 在sigmoid中其激活函数 S ( x ) = 1 1 + e − x S ‘ ( x ) = S ( x ) ( 1 − S ( x ) ) S(x)=fra

    2023年04月08日
    浏览(33)
  • 【ResNet18】on IEMOCAP—语音情感识别(预处理篇)

    在开始模型训练前,一定要对数据处理熟悉!   一、预处理: 1、IEMOCAP语音数据部分 按照人(1F,1M,2F,2M,3F,3M,4F,4M,5F,5M): ang有语音数量:[147, 82, 67, 70, 92, 148, 205, 122, 78, 92] exc有语音数量:[63, 80, 96, 114, 48, 103, 154, 84, 82, 217] hap有语音数量:[69, 66, 70, 47, 80, 55, 31, 34, 77, 66] neu有语

    2024年02月08日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包