【TDA4板端部署】基于 Pytorch 训练并部署 ONNX 模型在 TDA4

1 将torch模型转onnx模型

Ti转换工具只支持以下格式:
Caffe - 0.17 (caffe-jacinto in gitHub)
Tensorflow - 1.12
ONNX - 1.3.0 (opset 9 and 11)
TFLite - Tensorflow 2.0-Alpha

基于 Tensorflow、Pytorch、Caffe 等训练框架,训练模型:选择一个训练框架,然后定义模型,最后使用训练的数据集训练出满足需求的模型。

2 onnx模型转bin模型

训练好的模型,需要使用 TIDLImporter 工具导入成可在 TIDL 上运行的模型。导入的主要目的是对输入的模型进行量化、优化并保存为TIDL 能够识别的网络模型和网络参数文件。
TIDL Importer 工具处理流程如下:
在这里插入图片描述

2.1 写配置文件

模型的导入需要模型导入配置文件,tidl_import_mobilenetv2.txt ,需要将其放在
${TIDL_INSTALL_PATH}/ti_dl/test/testvecs/config/import/public/onnx/路径下。导入的配置文件里面指定了模型配置参数,如果对参数有不清楚的地方参考链接 TIDL-RT Import Configuration Parameters:

具体包括:
Configuration Parameters for Input Pre-Processing
Configuration Parameters for path of different modules
Configuration Parameters related to TIDL-RT inference for quantization
Configuration Parameters for Graph Compiler
Configuration Parameters for format conversion

以ONNX Squeeze Net为例

modelType          = 2
inputNetFile      = "../../test/testvecs/models/public/onnx/squeezenet1.1.onnx"
outputNetFile      = "../../test/testvecs/config/tidl_models/onnx/tidl_net_squeezenet1.1.bin"
outputParamsFile   = "../../test/testvecs/config/tidl_models/onnx/tidl_io_squeezenet1.1_"
inDataNorm  = 1
inMean = 123.675 116.28 103.53
inScale = 0.017125 0.017507 0.017429
resizeWidth = 256
resizeHeight = 256
inWidth  = 224
inHeight = 224 
inNumChannels = 3
inData = ../../test/testvecs/config/imageNet_sample_val.txt
postProcType = 1

以tfLite为例

modelType          = 3
numParamBits      = 15
quantizationStyle  = 2
inputNetFile      = ../../test/testvecs/models/public/tflite/mobilenet_v1_1.0_224.tflite
outputNetFile      = "../../test/testvecs/config/tidl_models/tflite/tidl_net_tflite_mobilenet_v1_1.0_224.bin"
outputParamsFile   = "../../test/testvecs/config/tidl_models/tflite/tidl_io_tflite_mobilenet_v1_1.0_224_"
inDataNorm  = 1
inMean = 128 128 128
inScale =  0.0078125 0.0078125 0.0078125
resizeWidth = 256
resizeHeight = 256
inWidth  = 224
inHeight = 224 
inNumChannels = 3
inData = ../../test/testvecs/config/imageNet_sample_val_bg.txt
postProcType = 1

2.2 执行模型转换命令

在 Ubuntu 命令行执行下面命令导入模型:

user@ubuntu-pc$ 
cd /home/fredy/startJacinto/sdks/ti-processor-sdk-rtos-j721e-evm-08_
01_00_11/tidl_j7_08_01_00_05/ti_dl/utils/tidlModelImport./out/tidl_model_import.out /home/fredy/startJacinto/sdks/ti-processor-sdk-rtos-j721
e-evm-08_01_00_11/ tidl_j7_08_01_00_05/ti_dl/test/testvecs/config/import/public/onnx/tidl_import_mobilenetv2.txt(配置文件) 

Ubuntu 命令行执行上述命令输出的 log中,结尾输出 ALL MODEL CHECK PASSED 说明模型导入成功。

2.3 查看模型转换结果

模型导入使用 tidl_model_import.out 工具,该工具导入输入的模型(ONNX 模型),输出能够为 TIDL所使用的网络模型和参数文件(TIDL Network FileTIDL IO Info File),输入输出文件如下:

  • TF Model (Proto) File : …/…/test/testvecs/models/public/onnx/mobilenetv2/
    mobilenetv2.onnx
  • TIDL Network File : …/…/test/testvecs/config/tidl_models/onnx/tidl_ne
    t_mobilenetv2.bin
  • TIDL IO Info File : …/…/test/testvecs/config/tidl_models/onnx/tidl_io
    _mobilenetv2

3 模型 PC 推理

这一小节,将使用上一章节生成的模型文件(TIDL Network File 和 TIDL Network File )验证模型的正确性。
TIDL Network File : …/…/test/testvecs/config/tidl_models/onnx/tidl_net_mobilenetv2.bin
TIDL IO Info File : …/…/test/testvecs/config/tidl_models/onnx/tidl_io_mobilenetv2

3.1 PC上验证并部署

经过TIDL tidl_model_import.out 工具导入 tensorflow 模型,我们可以快速利用 Ubuntu 的工具PC_dsp_test_dl_algo.out 进行推理验证结果。PC_dsp_test_dl_algo.out 需要配置文件testvecs/config/infer/public/onnx/tidl_infer_mobilenetv2.txt(相关参数的解释,请参考这里)

Configuration files used for validation of models are provided in the “ti_dl/test/testvecs/config/infer/” folder for reference

Below is one example configuration file for Inference

inFileFormat    = 2
postProcType = 1
numFrames   = 1
netBinFile      = "../testvecs/config/tidl_models/tidl_net_jacintonet11v2_np2quant.bin"
ioConfigFile    = "../testvecs/config/tidl_models/tidl_io_jacintonet11v2_np2quant_1.txt"
inData  =   "../testvecs/config/classification_list.txt"
outData =   "../testvecs/output/airshow_j11.bin"

On Successful execution the output tensor will be generated in as binary raw file in the path specified by “outData”.

3.2 EVM 上验证并部署

模型在 PC 验证后,最终可以部署在 EVM 上进行性能和结果测试。如果觉得 PC 验证会浪费时间,可以省略 PC 验证的步骤,完成模型的导入后,就可以直接在 EVM 上验证。

经过 TIDL tidl_model_import.out 工具导入的 ONNX 模型,在 EVM 上,使用
TI_DEVICE_a72_test_dl_algo_host_rt.out 工具进行推理测试。该工具不仅可以测试使用模型的正确性,还可以测试真实的帧率。 经 TI_DEVICE_a72_test_dl_algo_host_rt.out 处理后,输出图像存储在/opt/tidl_test/testvecs/output,可将数据导入到 PC 确认其结果。

基于 EVM 进行推理确认其正确性后,模型可以部署到应用。

4 FAQ

4.1 SDK 中 TIDL 支持哪些算子?

TIDL 支持的算子请参考使用版本的 UserGuide,参考链接。

4.2 SDK 中 ONNX 支持和验证的模型有哪些?

TIDL 提供了支持的模型库,用户可以参考模型库中的模型快速进行模型进行验证,并参考模型
进行新的模型设计。模型库参考链接。

4.3 如果遇到 performance 问题,如何进行调试?

Performance 的问题请参考链接的建议进行调试。

4.4 TIDL Importer 工具导入 ONNX 模型需要注意哪些方面?

ONNX 模型可以直接导入 TIDL,TIDL Importer 工具输入配置文件路径在:TIDL_PATH
/ti_dl/test/testvecs/config/import/public/tensorflow/tidl_import_xxx.txt。对于 import 配置文件注意检查如下内容:

 1. 导入的 modelType:ONNX 模型配置为 2 (.onnx files). 2. inputNetfile/outputNetFile: 检查输入/输出模型文件的路径。3. inData: 输入数据的配置,通常自己的模型,需要调整输入图片。4. inWidth/inHeight/resizeWidth/resezeHeight :配置图片输入的 size 及调整后的 size。5. inNumChannels : 输入图片通道数。

4.5 TIDL 如何打印 log 信息?

不论是 Import 模型的时候,还是 inference 的时候,难免会遇到问题,当遇到问题的时候,怎么样才
能输出更多的调试信息呢? TIDL 提供了两个标志变量 writeTraceLevel 和 debugTraceLevel 用来获取更多的信息。
debugTraceLevel 可以打印更多的输出信息,便于追踪 import 和 inference 的过程。默认配置是 0,可支持 1、2 配置。数字越大,表明输出的信息越多。
writeTraceLevel 可以输出每一层的信息到文件,便于模型逐层比较。默认配置是 0,没有输出,可支
持 1、2、3 配置:1- Fixed Point , 2- Padded Fixed Point, 3 - Floating point。

5 参考

  1. https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtosjacinto7/08_01_00_11/exports/docs/tidl_j7_08_01_00_05/ti_dl/docs/user_guide_html/usergroup0.html
  2. https://www.ti.com.cn/cn/lit/an/zhcab78/zhcab78.pdf

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

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

相关文章

多多OJ评测系统 前端项目环境初始化 安装Vue脚手架 引入Arco Design组件

目录 确定环境 命令行输入 装一下脚手架 监测一下是否安装成功 创建一个项目 选择一系列的配置后 我们打开webStorm 配置脚手架后我们先运行 我们这边能获取到网址 其实我们脚手架已经帮我们做到了 接下来要引入相关的组件 选择用npm进行安装 我们建议的是完整引入…

姓名配对测试源码

源码简介 姓名配对测试源码,输入两人姓名即可测试缘分,可查看朋友到底喜欢谁的趣味源码。 自己手动在数据库里修改数据,数据库里有就会优先查询数据库的信息, 没设置的话第一次查询缘分都是非常好的 95-99,第二次查…

Spring Web MVC(常用的注解@RequestMapping,@RequestParam,@RequestBody等)

一、Spring MVC spring的启动类 启动类是看这个 SpringBootApplication 注解,而不是 类的名字 这个注解在哪,哪个类就是启动类 1.MVC思想 举例 二、Spring MVC mvc 是一种思想,而spring mvc是对mvc思想的一种实现。全称是 spring web mvc…

pytorch学习(四)绘制loss和correct曲线

这一次学习的时候静态绘制loss和correct曲线,也就是在模型训练完成后,对统计的数据进行绘制。 以minist数据训练为例子 import torch from torch import nn from torch.utils.data import DataLoader from torchvision import datasets from torchvisi…

Prometheus智能化监控介绍

Prometheus智能化监控介绍 官方网站特点:样本 Prometheus组件Prometheus工作流程Prometheus和zabbix对比分析Prometheus的几种部署模式Prometheus的四种数据类型CounterGaugehistogram为什需要用histogram柱状图? summary Prometheus对kubernetes的监控介…

文献阅读:tidyomics 生态系统:增强组学数据分析

文献介绍 文献题目: The tidyomics ecosystem: enhancing omic data analyses 研究团队: Stefano Mangiola(澳大利亚沃尔特和伊丽莎霍尔医学研究所)、Michael I. Love(美国北卡罗来纳大学教堂山分校)、Ant…

C#开发:PowerDesigner建表和Navicat导入数据

一、打开Powerdesigner,新建一个模型,点击ok 二、用工具面板拖拽出一个数据表 (如果没有工具面板,请在如下操作中开启) 三、双击刚刚的拖拽出来的表,设计表的字段,可以添加注释说明 【备注】…

基于Vue CLI 3构建Vue3项目(Vue2也可参考)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

完美解决An error occurred while starting the kernel的正确解决方法,亲测有效!!!

完美解决An error occurred while starting the kernel的正确解决方法,亲测有效!!! 亲测有效 完美解决An error occurred while starting the kernel的正确解决方法,亲测有效!!!报错…

03 Git的基本使用

第3章:Git的基本使用 一、创建版本仓库 一)TortoiseGit ​ 选择项目地址,右键,创建版本库 ​ 初始化git init版本库 ​ 查看是否生成.git文件(隐藏文件) 二)Git ​ 选择项目地址&#xff0c…

Chromium CI/CD 之Jenkins实用指南2024- Windows节点开启SSH服务(七)

1.引言 在现代软件开发和持续集成的过程中,自动化部署和远程管理是不可或缺的关键环节。SSH(Secure Shell)协议以其强大的安全性和灵活性,成为连接和管理远程服务器的首选工具。对于使用Windows虚拟机作为Jenkins从节点的开发者而…

【2024】springboot Home F家居系统的设计与管理

博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

关于python拓展屏使用pyautogui.screenshot无法截图的问题

🏆本文收录于《CSDN问答解答》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&…

逆向案例二十三——请求头参数加密,某区块链交易逆向

网址:aHR0cHM6Ly93d3cub2tsaW5rLmNvbS96aC1oYW5zL2J0Yy90eC1saXN0L3BhZ2UvNAo 抓包分析,发现请求头有X-Apikey参数加密,其他表单和返回内容没有加密。 直接搜索关键字,X-Apikey,找到疑似加密位置,注意这里…

【SLAM评估指标介绍】—— SLAM精度的评估的几种指标介绍

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言1.ATE/APE2.RPE(Relative Pose Error)3. 具体的指标介绍4. 总结 前言 SLAM(同步定位与地图构建)技术的精度评估对其可靠性和性能至关重…

p19 C语言操作符详解

算术操作符 1.除了%操作符之外&#xff0c;其他的几个操作符可以作用于整数和浮点数。 2.对于/操作符如果两个操作数都为整数&#xff0c;执行整数除法。而只要有浮点数值型的就是浮点除法。 3.%操作符的两个操作数必须为 整数。返回的是整除之后的余数。 #include<std…

老板电器营收增速放缓毛利率下滑,AI大模型“食神”能否拯救?

《港湾商业观察》施子夫 日前&#xff0c;杭州老板电器股份有限公司&#xff08;以下简称&#xff0c;老板电器&#xff1b;002508.SZ&#xff09;发布AI烹饪大模型“食神”&#xff0c;吸引外界不少眼球。在厨电领域&#xff0c;老板电器尝试将AI带进厨房。 回顾过去&#x…

IntelliJ IDEA 使用maven构建项目时一直卡在Compiling 阶段

IntelliJ IDEA 使用maven构建项目时一直卡在Compiling 阶段 1. maven log [DEBUG] incrementalBuildHelper#beforeRebuildExecution [INFO] Compiling 56 source files to D:\code\short-url\target\classes...2. 增加日志级别 通过添加 -X 参数到 Maven 命令中&#xff08;例…

Linux - 基础开发工具(yum、vim、gcc、g++、make/Makefile、git、gdb)

目录 Linux软件包管理器 - yum Linux下安装软件的方式 认识yum 查找软件包 安装软件 如何实现本地机器和云服务器之间的文件互传 卸载软件 Linux编辑器 - vim vim的基本概念 vim下各模式的切换 vim命令模式各命令汇总 vim底行模式各命令汇总 vim的简单配置 Linux编译器 - gc…

OpenAI训练数据从哪里来、与苹果合作进展如何?“ChatGPT之母”最新回应

7月9日&#xff0c;美国约翰霍普金斯大学公布了对“ChatGPT之母”、OpenAI首席技术官米拉穆拉蒂&#xff08;Mira Murati&#xff09;的采访视频。这场采访时间是6月10日&#xff0c;访谈中&#xff0c;穆拉蒂不仅与主持人讨论了OpenAI与Apple的合作伙伴关系&#xff0c;还深入…