1. 程式人生 > >CVPR2015跟蹤演算法CFLB原理及程式碼解析

CVPR2015跟蹤演算法CFLB原理及程式碼解析

文章和程式碼下載地址:

Galoogahi H K, Sim T, Lucey S. Correlation filters with limited boundaries.

CFLB跟蹤演算法是通過加空間約束的方式,去除訓練相關濾波所存在的邊界效應。

MOSSE的filter通過最小二乘法來求解:

\small \min_{H^{\ast }} \sum_{i}|F_{i}\odot H^{*}-G_{i}|^{2}

CSK加入了一個正則項將其變成正則化最小二乘法來求解:

\min_{w}\sum_{i}(f(x_{i})-y_{i})^{2}+\lambda ||w||^{2}

CFLB將CSK的公式換一種表達方式如下:

E(h)=\frac{1}{2}\sum_{i=1}^{N}\sum_{i=1}^{D}||y_{i}(j)-h^{\rm T}x_i[\Delta \tau _j]||_2^2+\frac{\lambda }{2}||h||_2^2

這個公式和上面CSK的公式一模一樣,只是換了一種表達。迴圈移位後的x[\Delta _j]h的點乘來表示卷積。D為輸入訓練濾波器影象的大小,N表示輸入了多少張圖片來訓練,一般是通過仿射擾動產生的幾張,相關濾波演算法很多改進版本N

直接設為1。

訓練濾波器的時候FFT會帶來邊界效應,一般會加入padding框來減弱這種邊界效應。所謂padding框就是拿比目標框大影象片來訓練,KCF用的1.5倍框。你體會一下,是不是框越大邊界效應越不明顯,但是我們又不能無限制的增大padding,為什麼?你想想如果padding無限大,訓練的濾波器只有中心那一塊屬於目標區域,目標區域的佔比越小,那麼濾波器是不是就越不準確,所以我們要選擇合適大小padding框。

CFLB做的就是將padding框增大到無限大,大到直接用整張圖片來訓練濾波器,然後再通過一個(0,1)二值矩陣把目標區域提取出來。下面具體介紹CFLB是怎麼操作的。

CFLB提出通過如下公式來求解濾波器

E(h) = \frac{1}{2}\sum\limits_{i = 1}^N\sum\limits_{j = 1}^T {||y_i(j) - {h^{\rm T}P{x_i}[\Delta {\tau _j}]} ||_2^2} + \frac{\lambda }{2}||{h}||_2^2

\rm T表示轉置,T是整幀影象大小,這個公式就是加了一個P矩陣,PD\times T的大矩陣,中間D個元素是1,邊上的都是0,用於把訊號x的中間D的元素提取出來。

道理我們都懂,但是怎麼求解呢?

轉換到頻域:

E(h) = \frac{1}{2}\sum\limits_{i = 1}^N\ {||\hat y_i - diag{(\hat x_i)}^{\rm T}\sqrt{D}FP^{\rm T}h ||_2^2} + \frac{\lambda }{2}||{h}||_2^2

\wedge表示傅立葉變換,普通的傅立葉變換是這樣表示的\hat a=\sqrt D Fa,D表示訊號的長度,F是一個約定俗稱用於表示傅立葉變換的矩陣。可以對照一下加入了P之後有什麼差異。

注意:h的大小是Dx訊號的大小是LL\gg D。也就是說h是空間約束之後的,所以h要在時域來求解。

然後CFLB構造了一個輔助變數\hat g後通過ADMM迭代求解:

\begin{array}{l} E(h,\hat g) = \frac{1}{2}\sum\limits_{i = 1}^N\ {||\hat y_i - diag{(\hat x_i)}^{\rm T}\hat g ||_2^2} + \frac{\lambda }{2}||{h}||_2^2 \\ \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;s.t. \hat g=\sqrt{D}FP^{\rm T}h \end{array}