(MTT)连续能量函数最小化方法

Multitarget tracking
Multi-object tracking
连续能量函数

读“A.Milan,S. Roth, K. Schindler, 'continuous Energy Minimization for Multitarget Tracking[J]',TPAMI,2014.”笔记

当前追踪的主要策略是tracking-by-dection,即首先使用背景减除法或者分类器检测出前景运动目标,然后再对目标轨迹进行估计。

tracking-by-detection的优势:

  • 增强了针对目标漂移时轨迹检测的鲁棒性

  • 提高了追踪失败时的恢复率,也就是说这次没找到下次还能以很高的概率找到正确的轨迹。而比如meanshift、Kalman滤波等跟踪方法一旦目标跟踪失败,后续就很难再次正确跟踪了

而在目标跟踪中,多目标的跟踪问题比单目标的跟踪问题复杂得多。

单目标跟踪问题中可以在每一帧相对较小的区间内检测目标,然后将检测的结果连接起来就可以得到较好的跟踪结果

多目标跟踪中,首先目标个数较多,而且未知,这就使目标的匹配问题较复杂。另外多个目标之间还会相互影响,比如遮挡等,这使得目标之间并不是相互独立的。

目标跟踪方法可以大体归为两类

recursive methods:这类方法当前帧目标的状态仅有之前一帧或者若干帧信息确定。比如经典的Kalman滤波,粒子滤波

nonrecursive methods:这类方法则普遍在一个时间窗口内估计所有的轨迹,也就是说既利用了之前帧的信息也利用到了后续帧的信息。

对于解决现实问题,我们应首先建立模型,然后求解模型。而对于多目标跟踪问题1).输入数据包含噪声较大,需要相对鲁棒的模型,2).如果一个模型能够准确的刻画实际中状态,那么模型很快就会高度非凸,相当复杂难以获得最优解。

所以在nonrecursive的多目标跟踪问题solutions中,有部分方法是构建相对简单的模型以获得该模型最优解,而另外一部分方法则尽可能的构建贴合真实情况的模型,最终使用次优解作为输出。

本文就属于后一类,模型尽可能详细的反映出真实情况,对于非凸的模型,使用次优解代替最优解。论文结论表明,这种方法比构建相对简单模型以获得最优解的方法性能更好。

Notation:

Notations.jpg

其中,即轨迹的长度。

模型

本文提出的模型包含6个部分,即最终轨迹上点与检测响应的紧密程度、前后帧间关联目标的表观相似性、目标的运动特性(同一个目标连续帧之间速度不可能突变)、目标间的相互遮挡问题(多个目标不能出现在同一个空间位置)、运动的持续性(大多数目标都有固定的起始和终止区域)、正则项(不能让轨迹多到每一个响应都是一个轨迹)

其中分别对应于前面6中情况的能量,每种情况都使用的是连续函数,以方便求导。

跟踪位置和检测位置的贴合度

其中,表示第t帧中检测到的目标的个数,表示检测到的响应是第g个目标的概率,近似表示目标区域的面积,这就表示如果目标检测和跟踪差别一样大,那么对较大目标的影响较小。主要用来惩罚对于‘证据’不足的样本。比如一个跟踪目标仅仅0.5可能性,那么这不靠谱的跟踪点当然要对目标影响少一点。但简单的并没有充分利用不同目标的‘证据’,而是对所有的跟踪点同样对待,其中甚至还包括遮挡位置估计出来的跟踪点。对于遮挡估计出来的点当然希望他最好不要影响我的能量函数,因为你本身就不大可靠,你要是再作用很大,很容易导致误差累计。所以将修正为与‘证据’有关的量。

Note. 由于是直接刻画所有轨迹的能量函数,那么轨迹都是完整轨迹,即轨迹中间是包含对遮挡或检测丢失估计出来的响应的。

Dynamic Model

对于运动目标,其相邻帧间的运动应该是缓慢的、平滑的,所以可能通过限制速度矢量之间的关系刻画运动目标的动态模型

Note. 中涉及了时域信息。

Mutual Exlusion

同一时刻不同的目标不可能出现在同一空间位置上,而且MTT中一个目标属于切仅属于一个轨迹,因此应该对同一帧中相互靠近的跟踪点进行惩罚,禁止跟踪点出现重合的状况出现

是指所有的帧,是和目标大小有关的量

Note. 涉及到了跟踪点的空间相关性。

Trajectory Persistence

跟踪的过程中有可能出现一条轨迹被跟踪成若干段的现象,为了一定程度的缓和这种现象,可以给轨迹的出入口指定一定的区域,那么离这个区域越远的点越不可能作为轨迹的起始点或者终止点。论文中使用sigmod刻画一条轨迹的起始和终止点正确的概率。

其中表示 距离标定区域最近边界的距离。 论文中soft entry margin 设为.

Note. 加入了一定的先验知识。

Regularizer

必须对轨迹的数量和长度进行限制,轨迹的个数不可能任意多,那样每个检测都可以作为单独的轨迹了。。。同时每条轨迹不能太短,太短可能是因为噪声引起的,所以加上如下正则项

Appearance Model

论文中刻画目标的方式和meanshift方法类似,都是使用直方图描述目标,然后再使用巴氏相关系数评估两个分布的相似度。

为了使目标函数可导,同时让直方图更加鲁棒,在统计直方图时使用了Gaussian平滑

其中表示该目标的中心,是示性函数,用来限制目标范围内的点。

巴氏相关系数定义为

这里指直方图的长度,论文中将RGB空间图像在每一个channel中都划分出16个bins。

这种描述方式能够很便捷的描述目标,但是对于遮挡或部分遮挡的图像估计出来的响应,获得的直方图肯定是相对不可靠的,所以要降低这种情况的考虑力度,可以通过响应的可见度来评判信赖程度。

其中是关联响应对的可见度的几何平均值

显然相似度BC越高越好,也就是说AC越小越好。

另外,论文中说实践表明,直接使用AC没有采用软阈值化的方法好,采用软阈值化的方法能够更好的鉴别具有很大相似性的match和identity switch。

遮挡

目标跟踪中一个很重要的问题就是遮挡,遮挡会导致跟踪中断、identity switch等问题。遮挡主要包含三种类型

  1. interobject occlusion:这是多目标跟踪中的问题,可能多个目标在运动过程中,会导致其他目标部分遮挡甚至完全遮挡。

  2. scene occlusion:在运动中,目标还有可能被场景中静态物体遮挡,比如行驶中的车辆可能被路标指示牌遮挡等。

  3. self-occlusion:在跟踪问题中,有些目标是非刚体物体,自身可能会出现旋转或者变形,称之为遮挡,比如在行人检测中行人的转体动作等。

本文方法主要考虑了相互遮挡的问题。一般刻画目标遮挡都是使用目标间相互重叠区域所占目标总体大小的比例描述遮挡程度(scene occlusion就是目标和scene的重叠区域),但是为了让目标函数可导,这里使用了二维高斯分布刻画目标,那么目标间的重叠区域就可以使用

刻画,其中表示目标的高斯区域表述。是目标的区域中心,表示协方差矩阵

两个高斯的乘积还是高斯,所以相互遮挡可以通过下面为归一化的高斯计算

现在就要确定谁被遮挡了,也就是说判断谁比较靠近摄像头。文献[1]曾提出一种模型,这种模型认为摄像机一般都是俯视角度拍摄,所以可以通过目标的纵坐标来判定谁靠前。论文中也采用了这种模型,但是为了模型能够可导,论文中使用sigmoid函数去度量目标靠前的概率,比如相对于第i个目标,那么第j个目标在i之前的概率为.

那么,定义遮挡矩阵,表示目标i被目标j遮挡,且遮挡了的概率。不考虑一个区域被多个目标遮挡,那么就可以评估目标i的可见度。然后这个max函数又不可导了,所以又要使用指数函数近似,即目标i的可见度为

模型求解

显然上述问题是一个非凸问题,那么就没办法直接得到最优解。所以本文提出了一种类似于蒙特卡洛的方法,在确定中引入随机量,使搜索状态有一定的可能性跳出局部最小值,以希望能够找到全局最优值。这里的方法和蒙特卡洛方法的不同在于不是完全随机的跳动,而是选择让目标函数值下降的路线随机跳动。

其算法过程如下:

Algorithm.jpg

其中grow,shrink,add, remove.merge,split分别表示估计的生长,收缩,添加,移除,合并与分裂,示意图如下

jumps.jpg

这里需要说明的是add过程,如果出现一个可靠都很高的检测响应却未曾划归为任何一个trajectory,那么可以先假设这是一个新轨迹的起点,新轨迹表示为

将新轨迹添加到轨迹集合中。

Note.

1.算法在实现的过程中,每一个Jump move中都遍历了所有的轨迹,而在寻找move中最优值的过程中参数的选择使用的是贪婪法。

2.算法的初始化过程使用的是简单的Kalman滤波得到初始的轨迹段。

实验

  1. 关于参数的鲁棒性

    实验表明,算法对模型中6个分量的权重系数在一定区间具有很好的鲁棒性,结果如下图所示,其中减小时,目标函数值急剧下降反映出项的重要性,即目标间相互排斥的特性。

parameter study.jpg
  1. 算法搜索策略的有效性

    对比了5中搜索策略

  • 找到使目标函数下降最大的move类型和trajectory,并执行move

  • 找到使目标函数下降最大的move类型,并对所有的轨迹执行该类型操作

  • 使用预定义的move顺序,但在每个move中仅仅选择下降最大的一个trajectory

  • 和论文中方法唯一不同点在于预定义的move顺序不同

  • 随机move,就是不保证每次move能量下降

实验结果表明,在所有的搜索策略中,文中给出的搜索策略最棒,而且和第4个搜索策略相比差异不大表明该搜索策略对预定义的move顺序要求不高。

  1. 模型的有效性

    这里对比了四种方法,添加occlusion model + appearance 、 添加occlusion model、不含occlusion model,extended Kalman Filter还有k-shortest paths方法。

    实验结果表明appearance是很有必要的,另外对于目标密度低的场景,occlusion model用处不大,但对于dense scene中的多目标追踪,occlusion explicitly reasoning能显著提升跟踪结果。

总结

该论文从运动的整体性出发,提出了一个整体的,比较贴合运动特征的能量函数,然后通过对该能量函数进行寻优得到较好的跟踪结果。

该能量函数首先考虑了与检测结果的关系,毕竟追踪是源于检测。其次对于跟踪中的响应依据实际运动的特性分别限制了表观相似性、运动一致性、运动目标互斥性,估计的持续性以及显示分析了目标之间的遮挡关系,当然还包括对模型的正则化项处理。

对于高度非凸的能量函数,论文给出了一种结合共轭梯度法寻找局部最优解和jump move寻找全局最优解的方法。

文章的展望

  1. 希望能够利用基于部件的检测提升算法

  2. 希望能够利用机器学习的方法自适应框架中参数的学习、甚至能量项的学习。


  1. B. Wu, R. Nevatia. Detection and tracking of multiple, partially occluded humans by Bayesian combination of edgelet based part detectors[J],IJCV,75(2),247-266

(MTT)连续能量函数最小化方法的更多相关文章

  1. Bundle Adjustment---即最小化重投影误差(高翔slam---第七讲)

    一.历史由来 Adjustment computation最早是由geodesy的人搞出来的.19世纪中期的时候,geodetics的学者就开始研究large scale triangulations ...

  2. Qt窗口操作函数(最大化,全屏,隐藏最大化,最小化)

    Qt窗口中的一些小技术总结 //Qt主窗口没有最小化,最大化按钮且最大化显示  int main(int argc, char *argv[]) { QApplication a(argc, argv ...

  3. 能量最小化初探,graphcuts能量最小化调用

    1.相对于能量函数来说,能量最小化的办法都有哪些? 梯度下降 模拟退火 图割 2.这个 跟最优化问题的求解,有什么联系跟区别呢? 基本上差不多,其实就是求出来了函数的一个最小值,我们看问题的时候不妨把 ...

  4. layer最大话.最小化.还原回调方法使用

    <head> <meta charset="UTF-8"> <title>layer最大话.最小化.还原回调方法使用</title> ...

  5. Qt 窗口操作函数(置顶、全屏,最大化最小化按钮设置等)

    一.窗口置顶 与 取消置顶 void MainWindow::on_windowTopButton_clicked() { if (m_flags == NULL) { m_flags = windo ...

  6. Q窗口操作函数(窗口最大化,全屏,隐藏最大化最小化按钮)

    //Qt主窗口没有最小化,最大化按钮且最大化显示  int main(int argc, char *argv[]) { QApplication a(argc, argv); TestQtForWi ...

  7. C#实现WinForm禁止最大化、最小化、双击标题栏、双击图标等操作的方法

    from:http://www.jb51.net/article/71319.htm 本文实例讲述了C#实现WinForm禁止最大化.最小化.双击标题栏.双击图标等操作的方法.分享给大家供大家参考.具 ...

  8. centos 虚拟机中最小化安装,无法上网的解决方法

    无法上网原因:因为最小化安装以后,centos 默认未开启网卡 解决方法进入 /etc/sysconfig/network-scripts/ifcfg-enp0s3 文件中 进入编辑模式,将 ONBO ...

  9. 解决winform中mdi子窗体加载时显示最大化最小化按钮的方法

    场景:在mid加载子窗体的时候如果指定WindowState为Maximized,加载完成后主窗体会显示最大化.最小化.关闭的按钮图标. 解决方法: 1.更改主窗体FormMain的属性.制定Main ...

随机推荐

  1. [Nhibernate]二级缓存(二)

    目录 写在前面 文档与系列文章 更新数据 二级缓存管理 总结 写在前面 本篇文章也算nhibernate入门系列的结尾了,在总结nhibernate系列的过程中,遇到了很多问题,学习的过程也是解决bu ...

  2. visio二次开发初始化问题

    (转发请注明来源:http://www.cnblogs.com/EminemJK/) 问题: axDrawingControl1初始化失败((System.ComponentModel.ISuppor ...

  3. 第2月第1天 GCDAsyncSocket dispatch_source_set_event_handler

    一.GCDAsyncSocket的核心就是dispatch_source_set_event_handler 1.accpet回调 accept4Source = dispatch_source_cr ...

  4. Alpha版本十天冲刺——Day 1

    站立式会议 会议总结 队员 今天完成 遇到的问题 明天要做 感想 鲍亮 α版本接口文档初步编写,任务统筹 绘制燃尽图出错 学习http资源访问,服务器请求接口demo测试 作为PM,之前对团队具体要做 ...

  5. 拖拽对DOM的影响

    前一段时间公司要对上传列表中多文本输入框添加富文本编辑功能,所以最初的想法是引入富文本编辑器插件,对每个多文本输入框实例化一次.但是上传列表还有一个可以拖拽排序的功能,在初次实例化以后,再拖拽元素就会 ...

  6. 安装切换openjdk

    安装各种版本openjdk sudo apt-get install openjdk-6-jdk sudo apt-get install openjdk-7-jdk sudo apt-get ins ...

  7. canvas案例——画时钟

    基本思路,先画一个200半径的圆 ctx.arc(250,250,200,0,2*Math.PI); 然后再画时分刻度,可以先利用translate变化坐标到圆的中心点,然后再通过rotate旋转 / ...

  8. js 连续赋值。。理解不了,先占坑

    http://www.cnblogs.com/xxcanghai/p/4998076.html

  9. ecplise 常用快捷键

    /* * alt+/ * * A:main * main+alt+/ * B:输出语句 * syso+alt+/ * C:提示作用 * * */ /* * 常用快捷键 * 1.格式化:ctrl+shi ...

  10. 设计模式--单例模式Singleton(创建型)

    单例模式很显然是定义一个类,这个类在程序中只有唯一的实例对象.一般单例类的构造函数是私有的,只能通过调用静态函数GetInstance来获取实例. 一.单例模式有三种:懒汉式单例.饿汉式单例.登记式单 ...