目标追踪(Object Tracking)概念的简要介绍
现在我们有一个视频流,可以拆解出 N 个帧出来,这时候初始帧/某一帧中出现了一个我们感兴趣目标,我们希望在后续帧中对这个目标进行追踪,这时候就需要 CV 中的目标追踪;
目标追踪的效果如下:

虽然效果看起来和实时人脸检测效果一样,但是只对初始帧进行了人脸检测/识别,后续帧不需要再进行检测/识别,这也是目标跟踪可以提高程序性能的优势所在;
因为做目标追踪所需要的计算时间成本,要低于进行检测/识别的;
为了实现目标追踪,我们按照以下步骤进行:
- 对于初始帧(视频流中的第一帧),输入/通过检测算法,得到一系列目标的位置坐标;
- 为这些 ROI 创建 ID;
- 在视频流中的后续帧,寻找帧之间目标对象的关系,将帧之间的目标关联起来;
目标跟踪可以让我们对于每一个追踪的目标指定一个唯一的 ID,所以让我们可以对视频中的跟踪物体进行计数,应用于计算人数的场景;
一个理想化的目标追踪算法能够实现:
- 只需要初始化的时候进行目标检测;
- 处理速度能够很快;
- 可以处理被跟踪目标,消失或者超过边界的情况;
- 可以处理帧之间目标消失,然后再出现的特殊情况;
上图 gif 中只有一个目标,所以其实后续帧中的检测出来的目标,如果还是一个,肯定就是我们第一帧中识别出来的 person_X;
但是往往是一帧中出现多目标,我们就需要对于前后帧中的多目标进行比对匹配;
以下图为例,比如左边是第 N 帧 ,有两个目标,我们检测识别出来是 ID#1 和 ID#2,在 N+1 帧中,也检查出来两个目标,我们知道这两个目标就是 ID#1 和 ID#2,但是不知道到底哪个是 ID#1 哪个是 ID#2;

所以就需要 质心追踪算法(Centroid Tracking)来进行判定后续帧中的 ID:

质心追踪算法(Centroid Tracking),依赖于在视频流的连续帧中,比较已知目标和新出现目标之间质心的欧氏距离;
步骤一:取特征框并计算质心

对于视频流,通过检测算法对于每帧图像进行检测;
比如上图中有两个特征框 / 或者我们假定两个特征框给它,分别为 ID #1 和 ID #2,可以计算出两个特征框的质心,分别得到位置坐标 (x,y);
以实际视频流为例:

步骤二:计算新旧目标特征框质心的欧氏距离
对于视频流中的后续帧,我们利用检测算法来计算特征框,但是我们不会再去给对于每一个检测到的物体,添加新的 ID 或者标记什么的,而是希望将新的目标能够和旧目标联系起来;
我们通过计算每对新旧目标的欧式距离来得到这些目标之间的关系;
如下图所示,比如帧 N 时候有两个目标(绿色),帧 N+1 时候有三个目标(红色),所以对于我们希望知道,这两个旧目标(绿色),在后续帧中变成了哪一个新目标(红色);
所以我们想知道如下质心之间的关系:
- 绿1->红1,绿1->红2,绿1->红3;
- 绿2->红1,绿2->红2,绿2->红3;

步骤三:更新已知目标的质心坐标
质心追踪算法的前提是:对于一个给定目标,将会在后续帧中都出现,而且在第 N 帧和 N+1 帧中的质心欧氏距离,要小于不同目标之间的欧式距离;
因此我们在视频流的连续帧之间,根据欧氏距离最小原则,将这些帧中特征框的质心联系起来,可以得到一个目标 X 在这些连续帧中的变化联系,就达到了我们目标追踪的目的;
步骤四:注册新目标
有时候会有新目标的加入,比如帧 N 的时候有 x 个目标,而帧 N+1 的时候有 x+1 个目标,增加了一个目标;
所以对于这个新增的目标,我们按照以下顺序进行注册:
- 给这个新目标一个目标 ID;
- 储存这个目标特征框的质心位置;
然后从步骤二开始,对于视频流中的每一帧进行计算欧氏距离,更新坐标等步骤;
步骤五:注销旧目标
一个目标在后续帧中可能会消失,我们的目标追踪算法也要能够处理这种情况;
但是对于消失目标的处理方法,要根据于你实际部署应用的场景;
- 第 N 帧丢失目标,注销旧目标
- 第 N 帧丢失目标,而且第 N 帧中的后续 n 帧中都没有找回来,那就注销旧目标
因为每次重新注册的成本(进行检测/识别)的成本要大于欧氏距离比对进行目标追踪的成本;
# 请尊重他人劳动成果,转载或者使用源码请注明出处:http://www.cnblogs.com/AdaminXie
# 欢迎关注我的 Github:https://github.com/coneypo/
# 如有问题请留言或者联系邮箱: coneypo@foxmail.com
目标追踪(Object Tracking)概念的简要介绍的更多相关文章
- CVPR2018 关于视频目标跟踪(Object Tracking)的论文简要分析与总结
本文转自:https://blog.csdn.net/weixin_40645129/article/details/81173088 CVPR2018已公布关于视频目标跟踪的论文简要分析与总结 一, ...
- 论文笔记:目标追踪-CVPR2014-Adaptive Color Attributes for Real-time Visual Tracking
基于自适应颜色属性的目标追踪 Adaptive Color Attributes for Real-Time Visual Tracking 基于自适应颜色属性的实时视觉追踪 3月讲的第一篇论文,个人 ...
- Multiple Object Tracking using K-Shortest Paths Optimization简要
参考文献:Multiple Object Tracking using K-Shortest Paths Optimization 核心步骤: 两步:一.detection 二.link detect ...
- Dalvik虚拟机简要介绍和学习计划
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8852432 我们知道,Android应用程序是 ...
- A brief introduction to weakly supervised learning(简要介绍弱监督学习)
by 南大周志华 摘要 监督学习技术通过学习大量训练数据来构建预测模型,其中每个训练样本都有其对应的真值输出.尽管现有的技术已经取得了巨大的成功,但值得注意的是,由于数据标注过程的高成本,很多任务很难 ...
- correlation filters in object tracking
http://www.cnblogs.com/hanhuili/p/4266990.html Correlation Filter in Visual Tracking系列一:Visual Objec ...
- Correlation Filter in Visual Tracking系列一:Visual Object Tracking using Adaptive Correlation Filters 论文笔记
Visual Object Tracking using Adaptive Correlation Filters 一文发表于2010的CVPR上,是笔者所知的第一篇将correlation filt ...
- 论文笔记之:Spatially Supervised Recurrent Convolutional Neural Networks for Visual Object Tracking
Spatially Supervised Recurrent Convolutional Neural Networks for Visual Object Tracking arXiv Paper ...
- 基于粒子滤波的物体跟踪 Particle Filter Object Tracking
Video来源地址 一直都觉得粒子滤波是个挺牛的东西,每次试图看文献都被复杂的数学符号搞得看不下去.一个偶然的机会发现了Rob Hess(http://web.engr.oregonstate.edu ...
随机推荐
- Python 字典(Dictionary) str()方法
Python 字典(Dictionary) str()方法 描述 Python 字典(Dictionary) str() 函数将值转化为适于人阅读的形式,以可打印的字符串表示.高佣联盟 www.cge ...
- 一本通 高手训练 1781 死亡之树 状态压缩dp
LINK:死亡之树 关于去重 还是有讲究的. 题目求本质不同的 具有k个叶子节点的树的个数 不能上矩阵树. 点数很少容易想到装压dp 考虑如何刻画树的形状 发现一个维度做不了 所以. 设状态 f[i] ...
- 区块链钱包开发 - USDT - 三、实战(nodejs版本)
一.安装钱包 请参考另一篇随笔: 入口 二.获取测试usdt(TestOmni)步骤: 1.导入地址到钱包,往该地址充值测试比特币, 2.然后往 moneyqMan7uh8FqdCA2BV5yZ8qV ...
- Linux的VMWare中Centos7文件目录类命令
1.)ls命令简介 ls ---列出目前工作目录所含之文件及子目录 语法 ls [-alrtAFR] [name...] 参数 : -a 显示所有文件及目录 (ls内定将文件名或目录名称 ...
- 快速构建一个springboot项目(一)
前言: springcloud是新一代的微服务框架而springboot作为springcloud的基础,很有必要对springboot深入学习一下. springboot能做什么? (1)spri ...
- Docker管理工具之portainer
参考:https://www.cnblogs.com/frankdeng/p/9686735.html 1. 查询portainer镜像 命令:docker search portainer 实例: ...
- CF习题集二
CF习题集二 一.CF507E Breaking Good 题目描述 \(Breaking Good\)这个游戏对于有经验的玩家来说也有一定的难度. 游戏的主角小明希望加入一个叫斧头帮的犯罪团伙.这个 ...
- Taurus.MVC 2.3.4 :WebAPI 文档集成测试功能升级:WebAPI批量自动化测试功能。
前言: 最近升级了一下Taurus.MVC,现在最新版本是:Taurus.MVC 2.3.4,源码版本和nuget同步. 下面分三个步骤介绍下新版本的WebAPI批量自动化测试功能. 1.启用WebA ...
- 新鲜整理的Java学习大礼包!!锵锵锵锵~
第一部分:Java视频资源! 前端 HTML5新元素之Canvas详解 https://www.bilibili.com/video/BV1TE41177TE HTML5之WebStorage详解 h ...
- Linux进程间通信之《共享内存》入门
目录 简述 代码 写端代码 读取端代码 编译 运行 简述 共享内存是Linux系统进程间通信常用的方式,通常用于数据量较大的情况,如果只是用于不同的进程间消息通知,那不如用消息队列或者socket.之 ...