MOSSE
MOSSE
文章:
MOSSE: David S. Bolme, J. Ross Beveridge, Bruce A. Draper, Yui Man Lui. “Visual Object Tracking using Adaptive Correlation Filters.”
https://github.com/xingqing45678/Mosse_CF(代碼和文章都在里面)
**核心:**兩個信號越相似,器相關值越高,在跟蹤中,就是找到與跟蹤目標響應最大的項。
一、對2D相關的理解
注意:相關是相關,卷積是卷積,不要混為一談
1.1 相關操作
圖像的相關公式:g=f?hg=f\otimes hg=f?h,其中hhh稱之為相關核(Kernel)具體到每一個像素表示為:
g(i,j)=∑k,lf(i+k,j+l)h(k,l)g(i,j)=\underset{k,l}{\sum}f(i+k,j+l)h(k,l) g(i,j)=k,l∑?f(i+k,j+l)h(k,l)
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-zxcWsHBD-1608946582277)(MOSSE.assets/image-20201220144105838.png)]
步驟:
(1)滑動核,使其中心位于輸入圖像的像素上
(2)利用上式求和,得到輸出圖像的像素值
(3) 充分上面操縱,直到求出輸出圖像的所有像素值
例:計算輸出圖像g(3,3)g(3,3)g(3,3)像素值為
g(3,3)=(?1)×7+(?2)×3+(?1)×2+0×3+0×5+0×1+1×4+2×3+1×7=2g(3,3)=(-1)\times7+(-2)\times3+(-1)\times2+0\times3+0\times5+0\times1+1\times4+2\times3+1\times7=2 g(3,3)=(?1)×7+(?2)×3+(?1)×2+0×3+0×5+0×1+1×4+2×3+1×7=2
1.2 卷積操作
圖像的卷積公式:g=f?hg=f*hg=f?h,其中hhh成為卷積核(Kernel),具體到每一個像素為:
KaTeX parse error: Got function '\sum' with no arguments as argument to '\underset' at position 23: …=\underset{k,l}\?s?u?m?{f(i-k,j-l)h(k,…
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-tqKSDOL9-1608946582279)(MOSSE.assets/image-20201220151804997.png)]
步驟:
(1)將卷積核圍繞中心旋轉180度
(2)滑動核,使其中心位于輸入圖像的像素上
(3)利用上式求和,得到輸出圖像的像素值
(4)充分上面操縱,直到求出輸出圖像的所有像素值
例:計算輸出圖像g(3,3)g(3,3)g(3,3)像素值為
g(3,3)=1×7+2×3+1×2+0×3+0×5+0×1+(?1)×4+(?2)×3+(?1)×7=?2g(3,3)=1\times7+2\times3+1\times2+0\times3+0\times5+0\times1+(-1)\times4+(-2)\times3+(-1)\times7=-2 g(3,3)=1×7+2×3+1×2+0×3+0×5+0×1+(?1)×4+(?2)×3+(?1)×7=?2
3、差異:
(1)引用專業術語就是:Two-dimensional correlation is equivalent to two-dimensional convolution with the filter matrix rotated 180 degrees.
白話:卷積將核旋轉了180度。
(2)物理意義:相關可以反應兩個信號相似程度,卷積不可以。
(3)卷積滿足交換律,f?h=h?ff*h=h*ff?h=h?f,相關不可以。
(4)卷積可以直接通過卷積定理(時域上的卷積等于頻域上的乘積)來加速運算,相關不可以
二、對相關濾波器的理解
相關濾波跟蹤器就是通過互相關(cross-correlation)來定位目標當前幀所在位置的。響應圖ggg的最大值對應的位置即為當前時刻預測的目標位置,具體流程如下:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-lePaCVH4-1608946582281)(MOSSE.assets/image-20201220212359232)]
如果我們在時域內求解響應圖,運算量巨大,那么如何利用卷積定理將其轉換到頻域???
用卷積來表示相關就是:
f(n)?h(n)=f(n)?h(?n)f(n)\otimes h(n)=f(n)*h(-n) f(n)?h(n)=f(n)?h(?n)
利用卷積定理轉換到頻域為:
F(g)=F(f?g)=F(f)⊙F(h)?F(g)=F(f\otimes g)=F(f)\odot F(h)^* F(g)=F(f?g)=F(f)⊙F(h)?
簡寫為:
G=F⊙H?G=F\odot H^* G=F⊙H?
其中,F(h(?n))=H?F(h(-n))=H^*F(h(?n))=H?,⊙\odot⊙表示點乘。所以將我們的輸入圖像和濾波器通過算法變換到頻域后,直接將他們相乘,然后再變換回時域(也就是圖像的空域)就可以得到響應圖。
幾點重要的解釋:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-4vObyOSm-1608946582282)(MOSSE.assets/image-20201220204231419.png)]
三、對MOSSE的理解
經過上面的解釋,理解相關濾波的檢測原理,相應圖峰值的位置即為當前幀目標的預測位置。
為了得到相應圖,那么我們求出濾波器模板頻域的表示值即可:
H?=GFH^*=\frac{G}{F} H?=FG?
3.1 預處理(不重要,一般都會進行這些操作)
3.2 MOSSE濾波
提高算法的魯棒性,作者對視頻第一幀的跟蹤窗口施加隨機的仿射擾動,產生多組圖像對濾波器進行初始化:
Hi?=GiFiH^*_i=\frac{G_i}{F_i} Hi??=Fi?Gi??
注意上式是元素點除,作者通過最小二乘法來求解:
minH?∑i∣Fi⊙H??Gi∣2\underset{H^*}{min}\underset{i}{\sum}|F_i\odot H^*-G_i|^2 H?min?i∑?∣Fi?⊙H??Gi?∣2
求解,可得MOSSE濾波器的一個封閉解:
H?=∑iGi⊙Fi?∑iFi⊙Fi?H^*=\frac{\sum_i G_i\odot F^*_i}{\sum_iF_i\odot F^*_i} H?=∑i?Fi?⊙Fi??∑i?Gi?⊙Fi???
最后更新MOSSE濾波器如下:
Hi?=AiBiH^*_i=\frac{A_i}{B_i} Hi??=Bi?Ai??
Ai=ηGi⊙Fi?+(1?η)Ai?1A_i=\eta G_i\odot F^*_i+(1-\eta)A_{i-1} Ai?=ηGi?⊙Fi??+(1?η)Ai?1?
Bi=ηFi⊙Fi?+Bi?1B_i=\eta F_i\odot F^*_i+B_{i-1} Bi?=ηFi?⊙Fi??+Bi?1?
四、MOSSE推導
4.1 概念
相關:f?gf*gf?g
(f?g)(τ)=∫∞?∞f?(t)g(t+τ)dt(f\otimes g)(\tau)=\int ^{- \infty}_{\infty}f^*(t)g(t+\tau)dt (f?g)(τ)=∫∞?∞?f?(t)g(t+τ)dt
其中f?f^*f?表示fff的復共軛,correlation的直觀解釋就是衡量兩個函數在某個時刻τ\tauτ的相似程度,如下圖所示??紤]一個最簡單的例子,假設fff和ggg的形狀一樣,但是相差了若干個時刻,那么f?gf*gf?g取得最大值的時候一定是fff和ggg對齊的時候(沒誰比自己和自己更像了吧…),但因為兩者有時間差,所以要取得最大值,就要把其中一個在時間軸上進行平移,所以g(t+τ)g(t+\tau)g(t+τ)就代表把ggg平移τττ個時刻。其實Convolution和Cross-correlation在圖像處理的書里一般都會提到,這里就不多敘述了。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-s2T2D99D-1608946582283)(MOSSE.assets/image-20201220212339382.png)]
而Correlation Filter應用于tracking方面最樸素的想法就是:相關是衡量兩個信號相似值的度量,如果兩個信號越相似,那么其相關值就越高,而在tracking的應用里,就是需要設計一個濾波模板,使得當它作用在跟蹤目標上時,得到的響應最大,如下圖所示:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-jvp00luQ-1608946582284)(MOSSE.assets/image-20201220212359232.png)]
4.2 推導過程
g=h?fg=h*f g=h?f
其中ggg表示相應輸出,fff表示輸入圖像,hhh表示我們的濾波的濾波模板。
ggg可以為任意形狀的響應輸出,在上面的示意圖中我們假設它為Gaussian形狀。
函數互相關的傅里葉變換=函數傅里葉變換的乘積
Fh?f=(Fh)?⊙FfFh*f=(Fh)^*\odot Ff Fh?f=(Fh)?⊙Ff
其中FFF表示傅里葉變換,⊙\odot⊙表示點乘。那么假設fff所含的像素個數為nnn,而已知FFT的時間開銷為O(nlog?n)O(nlog?n)O(nlog?n),因此式(3)的計算開銷也為O(nlog?n)O(nlog?n)O(nlog?n)!遠比其他跟蹤算法要快!明白這一點后,本篇論文的精華你已經掌握了。剩下的就是如何計算hhh了,為了表達的方便起見,我們設Ff=FFf=FFf=F,(Fh)?=H?(Fh)^?=H^?(Fh)?=H?,Fg=GFg=GFg=G,那么我們就有
H?=GFH^*=\frac{G}{F} H?=FG?
但是在實際應用中,因為目標的外觀變換等因素影響,我們需要同時考慮目標的mmm個圖像作為參考,以提高模型的魯棒性,那么就有下式的目標函數了:
minH?∑i=1m∣H?Fi?Gi∣2min_{H^*}\sum_{i=1}^{m}{|H^*F_i-G_i|^2} minH??i=1∑m?∣H?Fi??Gi?∣2
求解式(19)并不困難,而且根據卷積定理,在頻率域的操作都是元素級別的,因此我們可以分別求解H?H^?H?中的每一個元素Hw,v?H_{w,v}^?Hw,v??,那么(19)就可以變為:
minHw,v?∑i=1m∣Hw,v?Fw,v,i?Gw,v,i∣2min_{H_{w,v}^?}\sum_{i=1}^{m}{|H_{w,v}^? F_{w,v,i}-G_{w,v,i}|^2} minHw,v???i=1∑m?∣Hw,v??Fw,v,i??Gw,v,i?∣2
然后對式(20)求導并使其為0求解,但要注意的是,論文中特別指出在復數域的求導與在實數域的有一點區別:
???Hw,v?∑i=1m(Hw,v?Fw,v,i?Gw,v,i)(Hw,v?Fw,v,i?Gw,v,i)?=0\Rightarrow \frac{\partial}{\partial H_{w,v}^?}\sum^m_{i=1}(H_{w,v}^? F_{w,v,i}-G_{w,v,i})(H_{w,v}^? F_{w,v,i}-G_{w,v,i})^*=0 ??Hw,v????i=1∑m?(Hw,v??Fw,v,i??Gw,v,i?)(Hw,v??Fw,v,i??Gw,v,i?)?=0
???Hw,v?∑i=1m(Hw,v?Fw,v,iHw,vFw,v,i??Hw,v?Fw,v,iGw,v,i??Hw,vFw,v,i?Gw,v,i+Gw,v,iGw,v,i?)=0\Rightarrow \frac{\partial}{\partial H_{w,v}^?}\sum^m_{i=1}(H_{w,v}^? F_{w,v,i}H_{w,v} F_{w,v,i}^?-H_{w,v}^? F_{w,v,i}G_{w,v,i}^?-H_{w,v}F_{w,v,i}^?G_{w,v,i}+G_{w,v,i}G_{w,v,i}^?)=0 ??Hw,v????i=1∑m?(Hw,v??Fw,v,i?Hw,v?Fw,v,i???Hw,v??Fw,v,i?Gw,v,i???Hw,v?Fw,v,i??Gw,v,i?+Gw,v,i?Gw,v,i??)=0
?∑i=1mFw,v,iHw,vFw,v,i??Fw,v,iGw,v,i?=0\Rightarrow \sum^m_{i=1}F_{w,v,i}H_{w,v}F_{w,v,i}^?-F_{w,v,i}G_{w,v,i}^? =0 ?i=1∑m?Fw,v,i?Hw,v?Fw,v,i???Fw,v,i?Gw,v,i??=0
?Hw,v=∑i=1mFw,v,iGw,v,i?∑i=1mFw,v,iFw,v,i?\Rightarrow {H_{w,v}}{\rm{ = }}\frac{{\sum\limits_{i = 1}^m {{F_{w,v,i}}G_{w,v,i}^{\rm{*}}} }}{{\sum\limits_{i = 1}^m {{F_{w,v,i}}F_{w,v,i}^{\rm{*}}} }} \qquad ?Hw,v?=i=1∑m?Fw,v,i?Fw,v,i??i=1∑m?Fw,v,i?Gw,v,i???
按以上方式處理所有HHH中的所有元素,得到
H=∑i=1mFi⊙Gi?∑i=1mFi⊙Fi?H=\frac{\sum_{i=1}^m F_i \odot G_i^*}{\sum_{i=1}^m F_i \odot F_i^*} H=∑i=1m?Fi?⊙Fi??∑i=1m?Fi?⊙Gi???
就可以開始跟蹤了。在跟蹤的過程中,我們只需要把以上模板與當前幀的圖像作相關操作,將得到的響應結果中最大的那點對應坐標作為目標在當前幀位置就可以了(相當于在2維上平移我們的模板)。然后,模板的更新方式可以按照如下的方式進行:
Ht=(1?η)Ht?1+ηH(t)H_t=(1-\eta)H_{t-1}+\eta H(t) Ht?=(1?η)Ht?1?+ηH(t)
H(t)H(t)H(t)表示在第ttt幀求得的濾波模板,η\etaη為一經驗常數。
本文的內容大體就這樣了,剩下的就是在(25)上面進行一些修改,比如在分母里引進一個?\epsilon?作為正則化的參數,或者分別求HiH_iHi?然后作平均等,都是一些小的技巧??偟脕碚f,MOSSE方法開創了CF在tracking方面的先河。
五、代碼分析
%產生高斯形狀的理想響應F_response=templateGauss(target_sz,im);%目標框區域和濾波器卷積得到響應值newPoint=real(ifft2(F_Template.*fft2(target_box)));%其中響應值最大值對應的坐標即為新目標的位置[row, col,~] = find(newPoint ==max(newPoint(:)), 1);%以新目標為中心選擇目標框F_im=fft2(getsubbox(pos,target_sz,im));%求解濾波器模板F_Template=conj(F_im.*conj(F_response)./(F_im.*conj(F_im)+eps));im.*conj(F_im)+eps));
總結
- 上一篇: 数模算法:模糊综合评价模型
- 下一篇: styleGAN