首先感谢阅读,如果您也对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的训练库,地址如下(原生的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这个平台。
路径在:./pretrained_models/models/yolov5s6_384_ti_lite/weights/ *****.link
这两个 link 文件内,保存了onnx的地址,和导入必须的prototxt的文件地址,需要下载下来。
我这里讲SDK升级到了最新的0802的版本,这里在其他版本应该也是可以转换的。
官方参考的文档入口在这里:
这里我参考的是官方自身提供的yolov3相关导入的内容、参考官方导入peele模型的配置文件等。
步骤(主要在PC端完成):
1、将下载的onnx和prototxt文件拷贝到对应文件夹
2、新建一个转换配置文件,用于指定模型相关属性、源文件路径、生成模型存储路径等
3、执行importer 操作,生成转换完成的bin文件
4、PC端观察是否生成正确,并验证
官方提供的模型保存路径为:./tidl_j721e_08_02_00_11/ti_dl/test/testvecs/models/public/onnx/
这里我也将我们下载的文件保存到这个路径内。
在路径./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:官方文件内也有说明,可以先自行参考一下。虽然官方说明里面很多,可能会比较乱,大家耐心一点。
表格中,标注为红色的部分,需要我们根据自己的实际路径进行修改。改动地方还是挺多的,这里细心一点,我也是一点点试错,才成功的。
完成步骤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
执行结果如下:
执行结束以后,在生成的对应的路径下:./tidl_j721e_08_02_00_11/ti_dl/test/testvecs/config/tidl_models/onnx/yolov5_384 可以看到生成的相关文件。
这里有两个bin文件,
tidl_io_yolo5_384_1.bin :这个是网络输入的配置文件
tidl_net_yolo5_384.bin:这个是网络的模型数据
可以看到在文件里有一个图像文件,这个文件就是在执行importer过程中,PC端自动使用导入的onnx 模型对图片进行的一次目标检测,并标注了结果。(这个模型有一些不准确,可能和模型相关,我使用640×640输入第二张图,效果会好很多,后面大家自己试一下)
完成模型转换以后,生成的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:置信度!!这个地方标示检测到目标得分的一个阈值。即网络输出的得分大于这个值,我们才会信任这个检测有效,我这里改的比较小,主要是为了模型能够输出更多的目标。
在官方提供的yolov5的模型里面,是基于COCO数据集进行训练的,这里可以在这个路径下面的文件:/edgeai-yolov5-master/data/coco.yaml ,找到80个分类的名称,将分类名称导入我提供的usb 检测的demo里面即可。
[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!
【声明】
【欢迎转载转发,请注明出处。原创比较辛苦,请尊重原创,祝大家学习愉快!】
【博主专注嵌入式开发,具有多年嵌入式软、硬件开发经验,欢迎大家学习交流!】
【如有嵌入式相关项目需求,欢迎私信】