opencv多目标跟踪算法,opencv多目标检测

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • opencv图像识别数字,opencv 识别
  • opencv图像识别数字,opencv 识别,如何基于opencv实现简单的数字识别
  • opencv图像的旋转角度计算,opencv图像仿射变换
  • opencv图像的旋转角度计算,opencv图像仿射变换,OpenCV图像几何变换之透视变换
  • opencv图像的旋转角度计算,opencv 旋转任意角度
  • opencv图像的旋转角度计算,opencv 旋转任意角度,opencv图片的任意角度旋转实现示例
  • opencv图像处理函数,opencv图像轮廓合并
  • opencv图像处理函数,opencv图像轮廓合并,OpenCV图像处理之七种常用图像几何变换
  • opencv双线性插值函数,opencv 图像插值
  • LBPH人脸识别,基于opencv的人脸识别技术
  • LBPH人脸识别,基于opencv的人脸识别技术,Opencv LBPH人脸识别算法详解
  • ,,OpenCV黑帽运算(BLACKHAT)的使用
  • opencv双线性插值函数,opencv 图像插值,C++ OpenCV实现图像双三次插值算法详解
  • ,,C语言 OpenCV实现柱面投影
  • ,,C++ Opencv imfill孔洞填充函数的实现思路与代码
  • 留言与评论(共有 条评论)
       
    验证码: