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

news2024/9/24 4:25:25

目录

  • 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.0
    image = (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 dims
        keep_aspect_ratio     : True
        keep_ratio_mode       : letterbox
        pad_value             : 114
        pad_type              : center
        --------------------------
        mean                  : [125.0, 125.0, 125.0]
        scale                 : [0.008, 0.008, 0.008]
        --------------------------
        pixel_format          : rgb
        channel_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.coloradmin.cn/o/1143245.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

01. 嵌入式与人工智能是如何结合的?

CPU是Arm A57的 GPU是128cuda核 一.小车跟踪的需求和设计方法 比如有一个小车跟踪的项目。 需求是:小车识别出罪犯,然后去跟踪他。方法:摄像头采集到人之后传入到开发板,内部做一下识别,然后控制小车去跟随。在人工智…

Linux ———— 管理磁盘

(一)MBR硬盘与GPT硬盘 硬盘按分区表的格式可以分为MBR硬盘与GPT硬盘两种硬盘格式。 MBR 硬盘:使用的是旧的传统硬盘分区表格式,其硬盘分区表存储在MBR(Master Boot Record,主引导区记录)内。MBR位于…

为什么引入偏向锁、轻量级锁,介绍下升级流程

Synchronized Synchronized 在 jdk1.6 版本之前,是通过重量级锁的方式来实现线程之间锁的竞争。之所以称它为重量级锁,是因为它的底层底层依赖操作系统的 Mutex Lock 来实现互斥功能。(如图)Mutex 是系统方法,由于权限…

PN7727 集成驱动及四个开关管的无线充电发射端功率芯片 20W无线发射功率

PN7727是一款用于无线充电的智能功率芯片该芯片集成了驱动及四颗高效功率级场效应管内置自举高压PMOS和5V/50mA LDO,具备自适应死区功能。 该芯片集成了欠压保护、过温保护等功能。芯片的两个输入管脚PWM1和PWM2兼容5V和3.3v信号控制,具有良好的…

小黑子—spring:第一章 Bean基础

spring入门1.0 一 小黑子对spring基础进行概述1.1 spring导论1.2 传统Javaweb开发困惑及解决方法1.3 三大的思想提出1.3.1 IOC入门案例1.3.2 DI入门案例 1.4 框架概念1.5 初识spring1.5.1 Spring Framework 1.6 BeanFactory快速入门1.7 ApplicationContext快速入门1.8 BeanFact…

浅谈智慧空开在某市科技馆项目的应用-安科瑞 蒋静

【摘要】:ASCB1系列智能微型断路器是安科瑞电气股份有限公司全新推出的智慧用电产品,产品由智能微型断路器与智能网关两部分组成,可用于对用电线路的关键电气因素,如电压、电流、功率、温度、漏电、能耗等进行实时监测&#xff0c…

工业数字化转型中的控制塔BI

工业数字化转型是当前工业领域的一个重要趋势,它通过应用先进的信息技术和数据分析方法,推动传统制造业向智能化、高效化、可持续发展的方向转变。在工业数字化转型中,控制塔BI(Business Intelligence)扮演着重要的角色…

ant design vue 的getPopupContainer

在 ant design vue 中,有几个组件是有 getPopupContainer 属性的,比如:下拉菜单 默认是渲染到body 上的,所以如果你想要对 下拉选择组件 的样式,做修改,如果 style 标签上开启了 scoped,肯定不会…

快手极速版app拉新推广和抖音极速版app地推拉新,哪个收益更高?

抖音极速版和快手极速版可以通过“聚量推客”申请,是两个常年霸榜地推app拉新行业的项目,说他们是推广拉新行业的旗帜性项目,也丝毫不为过。许多推广员,就是从抖音极速版和快手极速版中间二选一,开启了自己的地推赚钱生…

jsp简单实现新闻发布系统中用户注册确认和用户模拟登录功能的开发

jsp简单实现新闻发布系统中用户注册确认和用户模拟登录功能的开发 <jsp:include page"common/top.jsp" /> 以及left和bottom为三个公共页面 主页面为index.jsp 简单的实现了可以设置用户名和登录等功能 Login.jsp <%page language"java" pa…

【ROS入门】机器人运动控制以及里程计信息显示

文章结构 运动控制实现流程&#xff08;Gazebo&#xff09;为joint添加传动装置以及控制器xacro文件集成启动gazebo并控制机器人运动 Rviz查看里程计信息启动Rviz添加组件 运动控制实现流程&#xff08;Gazebo&#xff09; 运动控制基本流程: 已经创建完毕的机器人模型&#x…

MySQL主从同步-binlog

MySQL主从同步-binlog 服务器准备 IP节点配置系统版本191.168.117.143master2c2g40gcentos 7.9192.168.117.142slave2c2g40gcentos 7.9 环境准备 下面操作需要在两台机器都操作 关闭防火墙 systemctl stop firewalld && systemctl disable firewalldsetenforce 0…

高可用系统架构——关于语雀宕机的思考

语雀系统崩溃了&#xff0c;并且经过8个多小时才恢复&#xff0c;估计语雀的小伙伴们已经哭晕在厕所里了。 本次稳定性故障再次给架构师敲响警钟&#xff1a;系统高可用一直是架构的重点&#xff0c;它涉及到系统的方方面面&#xff0c;并且是一件持续性的长期工作。 故障起因…

1200*A. Trust Nobody(贪心)

Problem - 1826A - Codeforces 解析&#xff1a; 从大到小枚举说谎人的个数x&#xff0c;然后查看是否有 x个人说谎即可。 #include<bits/stdc.h> using namespace std; #define int long long const int N2e55; int t,n,a[N]; signed main(){scanf("%lld",&a…

TS中类型别名和接口区别

在很多场景下&#xff0c;interface 和 type都能使用&#xff0c;因此两者在很多时候会被混淆&#xff1a; 接口可以通过之间的继承&#xff0c;实现多种接口的组合 使用类型别名也可以实现多种的&#xff0c;通过&连接,有差异&#xff1a; 子接口中不能重新覆盖父接口中…

安防监控项目---boa服务器的移植

文章目录 前言一、boa服务器简介二、移植步骤三、测试结果四、A9平台移植BOA总结 前言 书接上期&#xff0c;在配置完成环境后&#xff0c;那么接下来呢还得移植两个非常关键的东西&#xff0c;一个呢时boa服务器&#xff0c;另一个呢时cgi接口&#xff0c;boa服务器能够使得我…

医学影像乳腺肿瘤分割的同学看过来:PDPNet:用于通用乳腺肿瘤分割的渐进式双先验网络

PDPNet&#xff1a;一种渐进式双先验网络&#xff0c;可以来从动态增强的图像中分割乳腺肿瘤&#xff0c;性能表现SOTA&#xff01;并提高了模型的泛化能力&#xff0c;单位&#xff1a;贵州大学, 哈医大肿瘤医院, 贵州省人民医院 为了提高乳腺肿瘤分割模型的泛化能力&#xf…

中文编程工具免费版下载,中文开发语言工具免费版下载

中文编程工具免费版下载&#xff0c;中文开发语言工具免费版下载 中文编程工具开发的实际部分案例如下图 编程系统化课程总目录及明细&#xff0c;点击进入了解详情。 https://blog.csdn.net/qq_29129627/article/details/134073098?spm1001.2014.3001.5502

轻量封装WebGPU渲染系统示例<4>-CubeMap/天空盒(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/version-1.01/src/voxgpu/sample/ImgCubeMap.ts 此示例渲染系统实现的特性: 1. 用户态与系统态隔离。 2. 高频调用与低频调用隔离。 3. 面向用户的易用性封装。 4. 渲染数据和渲染机制分离。 5. 用户…

【linux】文件系统+软硬连接+动静态库

文件系统软硬连接动静态库 1.理解文件系统1.1磁盘的物理结构1.2磁盘的存储结构1.3磁盘的逻辑结构1.4文件系统 2.软硬链接2.1什么是软硬链接2.2软硬链接的作用 3.动静态库3.1什么是库3.1静态库和静态链接3.2动态库和动态链接3.2.1通过环境变量找到动态库路径3.2.2把动态库拷贝到…