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

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

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

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

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

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

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


        这篇博客,主要实现YOLOV5 目标检测相关的功能。上一篇博客实现了检测目标的标签属性的提取。大家有需要的可以参考一下。链接如下:

[TI TDA4 J721E]基于USB摄像头YUV数据的目标检测和Label提取(基于app_od demo)_AIRKernel的博客-CSDN博客TDA4目标检测 图像识别 Label相关https://blog.csdn.net/AIRKernel/article/details/123922871?spm=1001.2014.3001.5501


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

官方提供了一个yolov5的训练库,地址如下(原生的YOLOV5 无法直接转换,请知悉!!!因为有一些Layer TIDL 不支持):

TI官方提供的 Edgeai-YoloV5

GitHub - TexasInstruments/edgeai-yolov5: YOLOv5 in PyTorch > ONNX > CoreML > TFLite

原生YoloV5

GitHub - ultralytics/yolov5: YOLOv5 in PyTorch > ONNX > CoreML > TFLite

       下载这个库以后,大家可以完成训练自己模型,具体如何使用,大家可以自行搜索yolov5的使用方法,很多教程,不做赘述。这里主要介绍 Edgeai-YoloV5 生成模型以后如何导入TDA4这个平台。

1、下载预训练模型onnx

        路径在:./pretrained_models/models/yolov5s6_384_ti_lite/weights/ *****.link

        这两个 link 文件内,保存了onnx的地址,和导入必须的prototxt的文件地址,需要下载下来。

[TI TDA4 J721E]YOLOV5 模型训练结果导入及平台移植应用_第1张图片

2、参考官方提供的TIDL Importer导入模型,生成bin文件

        我这里讲SDK升级到了最新的0802的版本,这里在其他版本应该也是可以转换的。

        官方参考的文档入口在这里:

[TI TDA4 J721E]YOLOV5 模型训练结果导入及平台移植应用_第2张图片

[TI TDA4 J721E]YOLOV5 模型训练结果导入及平台移植应用_第3张图片

         这里我参考的是官方自身提供的yolov3相关导入的内容、参考官方导入peele模型的配置文件等。

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

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

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

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

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

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

        官方提供的模型保存路径为:./tidl_j721e_08_02_00_11/ti_dl/test/testvecs/models/public/onnx/

这里我也将我们下载的文件保存到这个路径内。

[TI TDA4 J721E]YOLOV5 模型训练结果导入及平台移植应用_第4张图片

B、新建转换文件:

        在路径./tidl_j721e_08_02_00_11/ti_dl/test/testvecs/config/import/public/onnx下,创建一个文件:tidl_import_yoloV5_384.txt(这里直接复制了同目录下的tidl_import_yolo3.txt 文件,修改)。内部参数说明:

modelType          = 2
numParamBits       = 8
numFeatureBits     = 8
quantizationStyle  = 3
#quantizationStyle  = 2
inputNetFile       = "../../test/testvecs/models/public/onnx/yolov5s6_384_ti_lite_32p8_51p2.onnx"

outputNetFile      = "../../test/testvecs/config/tidl_models/onnx/yolov5_384/tidl_net_yolo5_384.bin"
outputParamsFile   = "../../test/testvecs/config/tidl_models/onnx/yolov5_384/tidl_io_yolo5_384_"
inDataNorm  = 1
inMean = 0 0 0
inScale = 0.003921568627 0.003921568627 0.003921568627
inDataFormat = 1
inWidth  = 384
inHeight = 384 
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 = 4
metaLayersNamesList =  "../../test/testvecs/models/public/onnx/yolov5s6_384_ti_lite_metaarch.prototxt"
postProcType = 2

odelType          = 2

导入数据的类型 2代表 onnx类型的模型数据

numParamBits       = 8

模型参数的位数

numFeatureBits     = 8

特征图的数据位数

quantizationStyle  = 3

暂不明确

inputNetFile       = "../../test/testvecs/models/public/onnx/yolov5s6_384_ti_lite_32p8_51p2.onnx"

输入onnx文件的路径
outputNetFile      = "../../test/testvecs/config/tidl_models/onnx/yolov5_384/tidl_net_yolo5_384.bin" 输出网络的bin文件路径
outputParamsFile   = "../../test/testvecs/config/tidl_models/onnx/yolov5_384/tidl_io_yolo5_384_" 输出网络的配置bin文件路径
inDataNorm  = 1 暂不明确
inMean = 0 0 0 暂不明确
inScale = 0.003921568627 0.003921568627 0.003921568627 暂不明确
inDataFormat = 1 暂不明确
inWidth  = 384 模型输入图像的宽度
inHeight = 384  模型输入图像的高度
inNumChannels = 3 模型输入图像的通道数RGB为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 = 4 暂不明确
metaLayersNamesList =  "../../test/testvecs/models/public/onnx/yolov5s6_384_ti_lite_metaarch.prototxt" 输入的prototxt文件的路径
postProcType = 2 暂不明确

        PS:官方文件内也有说明,可以先自行参考一下。虽然官方说明里面很多,可能会比较乱,大家耐心一点。

        表格中,标注为红色的部分,需要我们根据自己的实际路径进行修改。改动地方还是挺多的,这里细心一点,我也是一点点试错,才成功的。

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

完成步骤B以后,执行官方提供的import文件。

        注意:需要进入到这个路径下:/tidl_j721e_08_02_00_11/ti_dl/utils/tidlModelImport/ 去执行这个操作!!!

./out/tidl_model_import.out ../../test/testvecs/config/import/public/onnx/tidl_import_yoloV5_384.txt

执行结果如下:

[TI TDA4 J721E]YOLOV5 模型训练结果导入及平台移植应用_第5张图片

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

        执行结束以后,在生成的对应的路径下:./tidl_j721e_08_02_00_11/ti_dl/test/testvecs/config/tidl_models/onnx/yolov5_384 可以看到生成的相关文件。

[TI TDA4 J721E]YOLOV5 模型训练结果导入及平台移植应用_第6张图片

        这里有两个bin文件,

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

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

        可以看到在文件里有一个图像文件,这个文件就是在执行importer过程中,PC端自动使用导入的onnx 模型对图片进行的一次目标检测,并标注了结果。(这个模型有一些不准确,可能和模型相关,我使用640×640输入第二张图,效果会好很多,后面大家自己试一下)

[TI TDA4 J721E]YOLOV5 模型训练结果导入及平台移植应用_第7张图片

 [TI TDA4 J721E]YOLOV5 模型训练结果导入及平台移植应用_第8张图片

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

完成模型转换以后,生成的bin文件在对应的文件夹下。

官方提供的app_tidl_od demo的配置文件里面,

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

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

分别对应了 tidl_config / tidl_network 的路径。将这两个文件,拷贝到 SD的 /opt/vision_apps/test_data/psdkra/tidl_models/ 路径下。

需要修改app_tidl_od 的cfg文件里面的 tidl_config / tidl_network 的文件路径,将其修改为我们生成的文件。

注意:

in_size : 待检测图像的输入大小(官方demo里面是1024 × 512 ,我修改了使用USB摄像头作为输入源,所以这里我修改成1280*720,如果是官方demo,这里可以不改动)

dl_size:检测网络的输入图像的大小,这里根据我们输入的网络模型来确定的。

out_size:显示图片的输出大小(官方demo里面是1024 × 512 ,我修改了使用USB摄像头作为输入源,所以这里我修改成1280*720,如果是官方demo,这里可以不改动)

viz_th:置信度!!这个地方标示检测到目标得分的一个阈值。即网络输出的得分大于这个值,我们才会信任这个检测有效,我这里改的比较小,主要是为了模型能够输出更多的目标。

[TI TDA4 J721E]YOLOV5 模型训练结果导入及平台移植应用_第9张图片

至此,运行app_tidl_od demo后,即可实现目标检测的功能,如下:


4、讲训练模型时的分类的数据导入demo里,对应输出目标的名称。

 在官方提供的yolov5的模型里面,是基于COCO数据集进行训练的,这里可以在这个路径下面的文件:/edgeai-yolov5-master/data/coco.yaml ,找到80个分类的名称,将分类名称导入我提供的usb 检测的demo里面即可。

[TI TDA4 J721E]YOLOV5 模型训练结果导入及平台移植应用_第10张图片

 5、在EVM板上使用USB摄像头进行目标检测

[TI TDA4 J721E]基于USB摄像头YUV数据的目标检测和Label提取(基于app_od demo)_AIRKernel的博客-CSDN博客https://blog.csdn.net/AIRKernel/article/details/123922871?spm=1001.2014.3001.5501请参考以上链接,实验结果如下。Good Luck!

[TI TDA4 J721E]YOLOV5 模型训练结果导入及平台移植应用_第11张图片


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

你可能感兴趣的:(TI,TDA4,J721E,开发板学习交流,c语言,图搜索算法)