opencv多目标跟踪算法,opencv多目标检测
Opencv和python用于多目标跟踪(一)-PaddleDetection目标检测__姜俊泽的技术博客_博客
前者的主流多目标检测跟踪算法主要由两部分组成:检测嵌入。检测部分检测视频的每一帧中的潜在目标。嵌入将检测到的目标分发并更新到已有的对应航迹(即ReID重识别任务)。根据两部分的不同,可以分为SDE系列和JDE系列算法。
对于传统的多目标跟踪,使用的数据集是MOT16和MOT17,类型如下:
数据集/mot
——————图像列表
—————— cal tech . 10k . val
——————caltech.all
——————caltech.train
——————caltech.val
——————
——————
——————cuhksysu.train
——————cuhksysu.val
——————eth.train
——————mot16.train
——————mot17.train
——————prw.train
——————prw.val
——————科技
——————城市景观
——————CUHKSYSU
——————ETHZ
——————MOT16
——————MOT17
——————PRW,其中数据格式如下:
MOT17
——————图片
——————train
——————test
——————labels_with_ids
——————train所有数据集的标注都以统一的数据格式提供。每个数据集中的每个图片都有相应的注释文本。给定图像路径,可以通过用labels_with_ids和替换字符串图像来生成标注文本路径。jpg带。txt。在标注文本中,每一行都以下列格式描述一个边界框:
[class][identity][x _ center][y _ center][width][height]注:
类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克隆https://github.com.cnpmjs.org/PaddlePaddle/PaddleDetection-深度1cd paddled检测
python setup . py install pip install pycocotools paddle 2 onnx onnx runtime onnx快速目标检测主要使用这些文件:
Configs:存储所有配置参数(包括优化器配置参数、数据格式参数、模型参数等。)的各种型号。数据集:对应不同类型目标探测数据的文件夹,我们的数据集放在这里。部署:有一个文件deploy/python/infrared.py,可以为目标探测工具导出视频数据。该文件对应于该模型的训练、评估、推导和导出。
以训练yolo v3 _ mobilenet _ v3 _ large _ 270 e _ VOC为例:
首先转到配置并找到它。
您只需要修改红框的数据参数:
voc.yml参数需要修改如下:
自身分类类别的数量,以及数据集路径,都需要将自己定义的数据集转换成合适的格式,比如这里的voc格式。
火车
python tools/train . py-c configs/yolo v3/yolo v3 _ mobilenet _ v3 _ large _ 270 e _ VOC . yml-eval(111,66,193);边距:0px填充:0px背景:none 0% 0%/auto repeat scroll padding-box border-box rgba(0,0,0,0);-o use _ GPU=true-use _ VDL=true-VDL _ log _ dir=VDL _ dir/scalar use _ GPU:要用GPU吗?
Vdl_log_dir:训练损失可视化配置
如果需要切换GPU,在tools/train.py中添加两行代码:
Visualize:输入以下命令查看培训的可视化结果。
通过visual dl-logdir获得的模型参数和优化器参数。/log-port8080在PaddleDetection/output中,前缀model_final是最好的模型结果。
评估(验证)python工具/eval(111,66,193);边距:0px填充:0px背景:none 0% 0%/auto repeat scroll padding-box border-box rgba(0,0,0,0);-c configs/yolo v3/yolo v3 _ mobilenet _ v3 _ large _ 270 e _ VOC . yml-o use _ GPU=true weights=output/yolo v3 _ mobilenet _ v3 _ large _ VOC/model _ final . PD params
derive(predict)Python Tools/infer . py-CCConfigs/yolo v3/yolo v3 _ mobilenet _ v3 _ large _ 270 e _ VOC . yml-o weights=output/yolo v3 _ mobilenet _ v3 _ large _ 270 e _ VOC/model _ final . PD params。
模型python tools/export _ model . py-cconfigs/yolo v3/yolo v3 _ mobilenet _ v3 _ large _ 270 e _ VOC . yml-owights=3359paddlet.bj.bcebos.com/models/ppyoloe _ CrN _ l _ 300e _ coco . PD params导出的模型在paddle detection/output _ incidence中。
将PaddleDetection模型转移到ONNX的第一步是训练目标检测模型。
使用cv2.dnn加载这个模型,知道cv2.dnn可以加载什么类型的模型(格式)。
这里以PaddleDetection模型为列,把模型变成onnx。
检测注意:因为现在升级到2.0以后,使用export.py导出的产品也会被称为model.pdmodel和model.pdiparams,
只有用export.py导出的模型才是预测模型(只包括正向计算),可以用paddle2onnx导出。使用训练生成的model.pdmodel和
paddle2onnx无法导出Model.pdiparams。
paddle2onnx -模型_目录已保存_推理_模型\
-模型文件名模型. PD模型\
-params _ filename model . PDI params \
- save_file model.onnx \
-启用开发版本True
Saved _ incidence _ model:将模型导出到output_inference文件下的model文件夹中。
ONNX模型的验证
ONNX官方工具包提供API来验证模型的正确性,主要包括两个方面,一是运营商是否符合相应版本的协议,二是网络结构是否完整。
#由ONNX检查
导入onnx
# onnx_file=save_path 。onnx
# onnx _ file= onnx-model/detection model . onnx
save_path=onnx-model/
onnx _ file=save _ path detection model . onnx
onnx_model=onnx.load(onnx_file)
onnx . checker . check _ model(onnx _ model)
打印(模型已检查!)
要加载onnx模型定义load cv2 nnnetonnx(onnx _ path _ path):
net=cv2 . dnn . readnetfromonnx(onnx _ path)
net . setpreferableback end(cv2 . dnn . dnn _ back end _ OPENCV)
net . setpreferabletarget(cv2 . dnn . dnn _ TARGET _ CPU)
打印(“加载成功”)
返回网
转载请联系作者获得授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。