现在我们有一个视频流,可以拆解出 N 个帧出来,这时候初始帧/某一帧中出现了一个我们感兴趣目标,我们希望在后续帧中对这个目标进行追踪,这时候就需要 CV 中的目标追踪;

目标追踪的效果如下:

虽然效果看起来和实时人脸检测效果一样,但是只对初始帧进行了人脸检测/识别,后续帧不需要再进行检测/识别,这也是目标跟踪可以提高程序性能的优势所在;

因为做目标追踪所需要的计算时间成本,要低于进行检测/识别的;

为了实现目标追踪,我们按照以下步骤进行:

  1. 对于初始帧(视频流中的第一帧),输入/通过检测算法,得到一系列目标的位置坐标;
  2. 为这些 ROI 创建 ID;
  3. 在视频流中的后续帧,寻找帧之间目标对象的关系,将帧之间的目标关联起来;

目标跟踪可以让我们对于每一个追踪的目标指定一个唯一的 ID,所以让我们可以对视频中的跟踪物体进行计数,应用于计算人数的场景;

一个理想化的目标追踪算法能够实现:

  1. 只需要初始化的时候进行目标检测;
  2. 处理速度能够很快;
  3. 可以处理被跟踪目标,消失或者超过边界的情况;
  4. 可以处理帧之间目标消失,然后再出现的特殊情况;

上图 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 个目标,增加了一个目标;

所以对于这个新增的目标,我们按照以下顺序进行注册:

  1. 给这个新目标一个目标 ID;
  2. 储存这个目标特征框的质心位置;

然后从步骤二开始,对于视频流中的每一帧进行计算欧氏距离,更新坐标等步骤;

步骤五:注销旧目标

一个目标在后续帧中可能会消失,我们的目标追踪算法也要能够处理这种情况;

但是对于消失目标的处理方法,要根据于你实际部署应用的场景;

  • 第 N 帧丢失目标,注销旧目标
  • 第 N 帧丢失目标,而且第 N 帧中的后续 n 帧中都没有找回来,那就注销旧目标

因为每次重新注册的成本(进行检测/识别)的成本要大于欧氏距离比对进行目标追踪的成本;

# 请尊重他人劳动成果,转载或者使用源码请注明出处:http://www.cnblogs.com/AdaminXie

# 欢迎关注我的 Github:https://github.com/coneypo/

# 如有问题请留言或者联系邮箱: coneypo@foxmail.com

目标追踪(Object Tracking)概念的简要介绍的更多相关文章

  1. CVPR2018 关于视频目标跟踪(Object Tracking)的论文简要分析与总结

    本文转自:https://blog.csdn.net/weixin_40645129/article/details/81173088 CVPR2018已公布关于视频目标跟踪的论文简要分析与总结 一, ...

  2. 论文笔记:目标追踪-CVPR2014-Adaptive Color Attributes for Real-time Visual Tracking

    基于自适应颜色属性的目标追踪 Adaptive Color Attributes for Real-Time Visual Tracking 基于自适应颜色属性的实时视觉追踪 3月讲的第一篇论文,个人 ...

  3. Multiple Object Tracking using K-Shortest Paths Optimization简要

    参考文献:Multiple Object Tracking using K-Shortest Paths Optimization 核心步骤: 两步:一.detection 二.link detect ...

  4. Dalvik虚拟机简要介绍和学习计划

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8852432 我们知道,Android应用程序是 ...

  5. A brief introduction to weakly supervised learning(简要介绍弱监督学习)

    by 南大周志华 摘要 监督学习技术通过学习大量训练数据来构建预测模型,其中每个训练样本都有其对应的真值输出.尽管现有的技术已经取得了巨大的成功,但值得注意的是,由于数据标注过程的高成本,很多任务很难 ...

  6. correlation filters in object tracking

    http://www.cnblogs.com/hanhuili/p/4266990.html Correlation Filter in Visual Tracking系列一:Visual Objec ...

  7. Correlation Filter in Visual Tracking系列一:Visual Object Tracking using Adaptive Correlation Filters 论文笔记

    Visual Object Tracking using Adaptive Correlation Filters 一文发表于2010的CVPR上,是笔者所知的第一篇将correlation filt ...

  8. 论文笔记之:Spatially Supervised Recurrent Convolutional Neural Networks for Visual Object Tracking

    Spatially Supervised Recurrent Convolutional Neural Networks for Visual Object Tracking  arXiv Paper ...

  9. 基于粒子滤波的物体跟踪 Particle Filter Object Tracking

    Video来源地址 一直都觉得粒子滤波是个挺牛的东西,每次试图看文献都被复杂的数学符号搞得看不下去.一个偶然的机会发现了Rob Hess(http://web.engr.oregonstate.edu ...

随机推荐

  1. WSGI应用程序示例

    import time # WSGI允许开发者自由搭配web框架和web服务器 def app(environ,start_response): status = '200 OK' response_ ...

  2. PHP cos() 函数

    实例 返回不同数的余弦: <?phpecho(cos(3) . "<br>");echo(cos(-3) . "<br>");ec ...

  3. ORACLE表与表联接的几种方式

    三大表与表联接方式 1.NESTED LOOPS 嵌套循环 2.HASH JOIN 哈希联接 3.SORT MERGE 排序合并联接 1.NESTED LOOPS  嵌套循环 嵌套循环的本质是将外部数 ...

  4. 【JSOI2007】文本生成器 题解(AC自动机+动态规划)

    题目链接 题目大意:给定$n$个子串,要求构造一个长度为$m$的母串使得至少有一个子串是其子串.问方案数. ------------------------ 我们可以对要求进行转化:求出不合法的方案数 ...

  5. Semantic Monocular SLAM for Highly Dynamic Environments面向高动态环境的语义单目SLAM

    一.摘要 当前单目SLAM系统能够实时稳定地在静态环境中运行,但是由于缺乏明显的动态异常处理能力,在动态场景变化与运动中往往会失败.作者为解决高度动态环境中的问题,提出一种语义单目SLAM架构,结合基 ...

  6. JAVAWEB开发下常见中文乱码问题解决

    JAVA环境下处理中文乱码问题一直是很多人困扰的问题,像URL传参乱码,写进数据库乱码,服务写中文文字图片乱码处理及导出PDF乱码. 1:安装中文支持 yum groupinstall "f ...

  7. 018_go语言中的结构体

    代码演示 package main import "fmt" type person struct { name string age int } func main() { fm ...

  8. 最全总结!聊聊 Python 调用 JS 的几种方式

    1. 前言 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这三类人,我给大 ...

  9. Dubbo整合Springboot框架

    本文使用的是alibaba的Dubbo. Dubbo整合Springboot可以分为四步: 第一步:首先需要了解Dubbo官方给的建议,至少有三个工程: 接口工程:主要存实体bean和业务接口 服务提 ...

  10. 十多位全球技术专家,为你献上近十个小时的.Net微服务介绍

    .Net Conf: Focus on Microservices 是 .Net Conf 社区在 2020 年 7 月 30 日举办的线上分享活动.整个活动视频长达近 10 个小时.今天我们来看看都 ...