【SOPHON】算能盒子SE-16的C++模型转换

目录

  • ONNX转MLIR
  • 指定模型的预处理过程
  • 转换结果

本文以 arcface 为例, 介绍如何编译迁移一个onnx模型至TPU平台运行。
有疑问具体可参考 TPU-MLIR

ONNX转MLIR

如果模型是图片输入, 在转模型之前我们需要了解模型的预处理。如果模型用预处理后的npz文件做输入, 则不需要考虑预处理。 预处理过程用公式表达如下:
在这里插入图片描述
官网yolov5的图片是rgb, 每个值会乘以 1/255 , 转换成mean和scale对应为 0.0,0.0,0.0 和 0.0039216,0.0039216,0.0039216 。

模型转换示例命令如下:

$ model_transform.py \--model_name yolov5s \--model_def ../yolov5s.onnx \--input_shapes [[1,3,640,640]] \--mean 0.0,0.0,0.0 \--scale 0.0039216,0.0039216,0.0039216 \--keep_aspect_ratio \--pixel_format rgb \--output_names 350,498,646 \--test_input ../image/dog.jpg \--test_result yolov5s_top_outputs.npz \--mlir yolov5s.mlir

参数表:
在这里插入图片描述

指定模型的预处理过程

    imagenet_mean = [0.5, 0.5, 0.5]imagenet_std = [0.5, 0.5, 0.5]image = cv2.imread(image, cv2.IMREAD_COLOR)image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)image = image / 255.0image = (image - imagenet_mean) / imagenet_std

模型的输入是:1, 3, 112, 112
由上可知,模型接收的是rgb图片

image = (image / 255.0 - imagenet_mean) / imagenet_std
=(image - imagenet_mean*255.0) / (imagenet_std*255.0)
=(image - imagenet_mean*255.0) *(1/(imagenet_std*255.0))

对应有:

#!/bin/bash
source /workspace/tpu-mlir_v1.2.8-g32d7b3ec-20230802/envsetup.sh
/workspace/tpu-mlir_v1.2.8-g32d7b3ec-20230802/python/tools/model_transform.py \--model_name arcface512 \--model_def /workspace/sdk/myarcface/model/arcface1.onnx \--input_shapes [[1,3,112,112]] \--mean 125.0,125.0,125.0 \--scale 0.008,0.008,0.008 \--keep_aspect_ratio \--pixel_format rgb \--output_names prob \--pad_type center \--pad_value 114 \--mlir arcface512.mlir

注:算能不推荐使用动态batch,会损失性能
–keep_aspect_ratio出现即生效

注:opencv的内存排布

实际上,在OpenCV中,图像的维度顺序是(height, width, channels),其中height表示图像的高度,width表示图像的宽度,channels表示图像的通道数。这个顺序是按照常见的习惯和约定来定义的,使得在处理图像时能更加直观和方便地使用。所以,正确的顺序是先高度再宽度,

转换结果

2023/10/27 17:50:57 - INFO : _____________________________________________________ | preprocess:                                           ||   (x - mean) * scale                                  |'-------------------------------------------------------'config Preprocess args : resize_dims           : same to net input dimskeep_aspect_ratio     : Truekeep_ratio_mode       : letterboxpad_value             : 114pad_type              : center--------------------------mean                  : [125.0, 125.0, 125.0]scale                 : [0.008, 0.008, 0.008]--------------------------pixel_format          : rgbchannel_format        : nchw--------------------------------
Before assigning input_shape:
True
True
Run onnxsim 1 times, model simplified: True
--------------------------------
After assigning input_shape:
True
True
Run onnxsim 1 times, model simplified: True
--------------------------------
Save mlir file: arcface512_origin.mlir
[Running]: tpuc-opt arcface512_origin.mlir --shape-infer --canonicalize --extra-optimize -o arcface512.mlir 
[Success]: tpuc-opt arcface512_origin.mlir --shape-infer --canonicalize --extra-optimize -o arcface512.mlir 
Mlir file generated:arcface512.mlir

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

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

相关文章

RabbitMQ初入门

1、RabbitMQ是什么 RabbitMQ是“实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均…

创纪录的1亿RPS DDoS攻击利用HTTP/2快速重置漏洞

导语:最近,一项创纪录的DDoS攻击引起了广泛关注。攻击者利用了HTTP/2协议中的一个快速重置漏洞,发起了一系列超大规模的攻击。本文将为大家详细介绍这次攻击的背景、影响以及应对措施。 攻击背景 最近,全球范围内遭受了一系列规模…

Java提升技术,进阶为高级开发和架构师的路线

原文网址:Java提升技术,进阶为高级开发和架构师的路线-CSDN博客 简介 Java怎样提升技术?怎样进阶为高级开发和架构师?本文介绍靠谱的成长路线。 首先点明,只写业务代码是无法成长技术的。提升技术的两个方法是&…

「林曦的亲子美育」讲讲关于阅读的那些事儿

「林曦的亲子美育」是“林曦的小世界”2023年策划的一档新栏目。林曦老师作为一个“小男生的妈妈”,在这些年分享了许多关于亲子教育的心得:以“美”作为连接和最高标准,会护持着小朋友的选择和人生。教育是一个生活的过程。做一餐饭、读一本书、看一张画…

网盘限速问题解析:哪家网盘真的不限速?

天下苦网盘限速久矣。市面上一些网盘工具要不然是收费限流,要不然是需要额外购买下载券。哪家网盘真的不限速? Zoho Workdrive 企业网盘是真正的不限速网盘,上传和下载文件都不限速,真正做到用户的网速有多快,下载就有…

YOLOv7优化:渐近特征金字塔网络(AFPN)| 助力小目标检测

💡💡💡本文改进:渐近特征金字塔网络(AFPN),解决多尺度削弱了非相邻 Level 的融合效果。 AFPN | 亲测在多个数据集能够实现涨点,尤其在小目标数据集。 收录: YOLOv7高阶自研专栏介绍: http://t.csdnimg.cn/tYI0c ✨✨✨前沿最新计算机顶会复现 🚀🚀🚀…

多线程---线程安全问题及解决

文章目录 一个线程不安全的案例造成线程不安全的原因抢占式执行多个线程修改同一个变量修改操作不是原子的内存可见性问题指令重排序问题 如何让线程变得安全?加锁volatile 一个线程不安全的案例 题目:有较短时间让变量count从0加到10_0000 解决方案&a…

myTracks for Mac:GPS轨迹记录器的强大与便捷

你是否曾经在户外活动或旅行中,希望能够记录下你的移动轨迹?或者在工作中,需要跟踪你的行程路线?myTracks for Mac 是一款强大的 GPS 轨迹记录器,它可以帮助你实现这些愿望。 myTracks 是一款专门为 Mac 设计的 GPS 轨…

[量化投资-学习笔记002]Python+TDengine从零开始搭建量化分析平台-MA均线的多种实现方式

MA 均线时最基本的技术指标,也是最简单,最不常用的(通常使用EMA、SMA)。 以下用两种不同的计算方法和两种不同的画图方法进行展示和说明。 MA 均线指标公式 MA (N)(C1 C2 C3 …C N )/N目录 方式一1.SQL 直接查询均值2.使用 pyp…

LLM系列 | 22 : Code Llama实战(下篇):本地部署、量化及GPT-4对比

引言 模型简介 依赖安装 模型inference 代码补全 4-bit版模型 代码填充 指令编码 Code Llama vs ChatGPT vs GPT4 小结 引言 青山隐隐水迢迢,秋尽江南草未凋。 小伙伴们好,我是《小窗幽记机器学习》的小编:卖热干面的小女孩。紧接…

BUUCTF zip伪加密 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 下载附件,得到一个zip压缩包。 密文: 解题思路: 1、刚开始尝试解压,看到了flag.txt文件,但需要解压密码。结合题目,确认这是zip伪加密&#…

Git Gui使用技巧

资料 https://www.runoob.com/w3cnote/git-gui-window.html 操作过程 创建仓库→添加远程仓库→扫描目录→文件移动→提交→上传 注意填注释 文件忽略 创建文件.gitignore→编写内容 *.log #文件 config.ini #文件 temp/ #目录