[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文件中查找到。


五、效果图如下


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

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值