簡要
2010年David S. Bolme等人在CVPR上發表了《Visual Object Tracking using Adaptive Correlation Filters》一文,首次將相關濾波器引入到目標跟蹤當中。該算法大幅提高了目標跟蹤的性能,論文實驗結果可達到669FPS的速度。這相比同期間的跟蹤算法可以算是一個極大的飛躍。本文將以該論文作為分析一類基於相關濾波的目標檢測算法的引子。
基於相關濾波的跟蹤
MOSSE算法的創新的在於,它是第一篇將相關濾波引入到目標跟蹤的領域的論文。其思想是構造一個濾波模板 \(h\),使用該模板與圖像序列幀 \(f\) (此處解釋下,f指的是輸入圖像中框定的目標區域,也稱為目標窗口,並非整個圖像幀)做卷積運算,根據得到的響應輸出\(g\)來確定目標在新的一幀圖像中的位置。
上式的符號\(\ast\)表示卷積運算。對於輸入圖像的2維快速傅里葉變換有\(F=\mathcal{F}(f)\),而對模板\(h\)的變換為\(H=\mathcal{F}(h)\)
根據傅里葉變換的性質,時空域\(f\)和\(h\)的卷積運算可以轉換為傅里葉頻域的點乘運算,有如下式子:
上式 \(H^\ast\) 表示為\(H\)的共軛復,\(\bigodot\)表示為點乘運算。
由此時空域的卷積運算轉化為頻域的點乘運算,將有助於提高運算速度,事實上后來的大部分改進算法也是基於這個性質進行的。
MOSSE濾波器
前面可知,基於相關濾波的目標跟蹤算法核心是用濾波模板與圖像序列做卷積運算來確定目標的位置,那么對與濾波模板的求解是算法的核心。
MOSSE全稱是Minimum Output Sum of Squared Error ,算法開始需要有一組訓練圖像\(f{_i}\)和期望的訓練輸出\(g{_i}\)。\(g{_i}\)通常是以目標為中心,\(\sigma\)為方差生成的一個高斯矩陣。由此濾波模板\(H\)的計算如下:
上式是對單獨一幀圖像計算濾波模板的,但是在實際情況下濾波模板需要能夠適應整個圖像序列。MOSSE的濾波其要求對於視頻序列的所有實際輸出和期望輸出的平方誤差最小,即:
該式的求解非本文重點,有興趣的讀者可以翻閱原論文的附錄。該式子的求解結果如下:
分子是輸入圖像與期望的輸入圖像的卷積,而分母則是輸入圖像的能量譜圖。
UMACE和ASEF濾波器
該論文雖然叫做MOSSE算法,不僅使用了Minimum Output Sum of Squared Error濾波器,其算法框架可以簡單的將MOSSE濾波其替換為UMACE和ASEF等濾波器。
文中給出了UMACE和ASEF濾波其的求解形式。
UMACE濾波器形式如下:
可以看出其與MOSSE區別在於分子部分。
ASEF濾波器如下:
對於ASEF濾波器因為輸入圖像的能量譜圖\({F_i \bigodot F^\ast_i}\)在某些情況下可能接近與零,於是使用\({F_i \bigodot F^\ast_i + \varepsilon }\)替代。
濾波器初始化與更新
初始化
上訴的三個濾波其公式可以看到下標i,其表示的是多幀圖像幀。MOSSE算法在初始化的時候需要一組訓練圖像和期望輸出。那么這些訓練數據是如何獲得的?
作者給出的方案是,對第一個目標窗口\(f_i\)進行八個仿射變換得到一組訓練圖像,而\(g_i\)則以目標中心生成高斯矩陣。
更新
因為一個視頻序列會有關照、旋轉、尺度等變換,所以需要濾波器進行更新以便濾波器適應環境的變化。該論文使用了滑動平均值作為更新策略,這是很常用的更新方式。
對於ASEF和MOSSE的更新方式有稍許不同。ASEF濾波其的更新方式如下:
其中\(\eta\)為學習因子。而MOSSE更新方式如下。
從ASEF和MOSSE濾波其的形式不難看何其更新方式的不同。
其他
到這里,MOSSE算法的主要思想其實已經解釋完了,但是還存在幾個要點需要提及
檢測
前文說目標的位置通過響應輸出\(g\)來確定,其實就是通過頻域計算出\(G=F\bigodot H^\ast\),再進行逆傅里葉變換求出\(g\),\(g\)矩陣的最大值就是目標的位置
\(G_i\)究竟指的是啥?
原文論文中對與\(g_i\)和\(G_i\)的闡述不夠清晰,可能大部分讀者會疑惑,哪個是響應輸出?哪個是期望的響應輸出?
- 期望的響應輸出指的是,期望經過濾波模板卷積后得到的輸出,該輸出是符合高斯分布的。MOSSE的平方誤差中,\(F_i \bigodot H^\ast\)指的是目標窗口和濾波模板卷積后的響應輸出的傅里葉變換,而\(G_i\)指的是期望得到的輸出的傅里葉變換,這個輸出要符合高斯分布。
- 初始化過程中生成了一組期望的響應輸出\(g_i\),這組訓練數據通過更新濾波器的公式,初始化了濾波器。而在隨后的檢測更新過程中,\(g_i\)是以$$g=f_{i} \ast h_{i-1}$$響應輸出的最大值坐標作為目標中心點而生成的高斯矩陣。
聽着很繞口,其實簡單的說,在檢測過程中,更新濾波器公式使用的\(G_i\)是以當前目標位置作為中心的。
預處理
對圖像和濾波器進行卷積操作會將其映射到拓撲空間中,形成圓環性,即左邊與右邊相連,上邊與下邊相連。這樣可能會影響到檢測的正確性。其原因是因為當左邊和右邊連接,在傅里葉域中計算時候,可能在邊界上會產生高的響應值,而使目標位置定位到邊界上。故預先對圖像乘上一個\(\cos\)窗口,以減小影響。這個方法在隨后改進的算法中經常使用到。