1. 程式人生 > >運動目標跟蹤(十六)--OAB,SemiT,BSBT跟蹤

運動目標跟蹤(十六)--OAB,SemiT,BSBT跟蹤

原文:
http://blog.csdn.net/ikerpeng/article/details/18985573

文章:on-line boosting and vision 

這是cvpr2006年的文章,非常經典的一篇文章。還有原始碼和資料集下面記錄一下我讀這篇文章的一些理解。

Boosting的基本思想: 三個臭皮匠抵一個諸葛亮   利用一些容易得到的弱分類器 組合訓練形成強分類器。

本文中基本思想就是這樣的 關鍵用到了 :boosting用於特徵選取

接下來一步一步的介紹:

1、off-line boosting and on-line boosting

off-line boosting :

首先, 給定一個訓練資料集,這個資料集裡面含有:L個examples,每一個example有一個m維的特徵向量,每一個example還有一個標籤1或是-1;用uniform distribution初始化每一個example的權重,即最開始每個example的權重都是1/L

然後,初始化N個弱分類器(which have been generated by repeating training with different subsets of  training data!),再通過以上訓練集進行訓練。第一次訓練時,對第一個弱分類器,通過它的錯誤率確定它的權重,同時更新訓練樣本集的權重(增加分類錯誤的example的權重),然後,用現在的訓練樣本集訓練第二個弱分類器,計算它的權重,並更新訓練集的權重。如此迭代,將得到的分類器與它的權重相乘,累加起來便得到一個強分類器。

on-line boosting:

思路基本上一樣,但是為了實時性,就必須要有少的訓練樣本,所以在跟蹤當中,一般選擇第一幀中得到的正負樣本進行樣本擴充,然後進行訓練,訓練的過程基本上同上面一致。

2、off-line boosting for feature selection(and online)

核心思想:對於每一個特徵,應該有一個響應最好的弱分類器。因此,通過boosting,可以選出最好的特徵組。

首先,根據所擁有的正負樣本,我們可以得到一個特徵池(比如說Harr特徵的feature pool;文章中說這個特徵池就會是很大,所以要選一個特徵池的子集);

然後,從這個特徵池中選擇少量的訓練樣本訓練出一組弱分類器;

再就是,通過boosting迭代,每一次選出一個響應最好的特徵,同時,也根據分類器的錯誤率計算出相應的權重;

由此,構造出了一個強分類器,也選出了相同數量的響應最好的特徵組。

on-line :

on-line boosting  for feature selection 最大的不同就是要先隨機初始化一組selectors組合一個強分類器,然後再來更新

首先,隨機的產生N個selectors,通過通過EM演算法產生M個弱分類器;

然後,對於每一個selector,進行更新:通過帶權重的sample,對M個weak分類器進行訓練,選出錯誤率最低的那個weak classifier代替這個selector同時,隨機的產生一個weak classifier代替錯誤率最高的那個分類器;

最後,如此迭代,得到一個不斷更新的strong classifier  (以上部分都是在一個特徵池中完成的)

離線學習方法需要一次可以獲得全部的訓練樣本。而當訓練樣本無法一次性全部獲得時,例如資料是一幀一幀到來的,通常我們採用線上學習方法。首先利用第一幀的資料初始化跟蹤器,通常當第二幀到達時,再利用第二幀的資料更新分類器。當然,線上更新的框架有很多,方法各不相同。

on-line是不是一直在通過後面得到的資訊更新分類器?

是的,但是還有原來保留的資訊

若是這樣,是不是就是速度慢的原因?也就是漂移的原因? 

是的,但是若是不使用線上的話,分類器的適應能力很差。

是的,線上過程中,我們不斷利用後面幀中的樣本更新分類器,如果樣本標記錯誤,或者更新方式不佳,則很可能導致漂移問題。

文章中提到的卡爾曼濾波是為了構造一個弱分類器嗎?

不是 ,文中提到的“卡爾曼濾波”是為了估計正負樣本分佈的均值和方差。而求得正負樣本的均值和方差後,我們可以進一步估計正負樣本的高斯分佈。實際是為了均值和方差能夠穩定,濾波作用。

高斯分佈就是為了調節樣本的權重嗎?

不是,線上學習過程中,高斯分佈不是你所說的用於估計樣本的權重,而是為了根據文中的公式(12)進一步求得一個影象樣本x的弱分類器h(x)的值。

作者是online boosting的作者。寫這篇文章是因為on-line boosting存在一個明顯的問題:drifting。每一次對分類器更新所用的樣本是上一次得到的結果,即:tracker框出來的部分是正樣本,tracker之外的背景是負樣本。每一個錯誤的累加完全可能使得這個tracker得到的結果已經錯誤。因此,便產生了drifting問題。文章的提出真是要解決這個問題。

     文章中提到,視訊跟蹤中的 這個tracker 要不然就要提前知道每種變化的形態 (這個樣的結果就是tracker很複雜),這也就是他所說的 fixed tracker; 要不然就要適應不斷變化的背景,這就是所謂的adaptive tracker。 要自適應 ,那麼對於線上的跟蹤,漂移(drifting)是最大的問題 :每一次我們更新我們的tracker的時候都會有新的錯誤的引入(introduced)。解決的辦法:1、template tracker    2、geometric model   效果都不是很好。

    但是本文explore the continuum between fixed tracker and online learning methods 提出: semi-boost 用於跟蹤的演算法。分別克服了fixed tracker 適應能力差,online tracking drifting的問題。

    接下來文章回顧了2006年cvpr的那篇文章中的: boosting演算法 和boosting演算法用於特徵選擇(具體的參見上一篇online boosting tracking 閱讀)。這個是整篇文章的基礎;

    然後介紹了:offline semi-supervised boosting還有 semi-supervised on-line boosting for feature selection;

1、off-line semi-supervised boosting

     semi-Boost 是結合了graph theory和clustering以及其他方法而形成的演算法。基本的思想是:將無標籤的樣本擴充套件到loss function(the basic idea is to extend the loss function with unlabeled data)。

    為了實現上面說的將unlabeled sample extend into loss function 。於是,引入了一個叫相識度量的量:S(xi,xj),用它來表示兩個sample的相識度。

    然後,再引入兩個叫做:confidence的量:p(x)和q(x)。分別用來表示一個unlabeled sample x 屬於正樣本和負樣本的置信度(很顯然:p(x)- q(x)>0 則可以認為這個樣本是正樣本(這被認為是它的 偽樣本 標籤)相反就表示負樣本),同時也用 p(x)- q(x)的絕對值表示這個樣本的權重而這兩個量都和所有的有標籤、無標籤的樣本有關係,同時還和S(xi,xj)有關係。

    最後,我們將這些帶有偽標籤的樣本和labeled samples 一起進行boosting迭代,得到一個強分類器。(論文上的公式看起來比較複雜,還是可以定性的理解的

2、semi-supervised on-line boosting for feature selection

    on-line 方法基本思路一樣,將無標籤的樣本擴充套件到損失函式(the basic idea is to extend the loss function with unlabeled data )。也就是說,我們只要我們給unlabeled sample 確定一個偽標籤和一個權重就可以繼續往下做了。

    但遇到的問題是:上面的公式中的p(x)和q(x)等的計算需要知道所有的labeled and unlabeled samples。但是在online中我們不能得到所有的訓練集(since we are in a pure on-line setting we can not access the whole training set!)。於是,我們必須對unlabeled sample進行估計。

按照步驟來說:

    首先,對於labeled sample 來說,直接使用 on-line boosting for feature selection approach;

    然後,對於unlabeled sample 想辦法得到他們的偽標籤和權重,再使用上面的方法繼續下去。

    所以p(x)和q(x)求解就是關鍵。因為p(x)和q(x)和S(xi,xj)有關,而有參考文獻中提到:S(xi,xj)又約等於H(xi,xj)(H是強分類器)。於是,通過給定的labeled sample再學習到一個叫做H+(x)的分類器,它可以來估計S(xi,xj)。最終就可以將p(x)和q(x)表示出來了。也就可以得到 偽標籤和權重了 (當然 這個過程中使用到了一個假設:unlabeled sample的個數趨於無窮)。

總結:在semi-supervised on-line boosting 中的具體步驟是這樣的:首先,假設在第一幀中得到的跟蹤結果是正確的,將這個結果作為正樣本,連同隨機從背景中得到的負樣本,初始化一個分類器;利用這個分類器一個畫素一個畫素(?)的檢測,找到一個響應值最高的地方作為這個被跟蹤的物體最可能出現的位置(considered to be the new object position);將tracker中得到的樣本分解為小的patch塊,作為unlabeled sample(以前的方法是直接將它作為正樣本);使用前面的方法計算出這些patch塊的偽標籤和權重;使用on-line boosting的方法更新分類器,如此不停的迭代。

相似度S(xi,xj)解釋:

文章的作者就是半監督boosting的作者,這一篇文章詳細的說明了之前那一篇文章中提到的相似度的概念。

半監督學習的過程中,找到一個度量帶標籤樣本和無標籤樣本的相似度的方法是十分重要的。本篇文章提出了一個相似度方程學習的方式和半監督的方式相互結合的方法。

結合前面的文章我們知道boosting的方法是要最小化一個指數形式的損失方程。這個方程是這樣的: ,而對於半監督學習來說,這個損失函式就變成:。最小化損失函式的過程變成是找到一個響應最好的弱分類器以及得到相應的權重的過程。具體的推導過程在作者的半監督boosting的文章中已經說明了。這裡重點是說明了相似度度量的定義和求解的方式。

    相似度度量S(xi,xj)是這樣定義的:,其中方差表示的是一個比例引數。d(xi,xj)xi樣本和xj樣本的距離。這個距離由:

決定,其中Hd是一個訓練過的、歸一化的分類器。取值為[-1,1]。於是,我們知道得到這個分類器便可以求得損失函式取得最小值時的那個弱分類器和它的權重了。而在訓練的過程中,假設現在已經有一個先驗的分類器了。對於兩個樣本,顯然,他們通過這個分類器得到的結果越是相同表明他們越是相似。於是通過這種想法得到距離新的計算方法:於是,接下來的步驟和半監督boosting的方法相似。

****************************************************************************************************************************************************************************************************************************************************************************

這篇文章是中科院自動化所2009年發在ICCV上面的文章。用一句話來總結這篇文章是:The most important contribution is that we find a boostingerror upper bound in a co-training framework to guide the novel tracker construction。這篇文章正是發現一般的boosting和co-training的方法,他們的得到的結果的錯誤率有一個上界。於是找到這個錯誤率,並通過對它的最小化來引導tracker的生成。由此便得到了一個準確率很好的tracker。作者同時還對這個上界進行了證明。這就是這篇文章主要做的工作。(足見作者的數學功底)

    看完了論文的introduction後知道09年前的主要的tracking的演算法和他們的特點:1、LDA 簡單但是tracker效果不能很好的提高;2、基於SVM的support vector tracker效果好,但是降低了對於複雜背景的適應能力;3、使用多特徵的Ensemble tracker 有明顯的優勢,但是他是對pixel操作的,丟失了很多的結構資訊;4、on-line boosting有很好的適應能力,但是會漂移(用文章的原話說是:self-training process which use the classification results toupdate the classifier itself)。很明顯作者也關注到06年的這篇on-line boosting的文章中存在的問題:拿檢測到的結果來更新分類器。於是他也想到了半監督的方法(這篇論文的作者08年的另一篇論文就是通過semi-supervised方法改進了這篇論文)。不同的是他通過co-training和boosting的方法。

    如他的文章所說,他不是簡單的將boosting和co-training合起來,而是匯出boosting error的上界,並由此構造分類器。如下面的Eq(1)所示,是一個有adaboost構造的強分類器。

    而這個強分類器的錯誤如Eq(2)所示,其中的Zt如Eq(3)所示。而Eq(3)中的Dt(i)表示第i個sample第t次訓練時的歸一化權重。結合Eq(1)就可以推匯出Eq(2)。比較好理解。

    而下面的這個式子是在2007年的一篇叫做:Bayesian co-training的文章中推匯出來的。其中的j是Multi-view algorithm(多視角演算法)中的係數,代表視角的個數。 本文中的view有兩個,即:j=2 。可見,若是使用貝葉斯決策構造分類器就滿足該式子。我們也由此知道這類錯誤有一個上界如Eq(4)所示。Eq(5)則是通過co-training構造的最終的強分類器。

  

    接下來,作者花了大量的章節來證明這個錯誤函式是有上界的。

首先,證明了下面的這個式子。證明的過程大概是這樣的:在不失一般性的情況下,做三個假設:1、training sample 量很大;2、在不同視角(view)中的特徵所給的標籤條件獨立;3、依照不同的視角的決策大體是一致的。然後,根據前面的Eq(2)(5),最重要的是在做Eq(1)的轉化便可以證明出來。

    但是這裡有個問題,上面的證明是認為所有的樣本都是有標籤的,於是推導到半監督的學習當中。將所有的樣本分為兩部分來求解,有標籤的和上面一樣;沒標籤的通過錯誤率來推導,關鍵步驟用到了Eq(4)。具體的證明還是要認認真真的看論文原文。

    證明了上面的結論後,就可以使用它來構造分類器了。下面具體列出本文使用的特徵和方法。

    本文對100幀影象進行跟蹤,對比其他演算法。將其中的前十幀作為是有標籤的,用來訓練。後面的90幀樣本作為無標籤的,用來測試。對前十個樣本,建立兩種特徵池,一種是顏色特徵(49種組合的color feature),另一種是LBP特徵(25種)。通過這兩種特徵構造直方圖,分別用來訓練分類器(也就是說,這裡採用的muti-view演算法中的視角數是2,即j=2)。這裡的弱分類器是通過bayesian decision criterion 構造的(也就說他的錯誤的大小存在一個上界,如Eq(4))。

    到此刻,前期的準備工作都已經完成。接下來的重點就是如何來更新分類器的問題了。作者的基本思路還是使用boosting方法:分別更新兩個視角中每個弱分類器以及它們的權重。然後綜合兩個視角的結果(co-training)構造強的分類器。關鍵的不同時更新規則的不同。首先找到這種分類器的錯誤的表示式;然後,得到它的上界;最後,將這個上界最小化,於是相應的選出錯誤最小的那個弱分類器以及得到它的權重,組合構造出強分類器。演算法的虛擬碼如下:

   文章的優點:使用co-training半監督的方法,很好的結合了labeled和unlabeled樣本,克服了on-line演算法的漂移的問題。

               缺點:推導較為複雜不易傳播推廣;以前十幀作為訓練樣本,不知道這是不是他的演算法比別人的好的原因。