Visual Tracking with Online Multiple Instance Learning(MIL)

2023-11-23 12:59

本文主要是介绍Visual Tracking with Online Multiple Instance Learning(MIL),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Visual Tracking with Online Multiple Instance Learning[paper]

目标跟踪算法MIL是2009年的CVPR,官方称其算法即将集成到openCV中,因此官方不再提供代码支持.
下面只针对其paper内容做个人阅读总结,有不正确之处还请批评指正.
摘要

  • 一般目标跟踪系统由三部分组成:image representation, appearance model, motion model. 本文集中研究目标跟踪自适应外观模型。
  • 跟踪技术:tracking by detection——通过训练一个在线 discriminative classifier, 用来将跟踪目标从背景中分离出来。
  • 传统的监督学习当跟踪过程中出现轻微错误时就能导致训练失误,降低分类正确率,甚至发生极大地漂移。MIL算法就是解决上述问题,使跟踪器在少量参数调整情况下拥有更好地鲁棒性。
  • 本文主要讨论外观模型问题,并且文中提到“默认使用Haar-like特征对于适度的旋转与尺度变化下是不变的”,所以本文设计默认特征旋转与尺度是不变的。
  • 本文中 image representation 由一组 Haar-like特征组成(使用Haar筛选器筛选出图像的边缘、线条、中心圆等信息,Andrew Ng在deeplearning课程中讲过 ); appearance model 是一个discriminative classifier, 其返回p(y=1|x),其中x是一个patch,y是0或1;运动模型使用贪心策略更新跟踪器位置,即在上一帧跟踪器的半径s内取一系列patches,然后计算所有p(y=1|x),p(y=1|x)取最大值的x即为本帧的跟踪器位置(运动模型更新如下图所示)。
             

整体思路

在进行自适应外观模型的更新时,正负样本的选择是一个重要的问题。在本文中,样本的选择使用bag的形式,这也正是MIL的关键所在。
               
使用上述代码是进行正负样本的选择:

  • 在时刻t输入第k帧图像
  • 在第k-1帧(t-1时刻帧)的半径s内随机剪切出一系列patches(Haar-like特征),同时计算出其向量值
  • 使用MIL分类器得出每一个x片段(patch)p(y=1|x)的概率
  • 选取p(y=1|x)最大值的patch作为当前帧目标的位置
  • 以当前目标位置为中心在其半径r内随机剪切出一系列patches作为正样本bags,在大于半径r小于半径 β \beta β内随机剪切出一系列patches作为负样本bags
  • 使用选取的正负样本集对外观模型进行更新
注:

1.正负样本集{( X 1 , y 1 X_1,y_1 X1,y1)…( X n , y n X_n,y_n Xn,yn)},其中 X i X_i Xi={ x i 1 , . . . x i n x_{i1},...x_{in} xi1,...xin}是样本bags, x i j x_{ij} xij是剪切出的每一个patch,而 y i y_i yi并不是每个样本标签,而是包标签,文中对于 y i y_i yi的定义为: y i y_i yi= max ⁡ j \max \limits_{j} jmax( y i j y_{ij} yij)。
2.文中提出如果一个bag内所有patch中至少有一个正样本,那么bag标签就为positive,若bag内所有patch为负样本,那么bag标签为negative。如此就解决了传统监督学习在训练期间对每一个具体的patch的标签未知,无法打标签情况。

discriminative classifier

1.文中使用的discriminative classifier并不是一个简单的弱分类器,而是通过boosting将许多弱分类器组合成一个强分类器,即将弱分类器线性叠加,形成Haar级联分类器:
                    H(x) = ∑ k = 1 K \sum_{k=1}^K k=1K a k h k ( x ) a_kh_k(x) akhk(x)
其中 a k a_k ak为权重标量, h k h_k hk是弱分类器,K为选取的要级联的弱分类器数(文中提到可以将每个弱分类器作为一个特征,选取K个特征训练模型,K一般远小于全部弱分类器的个数M)。

2.由于AdaBoost的指数损失函数特性不能很容易的适应MIL问题,因此本文采用增强的统计视图方式优化损失函数J,在此视图下,弱分类器按如下式进行更新:
                   (1)
其中 H k − 1 H_{k-1} Hk1是第k-1个由弱分类器组成的强分类器

3.当进行弱分类器更新时,我们更新所有的弱分类器,然后按照下面公式从中依次选出K个弱分类器h:
                  (2)
文中,对于当前视频帧的训练集{( X 1 , y 1 X_1,y_1 X1,y1)…( X n , y n X_n,y_n Xn,yn)},其中 X i X_i Xi={ x i 1 , . . . x i n x_{i1},...x_{in} xi1,...xin},使用最大似然函数求解每一个bag为正样本概率,好处是可以减少正样本bag中存在负样本对模型的影响,同时可以将cost function变成凸函数,方便求最值:
                  (3)
其中:
                  (4)
文中提到此模型为Noisy-OR模型,用以求取正样本bag概率
而:
                  (5)
                  在这里插入图片描述(6)

综合以上三点,文中判别模型更新伪代码如下:
            在这里插入图片描述

  • 输入训练数据集{ X i , y i X_i,y_i Xi,yi},即我们在上面提到的:以当前目标位置为中心在其半径r内随机剪切出一系列patches作为正样本bags,在大于半径r小于半径 β \beta β内随机剪切出一系列patches作为负样本bags
  • 第3-8行:求每一个弱分类器的损失函数(cost function)
    ( a )第5行求样本 x i j x_{ij} xij在第m个弱分类器上的概率值
    ( b )第6行求bag样本 X i X_i Xi在第m个弱分类上的概率值
    ( c )第7行求第m个弱分类器在所有bags上的cost(这里实际上取得是cost的负数,也就是-cost,关于cost函数的介绍及推导Andrew Ng在machine learning课程中有详细讲解)
  • 第8行是依次从M个弱分类器中选取K个最大弱分类器(在上面第7步,求取的是-cost,那么想要得到最小cost,即是取第7行的最大值)
  • 第10行使用 h m ( x ) h_m(x) hm(x)更新 h k ( x ) h_k(x) hk(x),更新规则以公式2形式。
  • 第11行使用得到的 h k ( x ) h_k(x) hk(x)更新 H i j H_{ij} Hij,从而进行 h K + 1 ( x ) h_{K+1}(x) hK+1(x)的求取
  • 输出为K个弱分类器线性组合成的强分类器

注:弱分类器实现细节
本文中每一个弱分类器 h k h_k hk都由一个Haar-like特征 f k f_k fk与四个参数( μ 1 , σ 1 , μ 2 , σ 2 \mu_1,\sigma_1,\mu_2,\sigma_2 μ1,σ1,μ2,σ2)组成,其返回的是一个对数概率值。
                   (7)
其中 p t p_t pt( f t ( x ) ∣ f_t(x)| ft(x)y=1)服从二项分布( μ 1 , σ 1 \mu_1,\sigma_1 μ1,σ1), p t p_t pt( f t ( x ) ∣ f_t(x)| ft(x)y=0)服从二项分布( μ 2 , σ 2 \mu_2,\sigma_2 μ2,σ2)。
文中假设p(y=1) = p(y=0) ,使用贝叶斯来计算上式 h k ( x ) h_k(x) hk(x),当接收到新数据{( x 1 , y 1 x_1,y_1 x1,y1)…( x n , y n x_n,y_n xn,yn)}时,使用如下规则进行参数更新:
                   在这里插入图片描述(8)
其中 γ \gamma γ是学习率参数, μ 0 \mu_0 μ0 σ 0 \sigma_0 σ0更新方式类似。

Discussion

文中列出了需要特意注意的几个问题:
1.使用带有正样本的包标签训练弱分类器并不是最优办法,因为正样本包中有些patch可能是负样本。本文中使用最大似然函数求解每一个bag为正样本概率( 公式(3) )
2.在统计视图下弱分类器的更新公式为(1),而模型中使用的为公式(2),因为在实际应用中,二者对于分类器性能上没有差别。
3.文中提出,公式(2)的优化仅在当前实例中计算,并没有保留以前的观察数据,因此存在过拟合风险。使用弱分类器就可以避免这类情况,因为这些分类器保留了先前的观察数据,从而平衡当前数据与历史数据。

参考博客:越野者、 小小菜鸟一只、HEscop、Qiang Wang

这篇关于Visual Tracking with Online Multiple Instance Learning(MIL)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/418110

相关文章

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

OpenStack实例操作选项解释:启动和停止instance实例

关于启动和停止OpenStack实例 如果你想要启动和停止OpenStack实例时,有四种方法可以考虑。 管理员可以暂停、挂起、搁置、停止OpenStack 的计算实例。但是这些方法之间有什么不同之处? 目录 关于启动和停止OpenStack实例1.暂停和取消暂停实例2.挂起和恢复实例3.搁置(废弃)实例和取消废弃实例4.停止(删除)实例 1.暂停和取消暂停实例

简单的Q-learning|小明的一维世界(3)

简单的Q-learning|小明的一维世界(1) 简单的Q-learning|小明的一维世界(2) 一维的加速度世界 这个世界,小明只能控制自己的加速度,并且只能对加速度进行如下三种操作:增加1、减少1、或者不变。所以行动空间为: { u 1 = − 1 , u 2 = 0 , u 3 = 1 } \{u_1=-1, u_2=0, u_3=1\} {u1​=−1,u2​=0,u3​=1}

简单的Q-learning|小明的一维世界(2)

上篇介绍了小明的一维世界模型 、Q-learning的状态空间、行动空间、奖励函数、Q-table、Q table更新公式、以及从Q值导出策略的公式等。最后给出最简单的一维位置世界的Q-learning例子,从给出其状态空间、行动空间、以及稠密与稀疏两种奖励函数的设置方式。下面将继续深入,GO! 一维的速度世界 这个世界,小明只能控制自己的速度,并且只能对速度进行如下三种操作:增加1、减

【Visual Studio 报错】未加载 wntdll.pdb(一种可行的解决办法)

调试程序时,会出现下面这个报错 分析原因: 出现未加载 wntdll.pdb 报错大概率是你的指针使用错误 ,比如使用野指针、越界访问、或者堆区空间释放方式错误等。 这里以 堆区空间释放方式错误 为例子 1、堆区开辟的数组空间使用 delete 释放 // 堆区开辟的数组空间使用 delete 释放int* p = new int[10];delete p; 正

查看Excel 中的 Visual Basic 代码,要先设置excel选项

1. excel VB的简单介绍 百度安全验证 2.excel选项设置 excel表格中在选项->自定义功能区域,选择开发工具,visual baisc/查看代码,即可看到代码。 3.excel已经设置,可以直接查看

[VC] Visual Studio中读写权限冲突

前置场景: 编译没有报错,但是运行提示 内存异常: 情景1: 如下代码运行异常,提示引发了异常:写入权限冲突。*** 是 0xFFFFF..... char* str = (char*)malloc(10);str[0] = 0x30;  解决方案:要包含头文件<stdlib.h>  情景2: 在FileA文件调用FileB文件的函数,但是在FileA中却没有声明该B函数的原型

解决Visual C++ 中相互包含头文件的问题

在编MFC应用程序时,经常会遇到头文件相互包含的问题,很是苦恼,于是便求助于强大的CSDN,得到如下答案:   方法一:利用友元类   我一共有两个类,由于要在两个类的头文件里互相应用对方,所以,在每一个类的头文件里面现包含另一个类的头文件,然后在该类的定义中声明另一个类为友元类。如下:    #include "B.h"      class CA: public CDialog

Stripe data files across multiple physical devices and locations

Stripe data files across multiple physical devices and locations 如果在没有做条带的磁盘(即从存储到OS没有做raid),那么就需要手工去做I/O的分布。切记,不应该将频繁使用的table和其index分开,这样会正大I/O; 针对tables、indexes、temp tablespace,首先调优SQL,其次如果真心无法再

如何简单而优雅地升级Visual NMP中的PHP版本

需求:自己想测试下不同版本的PHP性能,就想升级下 Visual 这个集成环境中PHP的版本 网上: 升级PHP到5.6.11  1、下载新的nts版的PHP并解压缩到bin\PHP下,保留原文件夹的名称; 2、将旧版PHP文件夹下的PHP.ini复制到新版的PHP文件夹下;修改复制的PHP.ini,将旧版PHP文件夹信息替换成新版PHP文件夹信息; 3、下载php_xdebug-2.3