目标跟踪 MOSSE(Visual Object Tracking using Adaptive Correlation Filters)
文章標題:《Visual Object Tracking using Adaptive Correlation Filters》
文章地址:http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.294.4992&rep=rep1&type=pdf
文章代碼:(python)https://github.com/opencv/opencv/blob/master/samples/python/mosse.py
?????(C++)https://github.com/opencv/opencv_contrib/blob/master/modules/tracking/samples/tutorial_customizing_cn_tracker.cpp
2010年CVPR的一篇的文章
Abstract
相關濾波器(correlation filters)雖然用得不多,但是在物體被旋轉、遮擋或者有其它干擾的復雜情況下實施跟蹤,速度要比當前的先進技術快 202020 倍。最古老、最簡單的相關濾波器使用了簡單的模板,實際跟蹤時不太好用。ASEF 和 UMACE 等現代一點的方法性能好一點,但是它們的訓練需求不太適應用于跟蹤。視覺跟蹤任務要求從單幀圖像訓練出魯棒的濾波器,并且在跟蹤過程中,根據目標外觀的變化進行動態調整。
本文提出了一種新型相關濾波器:MOSSE(Minimum Output Sum of Squared Error),我們在初始化的時候,從一幀圖像中產生穩定的相關濾波器。基于MOSSE濾波器的跟蹤器以每秒 669669669 幀的速度運行,對光照、比例、姿態和非剛性變形的變化具有魯棒性。跟蹤的時候根據峰值與旁瓣比(peak-to-sidelobe ratio,PSR)判斷是否發生遮擋,以此決定是否暫停跟蹤,等物體重新出現時恢復跟蹤。
具體做法
獲取選區:
首先把輸入圖像轉為灰度圖,選取跟蹤區域。修改選區框的尺寸,使得該尺寸是做離散傅里葉變換的最佳尺寸。
然后根據選區創建漢寧窗(HanningWindow),它用于突出圖像中心區域,減弱圖像邊緣區域。(這個后面用到)
把它裁剪出來,得到輸入數據 fff:
預處理:
常規操作。把輸入圖像 fff 的數據取對數,使數據無偏,符合正態分布。對數效果示意圖:
然后減均值,除以方差,把數據標準化(Normaization)。
最后乘以漢寧窗。
建立求解目標:
設置我們對該選區的期望輸出響應 ggg。它是一個中間值很大,四周值很小的矩形圖片,尺寸和選區尺寸一樣大。
可視化如下:
(具體做法可以看代碼)
我們希望訓練得到一個相關過濾器 h\color{red}hh,使 f☆h=gf ☆ h = gf☆h=g :
其中符號 ☆☆☆ 表示做 “相關” 運算。
“相關” 運算和 “卷積” 運算很像,二維情況下,對卷積核關于 222 個軸先后旋轉 180°180^{\circ}180°,再做卷積,就是 “相關”。
所以主要是 “核” 不同。 具體去網上查資料或者看岡薩雷斯的《數字圖像處理》(第四版) p101。
如果訓練良好,這個相關過濾器 hhh 大概長這樣:
怎樣找到 hhh 呢?
我們知道在傅里葉域做乘法相當于在空間域做卷積,于是先通過快速傅里葉變換 (FFTFFTFFT) 把數據從圖像空間域轉到傅里葉域,然后在傅里葉域進行操作,這樣可以減少計算量。我們用對應的大寫字母表示傅里葉域的數據:
?????輸入圖像: F=F(f)F = \mathcal{F}(f)F=F(f) , 相關過濾器:H=F(h)H= \mathcal{F}(h)H=F(h) ,輸出響應:G=F(g)G= \mathcal{F}(g)G=F(g)。
于是相關運算在傅里葉域表示為: F⊙H?=G(1)F \; \odot \; H^* = G \tag{1} F⊙H?=G(1)
其中符號 ⊙\odot⊙ 表示逐個元素的相乘,符號 ?*? 表示復共軛,也就是虛部取相反的符號。
這個運算的速度主要取決于傅里葉變換和傅里葉逆變換,時間復雜度上限是 O(PlogP)O(PlogP)O(PlogP),PPP 是選區的像素數量。
求解:
在初始化的時候,我們有 iii 組數據,對于輸入圖像數據 FiF_iFi?,我們期望輸出的響應為 GiG_iGi?。
通過求解以下最小化問題,“訓練” 出我們期望的相關核 HHH:min?H?∑i∣Fi⊙H??Gi∣2(3)\min_{H^*} \sum^{}_{i} | F_i \odot H^* - G_i |^2 \tag{3}H?min?i∑?∣Fi?⊙H??Gi?∣2(3)
這叫做最小化平方誤差和(Sum of Squared Error,SSE),文章的標題和跟蹤器的名字由此而來。
作者在文章的附錄中給出了求解公式。作者表示這是一個凸的,使偏導為 000 得到求解公式:H?=∑iGi⊙Fi?∑iFi⊙Fi?(4)H^* = \frac{\sum_i G_i \odot F_i^*} {\sum_i F_i \odot F_i^*} \tag{4} H?=∑i?Fi?⊙Fi??∑i?Gi?⊙Fi???(4)
這 iii 組數據怎么來? 代碼中 i=128i=128i=128,在初始化的時候,對輸入圖像 fff 做 128128128 次隨機仿射變換(旋轉、拉伸等)得到一系列圖:
每張圖片輸出響應 GiG_iGi? 不變,依舊是用(圖1)那個 ggg 的傅里葉逆變換 GiG_iGi?。將 FiF_iFi? ,GiG_iGi? 代入式 (4) 求得 HHH。
不做仿射變換,只用一張原圖也可以,但是這樣得到的濾波器太精確,會過擬合這幅圖像,當應用到新圖像 (下一幀) 的時候容易跟蹤失敗。
這種對數據增強然后求平均的方法,可以產生一個更具泛化能力的濾波器。
(對弱分類器的輸出進行平均,從而產生一個強得多的分類器)。
另外,我們還對圖片加入了白噪聲 ?\epsilon? ,具有正則化的效果。可以得到具有更好的噪聲容忍能力的濾波器。
在兩個地方加,一個是圖片預處理的時候加,一個是在式 (4) 中加:Fi⊙Fi?+?F_i \odot F_i^* +\epsilonFi?⊙Fi??+? 。
初始化完畢后,就得到了濾波器模板 HHH。
在線更新:(選區框)
在跟蹤問題中,目標不總是居中的。
例如當下一幀數據來到的時候,我們的選區(目標框)還處于原來的位置,但是里面的目標已經移動了。
在 fff 中峰值會隨著目標的移動而移動。用目前的濾波器 HHH 做相關時,得到的響應也會發生變化:
通過計算響應峰值點的相對位移,來更新跟蹤框的坐標,使目標仍處于跟蹤框中心。
值得注意的是,目標框的大小沒有得到更新,這也是 MOSSE 算法的不足之一。
在線更新:(濾波器)
在跟蹤的過程中,目標通常會發生旋轉、縮放、姿態、光照的變化,甚至外觀發生非剛性形變,所以濾波器需要隨之適應和更新。
記 H1=∑iGi⊙Fi?H_1 = \sum_i G_i \odot F_i^*H1?=∑i?Gi?⊙Fi?? , H2=∑iFi⊙Fi?H_2 = \sum_i F_i \odot F_i^*H2?=∑i?Fi?⊙Fi??
則式 (4) 簡寫為:H?=H1H2H^* = \frac{H_1}{H_2} H?=H2?H1??
下一幀數據 FnF_{n}Fn? 來到的時候,通過以下式子更新 HHH:H1new=(1?η)H1+ηG⊙Fn?H2new=(1?η)H2+ηFn⊙Fn?H_1^{new} = \textcolor{red}{(1-\eta)}\;H_1 + \textcolor{red}{ \eta }\; G \odot F_{n}^* \\[1em] H_2^{new} = \textcolor{red}{(1-\eta)}\;H_2 + \textcolor{red}{ \eta }\; F_{n} \odot F_{n}^* H1new?=(1?η)H1?+ηG⊙Fn??H2new?=(1?η)H2?+ηFn?⊙Fn??
即:
H?=(1?η)H1+ηG⊙Fn?(1?η)H2+ηFn⊙Fn?H^* = \frac{ \textcolor{red}{(1-\eta)}\;H_1 + \textcolor{red}{ \eta }\; G \odot F_{n}^*} {\textcolor{red}{(1-\eta)}\;H_2 + \textcolor{red}{ \eta }\; F_{n} \odot F_{n}^*} H?=(1?η)H2?+ηFn?⊙Fn??(1?η)H1?+ηG⊙Fn???
η\etaη 稱為學習率,實際中取 η=0.125\eta = 0.125η=0.125 效果較好。
得到新的過濾器和新的選區,就可以進行下一幀的跟蹤了。不斷迭代這個過程。
失敗判定與PSR:
我們用 PSR(Peak to Sidelobe Ratio)度量響應尖峰的強度。
對于相關輸出 ggg,我們找出峰值點 gmaxg_{\text{max}}gmax?,以峰值點為中心建立 11×1111\times 1111×11 的矩形框。
計算這個矩形區域的均值 μs1\mu_{\text{s1}}μs1? 和標準差 σs1\sigma_{\text{s1}}σs1?,則 PSR=gmax?μs1σs1\text{PSR} = \frac{g_{\text{max}} - \mu_{\text{s1}}}{\sigma_{\text{s1}}} PSR=σs1?gmax??μs1??
實驗發現,對于正常跟蹤的情況下,PSR 值大致處于 20.020.020.0 到 60.060.060.0 之間。
當 PSR 降到大概 7.07.07.0 左右時,表示目標被遮擋或者跟蹤失敗了。
在應用實現中,PSR 處于 3.03.03.0 到 10.010.010.0 時對于更新目標框是沒什么用的。
python代碼
鏈接:https://pan.baidu.com/s/1eAE9fJJBkh50oMaRfCI8AA
提取碼:1234
總結
以上是生活随笔為你收集整理的目标跟踪 MOSSE(Visual Object Tracking using Adaptive Correlation Filters)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 752. Open the Lock
- 下一篇: 安装MariaDB数据库(未完成)