Opencv与python实现多目标跟踪 (一) - PaddleDetection目标检测(opencv 多目标跟踪)

网友投稿 566 2022-08-27


Opencv与python实现多目标跟踪 (一) - PaddleDetection目标检测(opencv 多目标跟踪)

前主流的Tracking By Detecting方式的多目标追踪(Multi-Object Tracking, MOT)算法主要由两部分组成:Detection+Embedding。Detection部分即针对视频,检测出每一帧中的潜在目标。Embedding部分则将检出的目标分配和更新到已有的对应轨迹上(即ReID重识别任务)。根据这两部分实现的不同,又可以划分为SDE系列和JDE系列算法。

对于传统的多目标跟踪,使用到的数据集是MOT16,MOT17这样的数据集格式,种类有如下这几种:

dataset/mot |——————image_lists |——————caltech.10k.val |——————caltech.all |——————caltech.train |——————caltech.val |——————citypersons.train |——————citypersons.val |——————cuhksysu.train |——————cuhksysu.val |——————eth.train |——————mot16.train |——————mot17.train |——————prw.train |——————prw.val |——————Caltech |——————Cityscapes |——————CUHKSYSU |——————ETHZ |——————MOT16 |——————MOT17 |——————PRW

其中数据格式如下:

MOT17 |——————images | └——————train | └——————test └——————labels_with_ids └——————train

所有数据集的标注是以统一数据格式提供的。各个数据集中每张图片都有相应的标注文本。给定一个图像路径,可以通过将字符串​​images​​​替换为​​labels_with_ids​​​并将​​.jpg​​​替换为​​.txt​​来生成标注文本路径。在标注文本中,每行都描述一个边界框,格式如下:

[class] [identity] [x_center] [y_center] [width] [height]

注意:

​​class​​​为类别id,支持单类别和多类别,从​​0​​​开始计,单类别即为​​0​​。​​identity​​​是从​​1​​​到​​num_identities​​​的整数(​​num_identities​​​是数据集中所有视频或图片序列的不同物体实例的总数),如果此框没有​​identity​​​标注,则为​​-1​​。​​[x_center] [y_center] [width] [height]​​是中心点坐标和宽高,注意他们的值是由图片的宽度/高度标准化的,因此它们是从0到1的浮点数。

这种数据从格式来看,似乎与目标检测yolov格式相似,但其中的图像,不是单一的场景下的一张图片,而是一段连续视频帧下,截取连续几帧的图片。

相对自定义数据集来说,做目标跟踪的数据标注成本要大很多,因此本文介绍一种分二阶段实现多目标跟踪的方法,

分为目标检测和目标跟踪二步完成

PaddleDetection目标检测

​​PaddleDetection 快速使用介绍​​

​​训练​​​​可视化​​​​评估(验证)​​​​推导(预测)​​​​导出模型​​

​​PaddleDetection模型转ONNX​​

​​ONNX模型的验证​​​​加载onnx模型​​

PaddleDetection 快速使用介绍

完成多目标跟踪,首先就是训练一个目标检测的模型,基于单帧检测的目标,使用算法,来判断其他帧检测的对象是否为同一物体,进而实现持续的视频跟踪。

目标检测模型使用cv2.dnn来加载这个模型,cv2.dnn可以加载多个类型的模型(格式),具体cv2.dnn模块说明参考下面这个链接:

Opencv.dnn加载模型

这里以PaddleDetection的模型为列,将模型转为onnx

1.首先是下载必要的文件和框架。

git clone --depth 1

cd PaddleDetectionpython setup.py install

pip install pycocotools paddle2onnx onnxruntime onnx

configs:保存的是各种模型所有包含的配置参数(包含优化器配置参数,数据的格式参数,模型参数等)dataset:对应不同目标检测数据类型的文件夹,我们的数据集都放到这里deploy:有一个文件deploy/python/infer.py 可以推导视频类的数据做目标检测tools:这个文件就对应这模型的训练,评估,推导和导出模型

训练

训练

python tools/train.py -c configs/yolov3/yolov3_mobilenet_v3_large_270e_voc.yml --eval -o use_gpu=true --use_vdl=True --vdl_log_dir=vdl_dir/scalar

use_gpu:是否使用GPU vdl_log_dir:训练loss可视化配置

可视化

输入下面这个命令就可以查看自己训练可视化结果了

visualdl --logdir ./log --port 8080

得到模型参数与优化器参数在PaddleDetection/output里,前缀model_final为最好的模型结果

评估(验证)

python tools/eval.py -c configs/yolov3/yolov3_mobilenet_v3_large_270e_voc.yml -o use_gpu=true weights=output/yolov3_mobilenet_v3_large_270e_voc/model_final.pdparams

推导(预测)

python tools/infer.py -c configs/yolov3/yolov3_mobilenet_v3_large_270e_voc.yml -o weights=output/yolov3_mobilenet_v3_large_270e_voc/model_final.pdparams --infer_img=demo/1.jpg

导出模型

python tools/export_model.py -c configs/yolov3/yolov3_mobilenet_v3_large_270e_voc.yml -o weights=用cv2.dnn加载这个模型,要知道cv2.dnn可以加载那些类型的模型(格式)

这里以PaddleDetection模型为列,将模型转为onnx

Detection注意:因为现在升级到2.0后,使用export.py导出的也会是叫model.pdmodel和model.pdiparams,

只有使用export.py导出的模型才是预测模型(只包含前向计算),可以被paddle2onnx导出。使用训练生成的model.pdmodel和

model.pdiparams是不可以被paddle2onnx导出的。

paddle2onnx --model_dir saved_inference_model \ --model_filename model.pdmodel \ --params_filename model.pdiparams \ --save_file model.onnx \ --enable_dev_version True

saved_inference_model:就是导出模型到output_inference文件下的模型文件夹

ONNX模型的验证

ONNX官方工具包提供了API可验证模型的正确性,主要包括两个方面,一是算子是否符合对应版本的协议,二是网络结构是否完整。

# check by ONNXimport onnx# onnx_file = save_path + '.onnx'# onnx_file ='onnx-model/detectionmodel.onnx'save_path = 'onnx-model/'onnx_file = save_path + 'detectionmodel.onnx'onnx_model = onnx.load(onnx_file)onnx.checker.check_model(onnx_model)print('The model is checked!')

加载onnx模型

def loadcv2dnnNetONNX(onnx_path): net = cv2.dnn.readNetFromONNX(onnx_path) net.setPreferableBackend(cv2.dnn.DNN_BACKEND_OPENCV) net.setPreferableTarget(cv2.dnn.DNN_TARGET_CPU) print('load successful') return net


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:自动化接口测试平台搭建之路,我是如何实现接口自动化测试平台
下一篇:五分钟学会接口自动化测试框架,接口测试自动化框架
相关文章

 发表评论

暂时没有评论,来抢沙发吧~