首先感谢阅读,如果您也对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 = 6yolov3中的配置文件,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文件中查找到。
五、效果图如下
【声明】
【欢迎转载转发,请注明出处。原创比较辛苦,请尊重原创,祝大家学习愉快!】
【博主专注嵌入式开发,具有多年嵌入式软、硬件开发经验,欢迎大家学习交流!】
【如有嵌入式相关项目需求,欢迎私信】