栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Python

[TI TDA4 J721E]YOLOX 模型训练结果导入及平台移植应用

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

[TI TDA4 J721E]YOLOX 模型训练结果导入及平台移植应用

        首先感谢阅读,如果您也对TDA4相关的开发感兴趣,我们这边有个学习交流微信群,可以入群和大家一起交流学习。

资历较浅,水平有限,如遇错误,请大家多指正!

保持开源精神,共同分享、进步!

博主WX : AIR_12  我会拉你入群。

链接:TDA4 相关专栏        链接:TDA4  Demo  Gitee开源库

欢迎大家加入,一起维护这个开源库,给更多的朋友提供帮助。


前段时间完成了Yolov5的模型导入和移植,有兴趣的可以看下这里:

[TI TDA4 J721E]YOLOV5 模型训练结果导入及平台移植应用_AIRKernel的博客-CSDN博客

SDK 版本 0802

一、YOLOX onnx模型的获取和导入

Ti官方在yolo官方的基础上,对yolo进行了一些修改,主要是为了适配训练生成的网络中有一些层,在TIDL模块内无法运行。

TI官方提供的 edgeai-yolox:

https://github.com/TexasInstruments/edgeai-yoloxhttps://github.com/TexasInstruments/edgeai-yolox可以在官方提供的基础上,训练自己的模型,并将 *.pth 权重文件,使用export_onnx.py文件导出为 onnx文件和prototxt文件。

注意:TI官方提供的yolox 预训练模型 onnx及 prototxt 下载地址:

https://github.com/TexasInstruments/edgeai-modelzoo/tree/master/models/vision/detection/coco/edgeai-yoloxhttps://github.com/TexasInstruments/edgeai-modelzoo/tree/master/models/vision/detection/coco/edgeai-yolox

 进入每个link文件下载即可。

原生yolox

https://github.com/Megvii-BaseDetection/YOLOX


二、转换流程(同yolov5转换过程)

步骤(主要在PC端完成):

        1、将下载好的onnx和prototxt文件拷贝到对应文件夹

        2、新建一个转换配置文件,用于指定模型相关属性、源文件路径、生成模型存储路径等

        3、执行importer 操作,生成转换完成的bin文件

        4、PC端观察是否生成正确,并验证

具体参考流程,仿照YOLOV5模型的转换流程,有很详细的说明。

[TI TDA4 J721E]YOLOV5 模型训练结果导入及平台移植应用_AIRKernel的博客-CSDN博客


三、重点的转换配置文件!!!

我使用的是yolox_m_ti_lite_45p5_64p2.onnx 和 yolox_m_ti_lite_metaarch.prototxt 文件,具体的转化配置文件,如下:

modelType          = 2
numParamBits       = 8
numFeatureBits     = 8
quantizationStyle  = 3

inputNetFile       = "../../test/testvecs/models/public/onnx/yolox_m_ti_lite_45p5_64p2.onnx"
outputNetFile      = "../../test/testvecs/config/tidl_models/onnx/yolox_m_ti_lite_45p5_64p2/tidl_net_yolox_m_ti_lite_45p5_64p2.bin"
outputParamsFile   = "../../test/testvecs/config/tidl_models/onnx/yolox_m_ti_lite_45p5_64p2/tidl_io_yolox_m_ti_lite_45p5_64p2_"
inDataNorm  = 1
inMean = 0 0 0
inScale = 1.0 1.0 1.0
inDataFormat = 1
inWidth  = 640
inHeight = 640 
inNumChannels = 3
numFrames = 1
inData  =   "../../test/testvecs/config/detection_list.txt"
perfSimConfig = ../../test/testvecs/config/import/device_config.cfg
inElementType = 0
#outDataNamesList = "convolution_output,convolution_output1,convolution_output2"
metaArchType = 6
metaLayersNamesList =  "../../test/testvecs/models/public/onnx/yolox_m_ti_lite_metaarch.prototxt"
postProcType = 2

需要注意,重点要修改三个地方,如下:

1、quantizationStyle = 3 量化风格

这里需要设置为3,下图是两种不同的值转换过后的对比,区别还是很明显的。

如果大家遇到转换过程中,量化后检测不准或者检测失真情况,可以看一下这个帖子。

TDA4VM: Using the 8bit method to quantify the yolox model causes the large target detection position becomes smaller - Processors forum - Processors - TI E2E support forums

 quantizationStyle = 2(PC端模拟推理的结果)

quantizationStyle = 3(PC端模拟推理的结果)

2、inScale = 1.0 1.0 1.0

从yolov3 拷贝过来的转换配置文件内,

inScale = 0.003921568627 0.003921568627 0.003921568627

但在yolox中需要将inScale设置为:

inScale = 1.0 1.0 1.0

具体原因,目前还没有深究,等到弄明白了,再更新!

3、metaArchType = 6

yolov3中的配置文件,metaArchType = 4 ,在yolox中转化内的时候,需要设置为 metaArchType = 6

TI的工程师,给的回复是这两个帖子里面找:

edgeai-benchmark/benchmark_custom.py at master · TexasInstruments/edgeai-benchmark · GitHub

edgeai-benchmark/detection.py at master · TexasInstruments/edgeai-benchmark · GitHub

我还没有详细研究,目前先放在这里,后面再详细研究。

需要重点参考yolov5的转换过程!!!


四、将生成的bin文件拷贝到SD对应的模型目录中使用

将生成的文件,拷贝到EVM的SD卡对应模型存放路径:

tidl_io_yolox_m_ti_lite_45p5_64p2__1.bin :这个是网络输入的配置文件

tidl_net_yolox_m_ti_lite_45p5_64p2.bin:这个是网络的模型数据

测试工程(我会把模型及转换文件同步过去):

​​​​​​​TI TDA4: 提供TDA4交流学习平台 - Gitee.com

接将配置文件里面的网络输入和配置文件输入,修改成yolox的bin文件即可(其他模型,根据需要自行调整)

 注意:需要将 dl_size 修改为模型实际输入的大小,这个可以在yolox_m_ti_lite_metaarch.prototxt文件中查找到。


五、效果图如下


 【声明】
【欢迎转载转发,请注明出处。原创比较辛苦,请尊重原创,祝大家学习愉快!】
【博主专注嵌入式开发,具有多年嵌入式软、硬件开发经验,欢迎大家学习交流!】
【如有嵌入式相关项目需求,欢迎私信】

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1037104.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号