原文再續,書接一上回。話說上一次我們講到了Correlation Filter類 tracker的老祖宗MOSSE,那么接下來就讓我們看看如何對其進一步地優化改良。這次要談的論文是我們國內Zhang Kaihua團隊在ECCV 2014上發表的STC tracker:Fast Visual Tracking via Dense Spatio-Temporal Context Learning。相信做跟蹤的人對他們團隊應該是比較熟悉的了,如Compressive Tracking就是他們的傑作之一。今天要講的這篇論文的Matlab源代碼已經放出了,鏈接如下:
http://www4.comp.polyu.edu.hk/~cslzhang/STC/STC.htm
首先來看看他們的跟蹤算法示意圖:
看到更新方式,快速傅里葉變換什么的是不是很眼熟?沒錯,這篇論文其實與MOSSE方法基本是一致的,那么其創新點在哪了?筆者覺得,其創新點在於點,一是以密集時空環境上下文Dense Spatio-Temporal Context作為賣點;二是以概率論的方式包裝了CF類方法;三是在模板更新的時候把尺度變換也考慮了進去。
那么什么是密集的時空上下文呢?其最朴素的思想可以用下面這個圖來表達:在跟蹤的過程中,由於目標外觀變換以及遮擋等原因的影響,僅僅跟蹤目標本身的話比較困難,但如果把目標周圍區域也考慮進去(空間上下文),那么能夠在一定程度降低跟蹤失敗的風險。以圖中的例子來說,就是假如僅僅考慮目標本身(黃色框),那么在發生遮擋的時候,就難以實現跟蹤,但是如果把周圍的像素也考慮進去(紅色框),那么就可以借助周圍環境來確定目標所在。這是一幀的情況,假如考慮多幀情況的話,就對應產生了時空上下文。那么dense的說法從何而來?這一點我們后面再解釋。
主要思想已經有了,下面我們來看如何用概率論進行理論支持。假設$\mathbf{x}\in {{\mathbb{R}}^{2}}$為某一位置,$o$為需要跟蹤的目標,首先定義如下的confident map用來衡量目標在$\mathbf{x}$出現的可能性:
然后定義${{X}^{c}}=\{\operatorname{c}(\mathbf{z})=(I(\mathbf{z}),\mathbf{z})|\mathbf{z}\in {{\Omega }_{c}}({{\mathbf{x}}^{\bigstar }})\}$ 為上下文特征集合,其中${{\mathbf{x}}^{\bigstar }}$代表目標位置,${{\Omega }_{c}}({{\mathbf{x}}^{\bigstar }})$表示在${{\mathbf{x}}^{\bigstar }}$點處兩倍於跟蹤目標大小的鄰域,$I(\mathbf{z})$為$\mathbf{z}$點的圖像灰度值。這一公式的意思其實就是把${{\mathbf{x}}^{\bigstar }}$作為中心點,取其周圍兩倍於目標框大小的圖像作為特征,如上圖的紅色框。然后我們利用全概率公式,以上下文特征為中間量把(1)展開:
式(2)分為兩項,左項$P(\mathbf{x}|\operatorname{c}(\mathbf{z}),o)$代表給定目標和其上下文特征,目標出現在$\mathbf{x}$點的概率,右項$P(\operatorname{c}(\mathbf{z})|o)$則是某一上下文特征屬於目標的概率,也就是目標的上下文概率先驗了。右項的作用在於選擇與目標外觀相似的上下文,左項的作用在於在選擇外觀相似的同時也考慮出現在某一位置是否合理,避免跟蹤過程中的漂移現象。
然后,因為在第一幀的時候,目標的位置是已知的,那么這時候就可以構造一個confident map,使其滿足距離目標越近可能性越高的性質。作者定義confident map的具體值為如公式(3)所示:
其中$b,\alpha ,\beta $都是經驗常數。回想下上一篇我們講的MOSSE方法,其實$m(\mathbf{x})$就是我們講的響應輸出,只不過MOSSE直接用一個高斯形狀,而這里用的是如(3)式的定義。另外,之前談到本篇論文標題中有一“dense”字樣,體現在哪呢?就體現在這個地方,對於目標附近每一個點,都可以用(3)式對其概率值進行定義。傳統的跟蹤方法可能是隨機采樣或者隔段采樣,而這里因為每一個點都進行了概率值的定義所以就是dense了。但其實目前所有的CF類方法都是dense sampling,而且這一個概念的明確提出應該是出現在后面會講的CSK方法之中,只不過本篇作者將其改頭換面成dense spatio temporal learning了。OK,閑話少說,接下來我們繼續求解$P(\mathbf{x}|\operatorname{c}(\mathbf{z}),o)$和$P(\operatorname{c}(\mathbf{z})|o)$。
先看$P(\operatorname{c}(\mathbf{z})|o)$,是目標的上下文先驗,定義為如下所示:
其就是目標框附近的圖像灰度值的高斯加權和(換成其它特征也可以,后面另有一篇論文會談到)。然后$P(\operatorname{c}(\mathbf{z})|o)$有了,$m(\mathbf{x})$有了,就可以帶入(2)求解$P(\mathbf{x}|\operatorname{c}(\mathbf{z}),o)$了,套路還是跟MOSSE一樣,首先將$m(\mathbf{x})$表示為$P(\mathbf{x}|\operatorname{c}(\mathbf{z}),o)$和$P(\operatorname{c}(\mathbf{z})|o)$的卷積(互相關),通過FFT轉到頻率域變為點乘運算,運算完后逆變換回空間域,找響應最大值的地方作為目標位置。 具體就是,設$P(\mathbf{x}|\operatorname{c}(\mathbf{z}),o)={{h}^{sc}}(\mathbf{x}-\mathbf{z})$,得
文中作者還強調了${{h}^{sc}}(\mathbf{x}-\mathbf{z})$是目標的位置與其環境上下文之間相對距離和方向的衡量,並且不是對稱函數。
另外,根據卷積$f\otimes g$的定義:
所以(5)式其實就是一卷積($\mathbf{x}$就是$t$或$m$,$\mathbf{z}$就是$\tau $或$n$),根據卷積定理:
與MOSSE不同的是,STC在訓練模板、即計算${{h}^{sc}}(\mathbf{x}-\mathbf{z})$時只需考慮第一幀。而在跟蹤過程中,${{h}^{sc}}(\mathbf{x}-\mathbf{z})$的更新方式如同MOSSE,這里不再敘述。另外論文中還給出了目標框大小更新的方法,其基本思路可以這樣理解:看到公式(5)$m(\mathbf{x})=\sum\nolimits_{\mathbf{z}\in {{\Omega }_{c}}({{\mathbf{x}}^{\bigstar }})}{{{h}^{sc}}(\mathbf{x}-\mathbf{z})I(\mathbf{z}){{\omega }_{\sigma }}(\mathbf{z}-{{\mathbf{x}}^{\bigstar }})}$ ,其中${{\omega }_{\sigma }}(\mathbf{z}-{{\mathbf{x}}^{\bigstar }})$不就是高斯形狀的權重嘛,稍微不恰當的說,就是用個圓圈把目標包住嘛,圈內的權重高,圈外的相反,那么假如目標的size變大了,我們就把這個圈的范圍擴大就好了,而擴大或者縮小就靠調整$\sigma $的值就ok了。具體推導過程如下:
假設從$t$到$t+1$幀,目標的大小乘以了一個$s$倍,也即相當於坐標系的刻度乘以了$s$倍,為方便起見,我們設$(u,v)=(sx,sy)$,然后,不失一般性的,假設目標在第$t$幀的坐標為(0,0),則有
由${{\omega }_{\sigma }}(x,y)=\alpha {{e}^{-\frac{{{x}^{2}}+{{y}^{2}}}{{{\sigma }^{2}}}}},{{\omega }_{\sigma }}(x/s,y/s)=\alpha {{e}^{-\frac{{{x}^{2}}+{{y}^{2}}}{{{(s\sigma )}^{2}}}}}$ 有${{\omega }_{\sigma }}(x/s,y/s)={{\omega }_{s\sigma }}(x,y)$,所以(8)式繼續推導為:
然后,從$t$變到$t+1$幀,我們把變化后的坐標對應起來,因此有$h_{t}^{sc}(u/s,v/s)\approx h_{t+1}^{sc}(u,v)$和${{I}_{t}}(u/s,v/s)\approx {{I}_{t+1}}(u,v)$,所以式(9)繼續變為
假設從$t$到$t+1$幀是縮小的,因此跟縮放示意圖一樣,我們將(10)的積分看成兩部分組合成的:一是紅框部分($t+1$幀的上下文框大小),二是藍框($t$幀的上下文框大小)減去紅框的部分,用公式表達就是:
又因為$\omega $的高斯形狀的關系,上式右項那一部分的權值都很小,因此整個右項都可視為0,同時將$s{{\sigma }_{t}}$視為${{\sigma }_{t+1}}$,所以上式的左項就近似成了${{c}_{t+1}}(0,0)$:
因此就有
剩下的就是一些技巧了,比如用滑動窗口取$s$的平均之類的,具體可以看作者的原文。這篇文章大概就到這里了。總結一下,其中比較吸引筆者的其中的概率論支撐和后面的窗口大小的變化部分,至於環境上下文部分的話,換用其它特征應該可以作進一步擴展以提高算法的魯棒性。作者主頁上有源代碼,有興趣的可以下載來跑跑看,運行時留意下像woman這類視頻吧~