matlab求kcf算法响应图_Kernelized Correlation Filters(KCF)算法
目前在online visual tracking這個領域,已經涌現出很多的跟蹤算法,比較知名如TLD,Struck,OAB,CT等等。但是能做到非常快速而且效果還不錯的相對就較少了,好多算法都是剛剛能實時,而且還是在圖像分辨率不是很大的情況下。之前在博客里提到一篇該領域的測評綜述1,對該領域大部分算法進行了一個總結和評估,作者在一個有50個視頻的數據集上測試了29個算法,其中速度和效果都還不錯的算法有TLD2和Struck3。Struck的評價運行速度大概是20幀/s,TLD相對快一點,,大概28幀/s。但這個速度仍然不是很快,而14年的一篇paper提出了一種叫做KCF(Kernerlized Correlation Filter)4的跟蹤算法使得速度有了很大提升,在同樣的測試數據集上,平均運行速度達到172幀/s(使用HOG特征的情況下)。而且據paper的實驗結果顯示,準確率比Struck和TLD都高。之所以能有這么快的速度,得益于作者巧妙地通過循環偏移構建出了分類器的訓練樣本,從而使得數據矩陣變成了一個循環矩陣。然后基于循環矩陣的特性把問題的求解變換到了傅里葉變換域,從而避免了矩陣求逆的過程,大大降低了算法的復雜度。
問題闡述
目前跟蹤算法主流的思想還是基于tracking by detection,而訓練樣本的選擇基本上就以目標中心為提取正樣本,然后基于周圍的圖像提取負樣本。大部分算法都是采用非正即負的方法來標記訓練樣本,即正樣本標簽為1,負樣本為0。這種標記樣本的方法有一個問題就是不能很好的反應每個負樣本的權重,即對離中心目標遠的樣本和離中心目標的近的樣本同等看待。所以就有算法提出使用連續的標簽進行標記樣本,即根據樣本中心里目標的遠近分別賦值[0,1]范圍的數。離目標越近,值越趨向于1,離目標越遠,值越趨向于0。事實也證明這種標記樣本的方法能得到更好的效果,比如Struck和KCF。Struck是通過一種loss函數隱式地采用了這種連續的樣本標記方法,而KCF則通過使用[0,1]范圍的值作為樣本的回歸值,從而給不同偏移下得到的樣本不同的權重。
首先,我們先介紹一個簡單的線性回歸模型,然后再討論引入kernel之后的情況。樣本訓練過程實際上是一個嶺回歸問題,或者叫做正則化最小二乘問題,它有一個閉式的解。假設給定一些訓練樣本及其回歸值 {(x1,y1),(x2,y2),...,(xi,yi),...}{(x1,y1),(x2,y2),...,(xi,yi),...} ,其訓練的最終目標是找到一個函數 f(z)=wTzf(z)=wTz 使得如下殘差函數最小,
minw∑i(f(xi)?yi)2+λ∥w∥2(1)(1)minw∑i(f(xi)?yi)2+λ∥w∥2
其中, λλ 是正則化參數,防止過擬合的。上式的閉式解可以參考線性最小二乘的求解得出如下,
w=(XTX+λI)?1XTy(2)(2)w=(XTX+λI)?1XTy
這里 XX 是由一個樣本的特征向量占一行組成的樣本矩陣。 yy 是對應每個樣本的回歸值 yiyi 組成的列向量。 II 是個單位矩陣。 因為考慮到后面要在傅里葉域進行計算,這里給出一個復數情況下的求解結果,其中 XHXH 是 XX 的共軛轉置, w?w? 是 ww 的共軛。
w?=(XHX+λI)?1XHy(3)(3)w?=(XHX+λI)?1XHy
現在問題來了,如果直接求解上述閉式解,其中的求逆計算隨著樣本數的增大是非常耗時的。顯然直接求解的方式是不靠譜的,這里這篇paper的作者通過巧妙地把上述閉式解變換到傅里葉變換域的方式,從而避開了矩陣求逆的運算,大大節省了運行時間。而這也是這篇paper的主要貢獻所在。
DFT下的線性回歸
為了解釋的簡明性,這里僅僅就一維的單通道信息做分析,也就是說這里的 xx 都是一維向量,當然推廣到二維也是適用的,而且實際上代碼中也的確就是在二維上做的。我們看到式 (3)(3) 中的樣本矩陣 XX 如果是一個循環矩陣的話,該式子的計算就會變得容易很多。即,
X=C(x)=?????????x1xnxn?1?x2x2x1xn?x3x3x2x1?x4?????xnxn?1xn?2?x1?????????(4)(4)X=C(x)=[x1x2x3?xnxnx1x2?xn?1xn?1xnx1?xn?2?????x2x3x4?x1]
其中, xx 是矩陣的第一行,整個矩陣式由這一行的循環偏移得到的。那我們假設存在這么一個循環矩陣,看看接下來式 (3)(3) 會變成怎樣。首先列出一個循環矩陣擁有的一個性質5如下:
X=FHdiag(x^)F(5)(5)X=FHdiag(x^)F
其中, xx 頭上的那個小帽 x^x^ 代表 xx 的傅里葉變換, FF 是離散傅里葉變換矩陣,即滿足 x^=Fxx^=Fx 。這樣把式 (5)(5) 代入式 (3)(3) 中得,
w?=(FHdiag(x^?)FFHdiag(x^)F+λI)?1FHdiag(x^?)Fy=F?1(diag(x^?⊙x^)+λI)?1diag(x^?)Fy=F?1diag(x^?x^?⊙x^+λ)Fy(6)(6)w?=(FHdiag(x^?)FFHdiag(x^)F+λI)?1FHdiag(x^?)Fy=F?1(diag(x^?⊙x^)+λI)?1diag(x^?)Fy=F?1diag(x^?x^?⊙x^+λ)Fy
其中, ⊙⊙ 代表向量對應元素相乘,然后兩邊同時左乘 FF 得,
w^?=x^?⊙y^x^?⊙x^+λ(7)(7)w^?=x^?⊙y^x^?⊙x^+λ
至此,我們可以看出通過上述變換后,權重向量 ww 的求解變換到了傅里葉變換域,而且計算量大大降低。
構建循環樣本矩陣
不同的提取訓練樣本方法:左圖是以base圖像為中心,向周圍偏移得到的樣本作為負樣本;右圖是基于base圖像,做循環偏移得到的樣本作為負樣本。
通過上面的計算我們可以看出,如果能構建一個循環矩陣,那么就能極大的加速樣本的訓練過程。那到底能不能呢,我們先來看一組基于目標中心周圍偏移提取的正負訓練樣本。
通過右圖可以看出,常規的方法是以目標圖像為base圖像,基于該圖像左右上下偏移得出一系列的圖像塊作為負樣本進行訓練(左圖所示)。而通過對base圖像進行循環偏移的方法可以得到一些近似的的負樣本作為訓練樣本進行訓練(右圖所示)。這里我們發現通過循環偏移得到的圖像在邊界處并不是很平滑,消除這種現象的方式就是通過對base圖像乘以一個漢寧窗來降低邊緣圖像的權重。這樣,訓練樣本構成的樣本矩陣就變成了一個循環矩陣(如式 (4)(4) 所示)。
引入核函數
以上介紹的都是線性回歸的情況,如果能引入核函數,分類器的性能將會更好。核函數的引入是把特征空間映射到一個更高維的空間去,這里我們假設這個映射函數為 φ(x)φ(x) ,則分類器的權重向量變為,
w=∑iαiφ(x)(8)(8)w=∑iαiφ(x)
這樣我們最終要求解的參數就由 ww 變為 αα ,這里 α={α1,α2,...,αi,...}Tα={α1,α2,...,αi,...}T 。因為其實我們并不知道核函數映射的高維空間是什么,我們只是知道高維空間下的兩個向量的乘積可以通過一個映射函數把其在低維空間下的乘積映射到高維空間,也就是核函數。這里設不同樣本之間的乘積的核函數結果組成的矩陣為
Kij=κ(xi,xj)(9)(9)Kij=κ(xi,xj)
這樣最終的回歸函數變為,
f(z)=wTz=∑i=1nαiκ(z,xi))(10)(10)f(z)=wTz=∑i=1nαiκ(z,xi))
直接計算上述函數相對來說是很耗時的,下面還是結合循環矩陣的特性實現一種快速的核函數計算方法。
快速訓練
基于核函數下的嶺回歸的解為6,
α=(K+λI)?1y(11)(11)α=(K+λI)?1y
其中, KK 核函數矩陣,如式 (9)(9) 所示。如果我們能夠證明 KK 是循環矩陣,則上式的求解就可以轉換到DFT域,即,
α^?=y^k^xx+λ(12)(12)α^?=y^k^xx+λ
這里, kxxkxx 是核函數矩陣 KK 的第一行元素組成的向量。
如果兩個向量的元素的次序發生變化不影響最終通過核函數計算的結果,則該核函數構成的矩陣就是一個循環矩陣,像高斯核函數,多項式核函數都是滿足上面條件的。
快速檢測
上面已經提到直接計算式 (10)(10) 是非常耗時的,快速的解法是像式 (9)(9) 那樣,通過構建測試樣本和訓練樣本的核函數矩陣如下,
Kz=C(kxz)(13)(13)Kz=C(kxz)
其中, kxzkxz 是這個循環矩陣的第一行組成的向量。這樣就可以同時計算基于測試樣本 zz 的循環偏移構成的所有測試樣本的響應,即,
f(z)=(Kz)Tα(14)(14)f(z)=(Kz)Tα
注意這里 f(z)f(z) 不同于式 (10)(10) ,它是一個向量,由基于base樣本 zz 不同循環偏移下的響應值組成。根據循環矩陣的性質(如式 (5)(5) 所示),上式變換到DFT域后,
f^(z)=(k^xz)?⊙α^(15)(15)f^(z)=(k^xz)?⊙α^
快速計算核函數相關性
到現在為止,只剩下前面部分提到的 kxxkxx 和 kxzkxz 沒有闡明如何計算了。首先列出 kxx^'kxx^' 的計算公式如下,
kxx′=g(C(x′)x)(16)(16)kxx′=g(C(x′)x)
其中, g(x)g(x) 是核函數, C(x′)C(x′) 是基于 x′x′ 為第一行的循環矩陣。參考式 (5)(5) 所示循環矩陣的特性,代入上式得,
kxx′=g(F?1(x^⊙x^?))(17)(17)kxx′=g(F?1(x^⊙x^?))
所以,對于多項式核函數,其計算公式如下,
kxx′=(F?1(x^⊙x^?)+a)b(18)(18)kxx′=(F?1(x^⊙x^?)+a)b
對于高斯核函數,其計算公式如下,
kxx′=exp(?1σ2(∥x∥2+∥x′∥2?2F?1(x^⊙x^?)))(19)(19)kxx′=exp(?1σ2(∥x∥2+∥x′∥2?2F?1(x^⊙x^?)))
總結
KCF的最大優勢在于速度很快,但是每幀訓練的權重向量更新問題并沒有很好的解決,目前算法采用的是按照一定比例更新最新的訓練的權重向量到現有的權重向量中去。此外作者在其主頁上公布了Matlab源代碼,我根據其代碼也寫了一個C++版的,具體可以參考這里。
ReferencesY. Wu, J. Lim, and M.-H. Yang, "Online object tracking: A benchmark," in Computer vision and pattern recognition (CVPR), 2013 IEEE Conference on, 2013, pp. 2411-2418.
Z. Kalal, K. Mikolajczyk, and J. Matas, "Tracking-Learning-Detection," Pattern Analysis and Machine Intelligence, IEEE Transactions on,pp. 1-1, 2011.
S. Hare, A. Saffari, and P. H. S. Torr, "Struck: Structured Output Tracking with Kernels," 2011 IEEE International Conference on Computer Vision (ICCV),pp. 263-270, 2011.
J. F. Henriques, R. Caseiro, P. Martins, and J. Batista, "High-Speed Tracking with Kernelized Correlation Filters," IEEE Transactions on Pattern Analysis and Machine Intelligence,2014.
R. M. Gray, Toeplitz and circulant matrices: A review: now publishers inc, 2006.
R. Rifkin, G. Yeo, and T. Poggio, "Regularized least-squares classification," Nato Science Series Sub Series III Computer and Systems Sciences,vol. 190, pp. 131-154, 2003.
總結
以上是生活随笔為你收集整理的matlab求kcf算法响应图_Kernelized Correlation Filters(KCF)算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学前教育试题库及答案_最新《学前教育学》
- 下一篇: matlab的循环语句裁图,[MATLA