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

news2024/9/22 13:36:13

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://www.coloradmin.cn/o/1932862.html

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

相关文章

Hadoop3:HDFS存储优化之小文件归档

一、情景说明 我们知道,NameNode存储一个文件元数据,默认是150byte大小的内存空间。 那么,如果出现很多的小文件,就会导致NameNode的内存占用。 但注意,存储小文件所需要的磁盘容量和数据块的大小无关。 例如&#x…

【5G Sub-6GHz模块】专为IoT/eMBB应用而设计的RG520NNA、RG520FEB、RG530FNA、RG500LEU 5G模组

推出全新的5G系列模组: RG520NNADB-M28-SGASA RG520NNADA-M20-SGASA RG520FEBDE-M28-TA0AA RG530FNAEA-M28-SGASA RG530FNAEA-M28-TA0AA RG500LEUAA-M28-TA0AA ——明佳达 1、5G RG520N 系列——专为IoT/eMBB应用而设计的LGA封装模块 RG520N 系列是一款专为 IoT…

Kafka Producer发送消息流程之Sender发送线程和在途请求缓存区

文章目录 1. Sender发送数据1. 发送数据的详细过程:2. 关键参数配置 2. 在途请求缓存区 1. Sender发送数据 Sender线程负责将已经在RecordAccumulator中准备好的消息批次发送到Kafka集群。虽然消息在RecordAccumulator中是按照分区组织的,但Sender线程在…

百日筑基第二十三天-23种设计模式-创建型总汇

百日筑基第二十三天-23种设计模式-创建型总汇 前言 设计模式可以说是对于七大设计原则的实现。 总体来说设计模式分为三大类: 创建型模式,共五种:单例模式、简单工厂模式、抽象工厂模式、建造者模式、原型模式。结构型模式,共…

【JavaEE】synchronized原理详解

本文使用的是JDK1.8 目录 引言 Java对象在JVM的结构 对象头 Mark Word Monitor Owner EntryList WaitSet 加锁过程 锁消除 偏向锁 偏向锁使用 重偏向 撤销偏向 轻量级锁 重量级锁 自旋优化 引言 对于synchronized原理讲解之前,我们需要知道Java对象…

如何通过DBC文件看懂CAN通信矩阵

实现汽车CAN通信开发,必不可少要用到DBC文件和CAN通信矩阵。 CAN通信矩阵是指用于描述 CAN 网络中各个节点之间通信关系的表格或矩阵。它通常记录了每个节点能够发送和接收的消息标识符(ID)以及与其他节点之间的通信权限。 通信矩阵在 CAN 网…

Redis中数据分片与分片策略

概述 数据分片是一种将数据分割并存储在多个节点上的技术,可以有效提高系统的扩展性和性能。在Redis中,数据分片主要用于解决单个实例存储容量和性能瓶颈的问题。通过将数据分散存储到多个Redis节点中,可以将负载均衡到不同的服务器上&#…

防火墙之双机热备篇

为什么要在防火墙上配置双机热备技术呢? 相信大家都知道,为了提高可靠性,避免单点故障 肯定有聪明的小伙伴会想到那为什么不直接多配置两台防火墙,然后再将他们进行线路冗余,不就完成备份了吗? 答案是不…

UDP客户端、服务端及简易聊天室实现 —— Java

UDP 协议(用户数据包协议) UDP 是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接,简单来说,当客户端向接收端发送数据时,客户端不会确认接收端是否存在,就会发出…

【深度学习教程】

文章目录 pytorch官方教程知识蒸馏:https://pytorch.org/tutorials/beginner/knowledge_distillation_tutorial.html 李宏毅-机器学习/深度学习https://speech.ee.ntu.edu.tw/~hylee/ml/2021-spring.phphttps://speech.ee.ntu.edu.tw/~hylee/ml/2022-spring.phphttp…

深入解析公有IP与私有IP:地址分配与使用限制

IP地址在网络基础设施的建设和维护过程中起着至关重要的作用。作为IP地址的两大类型,公有IP和私有IP各自具有独特的分配机制和使用限制。本文将详细分析两者之间的区别,以帮助读者更好地理解和使用IP地址。 1. 公有IP与私有IP概述 IP地址是网络中的唯一…

Spring Boot 中使用 Resilience4j 实现弹性微服务的简单了解

1. 引言 在微服务架构中,服务的弹性是非常重要的。Resilience4j 是一个轻量级的容错库,专为函数式编程设计,提供了断路器、重试、舱壁、限流器和限时器等功能。 这里不做过多演示,只是查看一下官方案例并换成maven构建相关展示&…

hexo搭建博客(github node git )(失败版本)

HexoGitHub搭建个人博客教程(2023最新版) 搭建失败了 是因为git命令一直报错 打算明天把git和node版本全部重新安装后再弄 同时回顾一下github git 和 node的基础知识 Github新手之路(全过程)(站在前辈的肩膀上的总…

使用 ABBYY FineReader PDF 15 在创建或转换 PDF 时自动生成书签

使用 ABBYY 为 PDF 文件添加书签,可以帮助快速定位文档中的主要内容,也能更方便的梳理出一份文档大纲。 有很多 PDF 文件在创建时并没有编辑书签,这里介绍使用 ABBYY FineReader PDF 15(Win 系统)在 PDF 中自动添加书…

两大国产多模态大模型推荐

GLM-4V 智谱AI 开放平台提供一系列具有不同功能和定价的大模型,包括通用大模型、超拟人大模型、图像大模型、向量大模型等,并且支持使用您的私有数据对模型进行微调。GLM-4V 就是在不牺牲任何NLP任务性能的情况下,实现了视觉语言特征的深度融…

网络编程-TCP/IP

网络概述 网络采用分而治之的方法设计,将网络的功能划分为不同的模块,以分层的形式有机组合在一起。 每层实现不同的功能,其内部实现方法对外部其他层次来说是透明的。每层向上层提供服务,同时使用下层提供的服务 网络体系结构…

【LeetCode】删除排序链表中的重复元素 II

目录 一、题目二、解法完整代码 一、题目 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。 示例 1: 输入:head [1,2,3,3,4,4,5] 输出:[1,2,5] 示例 …

WEB前端06-DOM对象

BOM浏览器对象模型 浏览器对象模型:将浏览器的各个组成部分封装成对象。是用于描述浏览器中对象与对象之间层次关系的模型,提供了独立于页面内容、并能够与浏览器窗口进行交互的对象结构。 组成部分 Window:浏览器窗口对象 Navigator&…

win11局域网共享打印机或者文件提示:\\计算机名 无法访问。你可没有权限使用网络资源。请与这台服务器的管理员联系以查明你是香有访问权限。网络不存在或尚未启动。解决方法

win11局域网共享打印机或者文件提示:\\计算机名 无法访问。你可没有权限使用网络资源。请与这台服务器的管理员联系以查明你是香有访问权限。网络不存在或尚未启动。 是因为win11更新会默认关闭不安全的SMB1协议,导致局域网共享不可用。既然这样&#xf…

Web开发:四角线框效果(HTML、CSS、JavaScript)

目录 一、实现效果 二、完整代码 三、页面准备 1、页面结构 2、初始样式 3、现有效果 三、线框实现 1、需求分析 2、线框结构 3、线框大小 4、线框位置 5、线框样式 6、移动线框 7、添加过渡效果 8、使用CSS变量 一、实现效果 如下图所示,当鼠标移动…