智慧交通day02-车流量检测实现02:多目标追踪

1.多目标跟踪分类

多目标跟踪,即MOT(Multi-Object Tracking),也就是在一段视频中同时跟踪多个目标。MOT主要应用在安防监控和自动驾驶等领域中。 

1.1 初始化方法

多目标跟踪,即MOT(Multi-Object Tracking)问题中并不是所有目标都会在第一帧出现,也并不是所有目标都会出现在每一帧。那如何对出现的目标进行初始化,可以作为跟踪算法的分类表针。常见的初始化方法分为两大类,一个是Detection-Based-Tracking(DBT),一个是Detection-Free-Tracking(DFT)。下图比较形象地说明了两类算法的区别。

  • DBT

    DBT的方式就是典型的tracking-by-detection模式,即先检测目标,然后将目标关联进入跟踪轨迹中。那么就存在两个问题,第一,该跟踪方式非常依赖目标检测器的性能,第二,目标检测的实质是分类和回归,即该跟踪方式只能针对特定的目标类型,如:行人、车辆、动物。DBT则是目前业界研究的主流。

  • DFT

    DFT是单目标跟踪领域的常用初始化方法,即每当新目标出现时,人为告诉算法新目标的位置,这样做的好处是target free,坏处就是过程比较麻烦,存在过多的交互,所以DBT相对来说更受欢迎。

1.2 处理模式

多目标跟踪,即MOT(Multi-Object Tracking)也存在着不同的处理模式,Online和Offline两大类,其主要区别在于是否用到了后续帧的信息。下图形象解释了Online与Offline跟踪的区别。

  • Online Tracking

    Online Tracking是对视频帧逐帧进行处理,当前帧的跟踪仅利用过去的信息。

  • Offline Tracking

    Offline Tracking利用前后视频帧的信息对当前帧进行目标跟踪,这种方式只适用于视频,如果应用于摄像头,则会有滞后效应,通常采用时间窗方式进行处理,以节省内存和加速。

2.运动模型

为了简化多目标跟踪的难度,我们引入运动模型类简化求解过程,运动模型捕捉目标的动态行为,它估计目标在未来帧中的潜在位置,从而减少搜索空间。在大多数情况下,假设目标在现实中是平缓运动的,那么在图像空间也是如此。对于车辆的运动,大致可分为线性和非线性两种运动:

  • 线性运动:线性运动模型是目前最主流的模型,即假设目标的运动属性平稳(速度,加速度,位置);
  • 非线性运动:虽然线性运动模型比较常用,但由于存在它解决不了的问题,非线性运动模型随之诞生。它可以使tracklets间运动相似度计算得更加准确。

3.跟踪方法

多目标跟踪中基于神经网络的算法,端到端的算法并不多,主要还在实验室的刷榜阶段,模型复杂,速度慢,追踪结果也不好,主要给介绍以下两种主流的算法:

3.1 基于Kalman和KM算法的后端优化算法

该类算法能达到实时性,但依赖于检测算法效果要好,特征区分要好(输出最终结果的好坏依赖于较强的检测算法,而基于卡尔曼加匈牙利匹配的追踪算法作用在于能够输出检测目标的id,其次能保证追踪算法的实时性,这样追踪效果会好,id切换少,其代表性的算法是SORT/DeepSORT

SORT 是一种实用的多目标跟踪算法,引入了线性速度模型与卡尔曼滤波来进行位置预测,在无合适匹配检测框的情况下,使用运动模型来预测物体的位置。

匈牙利算法是一种寻找二分图的最大匹配的算法,在多目标跟踪问题中可以简单理解为寻找前后两帧的若干目标的匹配最优解的一种算法。

卡尔曼滤波可以看作是一种运动模型,用来对目标的轨迹进行预测,并且使用确信度较高的跟踪结果进行预测结果的修正。

多目标追踪一般接在目标检测后。在工业界目标检测采用比较多的是YOLO检测网络,单阶段式,速度快,精度不差,部署在NV的平台帧率可以达到30fps以上。

所以要实现目标检测代码和多目标追踪代码集成的任务,需要先将两者的框架统一。即先实现目标检测网络,检测的输出结果主要是将检测框的位置信息输入到多目标追踪算法中。

3.2 基于多线程的单目标跟踪的多目标跟踪算法

这类算法特点是跟踪效果会很好,因为其为每一类物体都单独分配了一个跟踪器。但该算法对目标尺度变化要求较大,参数调试需要合理,同时该算法极耗cpu资源,实时性不高,代表算法是利用KCF进行目标跟踪。

多目标追踪本质上是多个目标同时运动的问题,所以有提出将单目标跟踪器引入到多目标追踪的问题,为每一个目标分配一个跟踪器,然后间接地使用匹配算法来修正那些跟踪失败或新出现的目标。代表性的单目标跟踪算法为核相关滤波算法(KCF),在精度和速度上能够同时达到很高的水平,是当时单目标跟踪最优秀的算法之一,后来的很多单目标跟踪算法都是基于此做的改进。

实际应用过程中会为每个目标分配一个KCF跟踪器并采用多线程的方式来组织这些跟踪器。同时因为实际硬件条件的限制,不可能提供强大的计算力资源,会采用检测器与跟踪器交替进行的跟踪策略。由于检测的帧率不高,使得跟踪的维持效果出现滞后或框飘的现象较为严重,实用性不大。


总结:

1.多目标跟踪,即MOT(Multi-Object Tracking),在一段视频中同时跟踪多个目标

  • 基于初始化方法:

    • DBT:基于检测的目标跟踪方法
    • DFT:每当新目标出现时,人为告诉算法新目标的位置
  • 基于处理模型的方法:

    • 离线处理:利用前后视频帧的信息对当前帧进行目标跟踪
    • 在线处理:对视频帧逐帧进行处理,当前帧的跟踪仅利用过去的信息
  • 运动模型

    线性运动(常用)和非线性运动

  • 常用算法:

  • 基于Kalman和KM算法的后端优化算法

  • 和基于多线程的单目标跟踪的多目标跟踪算法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/469747.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GIT非常好的整理

初始化配置 C代码 #配置使用git仓库的人员姓名 git config --global user.name "Your Name Comes Here" #配置使用git仓库的人员email git config --global user.email youyourdomain.example.com #配置到缓存 默认15分钟 git config --global cred…

centos虚拟机wifi设置代理服务器,vmware虚拟机centos在宿主机连WIF..._网络编辑_帮考网...

caotongjiang新兵答主12-13TA获得超过6747个赞资料:netmask ip地址 broadcast 子网掩码 gateway 网关 dns DNS服务器vmware三种网络连接上网设置:1.桥接方式(bridge) :默认使用vmnet0将虚拟机的ip设置与主机同网段未使用ip,其余与主机相同:ip地址与主机同段相异,子网…

ValueError: check_hostname requires server_hostname的解决办法

在用pip安装scikit-image库时报错:ValueError: check_hostname requires server_hostname 报错ValueError: check_hostname requires server_hostname通常是因为版本冲突等原因,查遍网上众多大佬总结的经验后,最终发现是由网络代理导致的问题…

salesforce 零基础学习(五十四)常见异常友好消息提示

异常或者error code汇总:https://developer.salesforce.com/docs/atlas.en-us.api.meta/api/sforce_api_calls_concepts_core_data_objects.htm 做项目的时候有很多异常是我们经常遇到的: 1.空指针异常; 2.死锁或者超时; 3.级联删…

★Anaconda中创建、切换、删除虚拟环境(指定仓库)

指定仓库安装源文件 pip install 包名 -i http://pypi.douban.com/simple 可以换源列表: 阿里云 https://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ #常用 豆瓣(douban) http://pypi.douban.com/simple/ 清华…

怎样修改t3服务器地址,怎样修改t3服务器地址

怎样修改t3服务器地址 内容精选换一换华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。Atlas 200 DK开发者板支持通过USB端口或者网线与Ubuntu服务器…

结构体中.和-的用法

#include"stdio.h" #include"stdlib.h"struct linkwqf{int age;char * name;struct linkwqf* next; }; struct linkwqf linkwww1;/*第一种声明结构体类型变量的方法 这种方法意义不大*/ typedef struct linkwqf linkwww2;/*第一种声明结构体类型变量的方…

智慧交通day02-车流量检测实现03:辅助功能(交并比and候选框的表现形式)

学习目标 能够实现两个目标框的交并比 了解候选框在多目标跟踪中的表达方式及相应转换方法 IOU是交并比(Intersection-over-Union)是目标检测中使用的一个概念是产生的候选框(candidate bound)与原标记框(ground tru…

电脑pro,拒绝等待!七彩虹全新设计师电脑ProMaster H1为创意加速

新年伊始,七彩虹科技正式发布了全新设计师领域整机系列:Colorful ProMaster(专业大师)。并同时公布了旗下第一款设计师电脑整机:Colorful ProMaster H1。其采用全新三面环绕布艺设计要素,搭载NVIDIA GeForce RTX Studio和英特尔傲…

智慧交通day02-车流量检测实现04:卡尔曼滤波器

1、背景介绍 卡尔曼滤波(Kalman)无论是在单目标还是多目标领域都是很常用的一种算法,我们将卡尔曼滤波看做一种运动模型,用来对目标的位置进行预测,并且利用预测结果对跟踪的目标进行修正,属于自动控制理论…

java 简单类继承

class Person {String name;int age;public String talk(){return "我是:"this.name",今年:"this.age"岁";}public Person()/* 无参数的构造函数*/{System.out.println("1.public Person(){}");} } class Stude…

成功解决 ProxyError: Conda cannot proceed due to an error in your proxy configuration

给win10的ubuntu1804安装anaconda, 执行conda create -n daily python3.7创建虚拟环境时报错 Collecting package metadata (current_repodata.json): failedProxyError: Conda cannot proceed due to an error in your proxy configuration. Check for typos and other confi…

android 4.2修改设置菜单的背景颜色

设置中的背景主要来主题的设置, 在4.X后, android添加了新的主题: Holo 从Settings/AndroidManifest.xml中找到: Xml代码 <application android:label"string/settings_label" android:icon"mipmap/ic_launcher_settings" android…

智慧交通day02-车流量检测实现05:卡尔曼滤波器实践(小车模型)

1.filterpy FilterPy是一个实现了各种滤波器的Python模块&#xff0c;它实现著名的卡尔曼滤波和粒子滤波器。我们可以直接调用该库完成卡尔曼滤波器实现。其中的主要模块包括&#xff1a; filterpy.kalman 该模块主要实现了各种卡尔曼滤波器&#xff0c;包括常见的线性卡尔曼滤…

Linux多线程——使用互斥量同步线程

前文再续&#xff0c;书接上一回&#xff0c;在上一篇文章&#xff1a;Linux多线程——使用信号量同步线程中&#xff0c;我们留下了一个如何使用互斥量来进行线程同步的问题&#xff0c;本文将会给出互斥量的详细解说&#xff0c;并用一个互斥量解决上一篇文章中&#xff0c;要…

智慧交通day02-车流量检测实现05:小车匀速案例

""" 现在利用卡尔曼滤波对小车的运动状态进行预测。主要流程如下所示&#xff1a;导入相应的工具包小车运动数据生成参数初始化利用卡尔曼滤波进行小车状态预测可视化&#xff1a;观察参数的变化与结果 """#导入包 from matplotlib import pyplo…

排座椅

题目描述 上课的时候总会有一些同学和前后左右的人交头接耳&#xff0c;这是令小学班主任十分头疼的一件事情。不过&#xff0c;班主任小雪发现了一些有趣的现象&#xff0c;当同学们的座次确定下来之后&#xff0c;只有有限的D对同学上课时会交头接耳。同学们在教室中坐成了M行…

智慧交通day02-车流量检测实现05:小车匀加速案例

""" 现在利用卡尔曼滤波对小车的运动状态进行预测。主要流程如下所示&#xff1a;导入相应的工具包小车运动数据生成参数初始化利用卡尔曼滤波进行小车状态预测可视化&#xff1a;观察参数的变化与结果 """#导入包 from matplotlib import pyplo…

智慧交通day02-车流量检测实现06:目标估计模型-卡尔曼滤波

在这里我们主要完成卡尔曼滤波器进行跟踪的相关内容的实现。 初始化&#xff1a;卡尔曼滤波器的状态变量和观测输入更新状态变量根据状态变量预测目标的边界框初始化&#xff1a; 状态量x的设定是一个七维向量&#xff1a; 分别表示目标中心位置的x,y坐标&#xff0c;面积s和当…

python或anaconda下安装opencv提示Error:No matching distribution found for opencv

python或anaconda下安装opencv提示Error&#xff1a;No matching distribution found for opencv 错误提示&#xff1a; ERROR: Could not find a version that satisfies the requirement python-opencv (from versions: none) ERROR: No matching distribution found for p…