MOSSE算法推导
引言
??MOSSE是在Visual Object Tracking using Adaptive Correlation Filters這篇文章中提出來(lái)的,MOSSE的全稱是Minimum Output Sum of Squared Error,令平方誤差和最小來(lái)計(jì)算得到濾波器。
算法流程
??相關(guān)濾波很容易理解,一幀圖像經(jīng)過相關(guān)運(yùn)算(濾波器)之后得到的響應(yīng)圖中,響應(yīng)最大的位置就是目標(biāo)所在的位置。這個(gè)相關(guān)計(jì)算的模板也就是濾波器,它濾除了和它不相關(guān)的內(nèi)容。
相關(guān)運(yùn)算和卷積運(yùn)算
??相關(guān)Correlation和卷積Convolution有著緊密的聯(lián)系。以一維的情況考慮。f[n]f[n]f[n]是原始序列,h[n]h[n]h[n]是濾波器,在它們都是實(shí)數(shù)的情況下,相關(guān)運(yùn)算結(jié)果g[n]g[n]g[n]可以表示為:
g[n]=∑τ=?∞∞f[τ]h[n+τ]g[n] = \sum^{\infty}_{\tau=-\infty}f[\tau]h[n+\tau]g[n]=τ=?∞∑∞?f[τ]h[n+τ]
??兩者卷積的結(jié)果為:
f[n]?h[n]=∑τ=?∞∞f[τ]h[τ?n]f[n]\ast h [n] = \sum^{\infty}_{\tau=-\infty}f[\tau]h[\tau-n]f[n]?h[n]=τ=?∞∑∞?f[τ]h[τ?n]
??可以觀察到,相關(guān)和卷積的計(jì)算非常相似,我們?nèi)绻?span id="ozvdkddzhkzd" class="katex--inline">f[n]f[n]f[n]與h[?n]h[-n]h[?n]卷積,那就能得到相關(guān)計(jì)算的結(jié)果了。有人可能會(huì)問了h[n]h[n]h[n]可以理解,但是h[?n]h[-n]h[?n]的話索引就小于0了,是什么呀?我們先不管這個(gè),先定性地再理解一下卷積和相關(guān)運(yùn)算的區(qū)別。在一維的情況下,相關(guān)運(yùn)算就像是把一條線段在另一條線段上拖動(dòng),每次兩條線段重合區(qū)域的長(zhǎng)度就是運(yùn)算結(jié)果;卷積運(yùn)算則是僅僅多了把一條線段反轉(zhuǎn)的步驟,同樣也是拖動(dòng)然后看重合的長(zhǎng)度。這樣我們就好理解了,這個(gè)h[?n]h[-n]h[?n]中的負(fù)號(hào)只是起到了序列前后反轉(zhuǎn)的作用。
g[n]=f[n]?h[?n]g[n] =f[n]\ast h [-n]g[n]=f[n]?h[?n]
??那么我們就可以把相關(guān)運(yùn)算表示成上面的卷積運(yùn)算。很多情況下,如果h[n]h[n]h[n]是一個(gè)對(duì)稱的序列,那么卷積和相關(guān)運(yùn)算得到的結(jié)果就是一樣的。
??為了簡(jiǎn)化計(jì)算,時(shí)域的卷積轉(zhuǎn)化為頻域的乘積,我們用DFT可以由f[n]f[n]f[n]計(jì)算得到F[k]F[k]F[k],下面是h[n]h[n]h[n]的DFT:
H[k]=∑n=0N?1h[n]e?j2πknNH[k]=\sum^{N-1}_{n=0}{h[n]e^{-j2\pi\frac{kn}{N}}}H[k]=n=0∑N?1?h[n]e?j2πNkn?
??而h[?n]h[-n]h[?n]經(jīng)過DFT之后得到的是什么呢?因?yàn)橐粋€(gè)序列就只有0到N-1的索引,這負(fù)的索引是什么呢?為此我又回顧了一遍DFT,我看的主要是奧本海姆的《離散時(shí)間信號(hào)處理》。書里講的DFT和DFS非常像,確實(shí)非常像!我自己的理解是:DFS和傳統(tǒng)意義的傅立葉變換更接近,它實(shí)現(xiàn)的是離散周期序列與離散周期序列之間的轉(zhuǎn)換(因?yàn)榇嬖凇爸芷趯?duì)離散”,“非周期對(duì)連續(xù)”這樣的對(duì)應(yīng)關(guān)系)。而DFT則是截取了DFS的一個(gè)周期的序列來(lái)表示,可以說(shuō)只是一種表示方法,在處理的時(shí)候要注意它固有的周期性。
??舉個(gè)例子,x[n]x[n]x[n]是長(zhǎng)度為4的序列,x~[n]\tilde x[n]x~[n]是周期延拓后的序列,x~[?n]\tilde x[-n]x~[?n]是翻轉(zhuǎn)后的序列,x[?n]x[-n]x[?n]是從翻轉(zhuǎn)后的序列中提取一個(gè)周期的序列。
∑n=0N?1h[?n]e?j2πknN=h[0]+∑n=1N?1h[N?n]e?j2πknN\sum^{N-1}_{n=0}{h[-n]e^{-j2\pi\frac{kn}{N}}}=h[0]+ \sum^{N-1}_{n=1}{h[N-n]e^{-j2\pi\frac{kn}{N}}}n=0∑N?1?h[?n]e?j2πNkn?=h[0]+n=1∑N?1?h[N?n]e?j2πNkn?
??令l=N?nl=N-nl=N?n,則n=N?ln=N-ln=N?l,代入上式得:
h[0]+∑l=1N?1h[l]e?j2πk(N?l)N=h[0]+∑l=1N?1h[l]ej2πklN=∑l=0N?1h[l]ej2πklN=H?[k]h[0]+ \sum^{N-1}_{l=1}{h[l]e^{-j2\pi\frac{k(N-l)}{N}}}=h[0]+ \sum^{N-1}_{l=1}{h[l]e^{j2\pi\frac{kl}{N}}}= \sum^{N-1}_{l=0}{h[l]e^{j2\pi\frac{kl}{N}}}=H^*[k]h[0]+l=1∑N?1?h[l]e?j2πNk(N?l)?=h[0]+l=1∑N?1?h[l]ej2πNkl?=l=0∑N?1?h[l]ej2πNkl?=H?[k]
??到這里我們就有了f[n]f[n]f[n]和h[?n]h[-n]h[?n]的DFT,它們倆的卷積可以用乘積表示,我們把g[n]g[n]g[n]的DFT結(jié)果記為G[k]G[k]G[k],則:
G[k]=F[k]⊙H?[k]G[k] = F[k]\odot H^*[k]G[k]=F[k]⊙H?[k]
MOSSE算法
??上面的式子再推廣到二維的情況也一樣是成立的,⊙\odot⊙表示二維矩陣FFF和H?H^*H?的對(duì)應(yīng)元素相乘。
G=F⊙H?G = F\odot H^*G=F⊙H?
??我們的目標(biāo)是求H?H^*H?,FFF是輸入的圖像,GGG是輸出的響應(yīng)。這個(gè)響應(yīng)需要我們自己設(shè)計(jì)。目標(biāo)經(jīng)過濾波器后,目標(biāo)所在位置的響應(yīng)最大,當(dāng)目標(biāo)在圖像中央時(shí),我們可以把這個(gè)響應(yīng)設(shè)定為峰值位置在圖像中央的二維高斯函數(shù)。
??如果只有一幅訓(xùn)練圖片的話,這就已經(jīng)能算出來(lái)了,H?=GFH^*=\frac{G}{F}H?=FG?(這里的除法指的是對(duì)應(yīng)元素相除),但是一般不只一幅圖,所以要求一個(gè)最優(yōu)的H?H^*H?。為此論文中提出的準(zhǔn)則是使每幅圖計(jì)算的結(jié)果和高斯模板之間的平方誤差之和最小,用公式表示就是:
min?H?∑i∣Fi⊙H??Gi∣2\mathop {\min }\limits_{{H^*}} \sum\limits_i {{{\left| {{F_i} \odot {H^*} - {G_i}} \right|}^2}} H?min?i∑?∣Fi?⊙H??Gi?∣2
??接下來(lái)就是想辦法求這個(gè)最優(yōu)化問題了,可以看到它類似一個(gè)一元二次函數(shù),但這里又都是復(fù)數(shù)運(yùn)算,所以還是有點(diǎn)不同。求解H?H^*H?可以分解為求解它的每一個(gè)元素。對(duì)于www行,vvv列的元素,有:
min?H?∑i∣Fiwv⊙Hwv??Giwv∣2\mathop {\min }\limits_{{H^*}} \sum\limits_i {{{\left| {{F_{iwv}} \odot {H^*_{wv}} - {G_{iwv}}} \right|}^2}} H?min?i∑?∣Fiwv?⊙Hwv???Giwv?∣2
??這就是標(biāo)量運(yùn)算了,我們先看i=1i=1i=1的情況。
min?H?∣FwvH?wv?Gwv∣=min?H?(FwvH?wv?Gwv)(FwvH?wv?Gwv)?=min?H?FwvFwv?HwvH?wv?GwvFwv?Hwv?Gwv?FwvH?wv?GwvG?wv\begin{array}{l} \mathop {\min }\limits_{{H^*}} \left| {{F_{wv}}{H^*}_{wv} - {G_{wv}}} \right|\\ = \mathop {\min }\limits_{{H^*}} \left( {{F_{wv}}{H^*}_{wv} - {G_{wv}}} \right){\left( {{F_{wv}}{H^*}_{wv} - {G_{wv}}} \right)^*}\\ = \mathop {\min }\limits_{{H^*}} {F_{wv}}{F_{wv}}^*{H_{wv}}{H^*}_{wv} - {G_{wv}}{F_{wv}}^*{H_{wv}} - {G_{wv}}^*{F_{wv}}{H^*}_{wv} - {G_{wv}}{G^*}_{wv} \end{array}H?min?∣Fwv?H?wv??Gwv?∣=H?min?(Fwv?H?wv??Gwv?)(Fwv?H?wv??Gwv?)?=H?min?Fwv?Fwv??Hwv?H?wv??Gwv?Fwv??Hwv??Gwv??Fwv?H?wv??Gwv?G?wv??
??求極值要涉及對(duì)復(fù)數(shù)的變量求導(dǎo),有人提出了Wirtinger導(dǎo)數(shù),其中z=x+jyz=x+jyz=x+jy,
??z=12[??x?j??y]??z?=12[??x+j??y]\frac{\partial }{{\partial z}} = \frac{1}{2}\left[ {\frac{\partial }{{\partial x}} - j\frac{\partial }{{\partial y}}} \right]\\ \frac{\partial }{{\partial {z^*}}} = \frac{1}{2}\left[ {\frac{\partial }{{\partial x}} + j\frac{\partial }{{\partial y}}} \right] ?z??=21?[?x???j?y??]?z???=21?[?x??+j?y??]
??根據(jù)上面的式子可以計(jì)算得到:
??zz?=??z?z=0\frac{\partial }{{\partial z}}{z^*} = \frac{\partial }{{\partial {z^*}}}z = 0?z??z?=?z???z=0
??據(jù)此可以知道HwvH_{wv}Hwv?在對(duì)Hwv?H_{wv}^*Hwv??求導(dǎo)的時(shí)候可以看作常數(shù)。因此對(duì)目標(biāo)函數(shù)求導(dǎo),并令導(dǎo)數(shù)為0可得:
??Hwv?(FwvFwv?HwvH?wv?GwvFwv?Hwv?Gwv?FwvH?wv?GwvG?wv)=FwvFwv?Hwv?Gwv?Fwv=0\begin{array}{l} \frac{\partial }{{\partial {H^*_{wv}}}}\left( {{F_{wv}}{F_{wv}}^*{H_{wv}}{H^*}_{wv} - {G_{wv}}{F_{wv}}^*{H_{wv}} - {G_{wv}}^*{F_{wv}}{H^*}_{wv} - {G_{wv}}{G^*}_{wv}} \right)\\ = {F_{wv}}{F_{wv}}^*{H_{wv}} - {G_{wv}}^*{F_{wv}} = 0 \end{array}?Hwv????(Fwv?Fwv??Hwv?H?wv??Gwv?Fwv??Hwv??Gwv??Fwv?H?wv??Gwv?G?wv?)=Fwv?Fwv??Hwv??Gwv??Fwv?=0?
Hwv=Gwv?FwvFwvFwv?,Hwv?=GwvFwv?FwvFwv?{H_{wv}} = \frac{{{G_{wv}}^*{F_{wv}}}}{{{F_{wv}}{F_{wv}}^*}}, {H_{wv}}^* = \frac{{{G_{wv}}{F_{wv}}^*}}{{{F_{wv}}{F_{wv}}^*}} Hwv?=Fwv?Fwv??Gwv??Fwv??,Hwv??=Fwv?Fwv??Gwv?Fwv???
??再推廣到i>1i>1i>1的情況:
H?=∑iGi⊙Fi?∑iFi⊙Fi?{H^*} = \frac{{\sum\nolimits_i {{G_i} \odot {F_i}^*} }}{{\sum\nolimits_i {{F_i} \odot {F_i}^*} }}H?=∑i?Fi?⊙Fi??∑i?Gi?⊙Fi???
??最后引入了學(xué)習(xí)率η\etaη來(lái)更新H?H^*H?:
Hn?=AnBnAn=ηGn⊙Fn?+(1?η)An?1Bn=ηFn⊙Fn?+(1?η)Bn?1\begin{array}{l} {H_n}^* = \frac{{{A_n}}}{{{B_n}}}\\ {A_n} = \eta {G_n} \odot {F_n}^* + (1 - \eta ){A_{n - 1}}\\ {B_n} = \eta {F_n} \odot {F_n}^* + (1 - \eta ){B_{n - 1}} \end{array}Hn??=Bn?An??An?=ηGn?⊙Fn??+(1?η)An?1?Bn?=ηFn?⊙Fn??+(1?η)Bn?1??
??其中n=1,2,3...n=1,2,3...n=1,2,3...代表測(cè)試圖片的幀數(shù)。A0=∑iGi⊙Fi?A_0=\sum\nolimits_i {{G_i} \odot {F_i}^*}A0?=∑i?Gi?⊙Fi??,B0=∑iFi⊙Fi?B_0=\sum\nolimits_i {{F_i} \odot {F_i}^*}B0?=∑i?Fi?⊙Fi??,實(shí)踐中發(fā)現(xiàn),η=0.125\eta=0.125η=0.125效果較好。
總結(jié)
- 上一篇: 数据结构一—— 数组
- 下一篇: 五大常用算法详解