1. 程式人生 > >Exploiting the Circulant Structure of Tracking-by-detection with Kernels 筆記

Exploiting the Circulant Structure of Tracking-by-detection with Kernels 筆記

這是一篇ECCV2014年的paper,在這篇paper中作者提出了kernelized correlation filter,並將其應用到了tracking中,從而有了15年PAMI的那篇文章,我再之前部落格中也記錄過

在這裡,我想重新介紹一下KCF,並且加上一點自己的認識。

track-by-detection的方法獲得了廣泛的應用,這個思想需要首先獲取樣本進行訓練,常用的方法就是 係數取樣。如下所示:

這種方法的缺點就是樣本之間有重疊,或者叫有冗餘並且比較慢,因為一般要採集大量的樣本。於是作者想exploite structure.作者的思想就是利用FFT來快速的合併所有subwindows的資訊,而不用迭代的取樣。

下面開始介紹主要內容。

先說一下作者的motivation: 在tracking-by-detection裡面的核心是分類器。訓練分類器需要採集正負樣本,作者打算採集所有的樣本,也就上面圖所示的那種dense sampling。

作者首先構造一個model:

------------------------------------------1

這裡L是損失函式,x和y分別是訓練樣本和標籤。函式f是: 

如果是線性SVM的話,L的表示式是:,如果是linear regression 的話,L的表示式是:作者指出,很多時候兩者效果接近,於是作者用後者代替前者。

那麼上面的公式1的閉式解就是:

------------------------------2

其中K是核矩陣,我們要求解的是w,這裡為什麼出來的是\alpha呢。其實這是利用了一個叫表達理論的東西:

,這裡有了alpha,就可以獲得w了,其中\pha是空間對映函式。為什麼要整這麼複雜,又是表達理論又是核的,這是因為很多時候沒法直接求w必須利用這些技術簡化求解。

OK,有了這些理論基礎之後,就開始進入下一步了:Circulant matrices。理解這個可以參考我的關於KCF的那篇blog,這裡簡單介紹一下,就是我們有了一個base sample之後,通過不斷的cyclic shift就可以得到一個circulant matrics C(u),

這個矩陣有什麼用呢?就是當我們用它來對vector進行卷積的時候很有用。例如我們表示兩個vector u和v的卷積,那麼就可固定v不動,讓u做cyclic shift得到C(u).那麼C(u)v就表示u和v之間的卷積運算。在頻率域下就可以表示為:

這些都是為了下面的dense sample做準備。給定一幅影象,假設是vector形式的,那麼下面的運算:

每進行一次就相當於對影象取樣一次。然後我們利用一個定理:

就可以得到:


然後公式2就變成了:


當新的樣本z來了之後,分類器輸出為:

上面公式意思是挨個計算xi與輸入z之間的卷積運算。如果我們想同時計算z與xi之間的卷積運算,那麼 :

後面就是對K採用的一些核技巧。不再介紹了。