在目标跟踪问题中,我们经常会遇到一些对公式的求导(特别是偏导)运算。由于公式中的变量大多数是向量,矩阵,还有些实数和复数的操作,因此针对他们的求导运算可能会和普通变量的操作有些不一样。下面将详细介绍一下经典的跟踪算法-MOSSE方法中的求导运算。


MOSSE跟踪算法的简单介绍

假设ff<script type="math/tex" id="MathJax-Element-50">f</script> 是输入的图像,g<script type="math/tex" id="MathJax-Element-51">g</script> 是对应的理想输出, MOSSE算法的目标就是找到一个合适的滤波器hh<script type="math/tex" id="MathJax-Element-52">h</script> ,使得其满足以下公式:

h=minhi|fihgi|2<script type="math/tex" id="MathJax-Element-53">h = \mathop {\min }\limits_h {\sum\limits_i {\left| {{f_i} \star h - {g_i}} \right|} ^2}</script>

其中<script type="math/tex" id="MathJax-Element-54">\star</script> 表示训练表示两者卷积的操作,接下来将其转化到频域可得:

H=minHi|FiHGi|2H=minH⁡∑i|Fi⊙H∗−Gi|2<script type="math/tex" id="MathJax-Element-55">H = \mathop {\min }\limits_H {\sum\limits_i {\left| {{F_i} \odot {H^*} - {G_i}} \right|} ^2}</script>

注意这里的FF<script type="math/tex" id="MathJax-Element-56">F</script>,G<script type="math/tex" id="MathJax-Element-57">G</script> 和HH<script type="math/tex" id="MathJax-Element-58">H</script> 都是频域中的变量,F<script type="math/tex" id="MathJax-Element-59">F</script>是对原输入图像ff<script type="math/tex" id="MathJax-Element-60">f</script>做2D的傅里叶变化而得到的,有F=F(f)<script type="math/tex" id="MathJax-Element-61">F = {\rm{{\cal F}}}(f)</script> 。 <script type="math/tex" id="MathJax-Element-62"> \odot</script>表示对应元素相乘, <script type="math/tex" id="MathJax-Element-63">^*</script>表示共轭操作,ii<script type="math/tex" id="MathJax-Element-64">i</script> 表示训练数据的个数,即这里有i<script type="math/tex" id="MathJax-Element-65">i</script>组训练数据{fi,gi}{fi,gi}<script type="math/tex" id="MathJax-Element-66">\{ {f_i},{g_i}\} </script> 。因为这里的操作都是以元素为单位进行的,不同位置的元素之间的运算都是独立的,所以上式可以写成:

Hwv=minHwvi|FiwvHwvGiwv|2Hwv=minHwv⁡∑i|FiwvHwv∗−Giwv|2<script type="math/tex" id="MathJax-Element-67">{H_{wv}} = \mathop {\min }\limits_{{H_{wv}}} {\sum\limits_i {\left| {{F_{iwv}}{H_{wv}}^* - {G_{iwv}}} \right|} ^2}</script>

其中HwvHwv<script type="math/tex" id="MathJax-Element-68">H_{wv}</script>表示矩阵HH<script type="math/tex" id="MathJax-Element-69">H</script>中的第w<script type="math/tex" id="MathJax-Element-70">w</script>行第vv<script type="math/tex" id="MathJax-Element-71">v</script>列的元素。一般的求解方法就是,求出上面式子对于变量H<script type="math/tex" id="MathJax-Element-72">H</script>的偏导,进而求出最优解。由于在上面的式子中包含HH<script type="math/tex" id="MathJax-Element-73">H</script>的共轭部分,因此需要对Hwv<script type="math/tex" id="MathJax-Element-74">H_{wv}</script>和HwvHwv∗<script type="math/tex" id="MathJax-Element-75">{H_{wv}}^*</script>分别进行求导。

求偏导过程

HwvHwv∗<script type="math/tex" id="MathJax-Element-76">{H_{wv}}^*</script>求偏导:0=Hwvi|FiwvHwvGiwv|20=∂∂Hwv∗∑i|FiwvHwv∗−Giwv|2<script type="math/tex" id="MathJax-Element-77">0 = \frac{\partial }{{\partial {H_{wv}}^*}}{\sum\limits_i {\left| {{F_{iwv}}{H_{wv}}^* - {G_{iwv}}} \right|} ^2}</script>,将该式展开可得:

0=Hwvi(FiwvHwvGiwv)(FiwvHwvGiwv)0=∂∂Hwv∗∑i(FiwvHwv∗−Giwv)(FiwvHwv∗−Giwv)∗<script type="math/tex" id="MathJax-Element-78">0 = \frac{\partial }{{\partial {H_{wv}}^*}}{\sum\limits_i {({F_{iwv}}{H_{wv}}^* - {G_{iwv}})({F_{iwv}}{H_{wv}}^* - {G_{iwv}})} ^*}</script>

0=Hwvi[(FiwvHwv)(FiwvHwv)(FiwvHwv)GiwvGiwv(FiwvHwv)+GiwvGiwv]0=∂∂Hwv∗∑i[(FiwvHwv∗)(FiwvHwv∗)∗−(FiwvHwv∗)Giwv∗−Giwv(FiwvHwv∗)∗+GiwvGiwv∗]<script type="math/tex" id="MathJax-Element-79">0 = \frac{\partial }{{\partial {H_{wv}}^*}}{\sum\limits_i {[{({F_{iwv}}{H_{wv}}^*){{({F_{iwv}}{H_{wv}}^*)}^*}}-{({F_{iwv}}{H_{wv}}^*){G_{iwv}}^*}-{{G_{iwv}}({F_{iwv}}{H_{wv}}^*){^*}}+{{G_{iwv}}{G_{iwv}}^*}} ]}</script>

0=HwviFiwvHwvHwvFiwvFiwvHwvGiwvGiwvFiwvHwv+GiwvGiwv0=∂∂Hwv∗∑iFiwvHwv∗HwvFiwv∗−FiwvHwv∗Giwv∗−GiwvFiwv∗Hwv+GiwvGiwv∗<script type="math/tex" id="MathJax-Element-80">0 = \frac{\partial }{{\partial {H_{wv}}^*}}\sum\limits_i {{F_{iwv}}{H_{wv}}^*{H_{wv}}{F_{iwv}}^* - {F_{iwv}}{H_{wv}}^*{G_{iwv}}^* - {G_{iwv}}{F_{iwv}}^*{H_{wv}} + {G_{iwv}}{G_{iwv}}^*} </script>

0=HwviFiwvHwvHwvFiwvFiwvHwvGiwvGiwvFiwvHwv+GiwvGiwv0=∂∂Hwv∗∑iFiwvHwv∗HwvFiwv∗−FiwvHwv∗Giwv∗−GiwvFiwv∗Hwv+GiwvGiwv∗<script type="math/tex" id="MathJax-Element-81">0 = \frac{\partial }{{\partial {H_{wv}}^*}}\sum\limits_i {{F_{iwv}}{H_{wv}}^*{H_{wv}}{F_{iwv}}^* - {F_{iwv}}{H_{wv}}^*{G_{iwv}}^* - {G_{iwv}}{F_{iwv}}^*{H_{wv}} + {G_{iwv}}{G_{iwv}}^*} </script>

这里面的FiwvFiwv<script type="math/tex" id="MathJax-Element-82">F_{iwv}</script> , HwvHwv∗<script type="math/tex" id="MathJax-Element-83">{H_{wv}}^*</script>等变量均为单一的数,因此可以互换位置,如下所示:

0=HwviFiwvFiwvHwvHwvFiwvGiwvHwvFiwvGiwvHwv+GiwvGiwv0=∂∂Hwv∗∑iFiwvFiwv∗HwvHwv∗−FiwvGiwv∗Hwv∗−Fiwv∗GiwvHwv+GiwvGiwv∗<script type="math/tex" id="MathJax-Element-84">0 = \frac{\partial }{{\partial {H_{wv}}^*}}\sum\limits_i {{F_{iwv}}{F_{iwv}}^*{H_{wv}}{H_{wv}}^* - {F_{iwv}}{G_{iwv}}^*{H_{wv}}^* - {F_{iwv}}^*{G_{iwv}}{H_{wv}} + {G_{iwv}}{G_{iwv}}^*} </script>

0=iFiwvFiwvHwvFiwvGiwv0=∑iFiwvFiwv∗Hwv−FiwvGiwv∗<script type="math/tex" id="MathJax-Element-85">0 = \sum\limits_i {{F_{iwv}}{F_{iwv}}^*{H_{wv}} - {F_{iwv}}{G_{iwv}}^*}</script>

这样就可以计算HwvHwv<script type="math/tex" id="MathJax-Element-86">H_{wv}</script>的值: Hwv=iFiwvGiwviFiwvFiwvHwv=∑iFiwvGiwv∗∑iFiwvFiwv∗<script type="math/tex" id="MathJax-Element-87">{H_{wv}}{\rm{ = }}\frac{{\sum\nolimits_i {{F_{iwv}}{G_{iwv}}^*} }}{{\sum\nolimits_i {{F_{iwv}}{F_{iwv}}^*} }}</script>,将其转化为矩阵形式如下: H=iFiGiiFiFiH=∑iFi⊙Gi∗∑iFi⊙Fi∗<script type="math/tex" id="MathJax-Element-88">H{\rm{ = }}\frac{{\sum\nolimits_i {{F_i} \odot {G_i}^*} }}{{\sum\nolimits_i {{F_i} \odot {F_i}^*} }}</script>

参数更新方式

Hi=iFiGiiFiFiHi=∑iFi⊙Gi∗∑iFi⊙Fi∗<script type="math/tex" id="MathJax-Element-99">{H_i}{\rm{ = }}\frac{{\sum\nolimits_i {{F_i} \odot {G_i}^*} }}{{\sum\nolimits_i {{F_i} \odot {F_i}^*} }}</script>,所以有 Hi=iGiFiiFiFiHi∗=∑iGi⊙Fi∗∑iFi⊙Fi∗<script type="math/tex" id="MathJax-Element-100">{H_i}^{\rm{*}}{\rm{ = }}\frac{{\sum\nolimits_i {{G_i} \odot {F_i}^*} }}{{\sum\nolimits_i {{F_i} \odot {F_i}^*} }}</script>,令Ai=iGiFiAi=∑iGi⊙Fi∗<script type="math/tex" id="MathJax-Element-101">{A_i} = \sum\nolimits_i {{G_i} \odot {F_i}^*} </script>,Bi=iFiFiBi=∑iFi⊙Fi∗<script type="math/tex" id="MathJax-Element-102">{B_i} = \sum\nolimits_i {{F_i} \odot {F_i}^*} </script>,有Hi=AiBiHi∗=AiBi<script type="math/tex" id="MathJax-Element-103">{H_i}^{\rm{*}}{\rm{ = }}\frac{{{A_i}}}{{{B_i}}}</script>

更新时有:Ai=ηGiFi+(1η)Ai1Ai=ηGi⊙Fi∗+(1−η)Ai−1<script type="math/tex" id="MathJax-Element-104">{A_i} = \eta {G_i} \odot {F_i}^* + \left( {1 - \eta } \right){A_{i - 1}}</script> ,Bi=ηFiFi+(1η)Bi1Bi=ηFi⊙Fi∗+(1−η)Bi−1<script type="math/tex" id="MathJax-Element-105">{B_i} = \eta {F_i} \odot {F_i}^* + \left( {1 - \eta } \right){B_{i - 1}}</script> ,即当前帧中的滤波器HiHi∗<script type="math/tex" id="MathJax-Element-106">{H_i}^{\rm{*}}</script> 与前一帧中的滤波器Hi1Hi−1∗<script type="math/tex" id="MathJax-Element-107">{H_{i{\rm{ - }}1}}^{\rm{*}}</script>的关系为:

Hi=ηGiFi+(1η)Ai1ηFiFi+(1η)Bi1=ηAi+(1η)Ai1ηBi+(1η)Bi1Hi∗=ηGi⊙Fi∗+(1−η)Ai−1ηFi⊙Fi∗+(1−η)Bi−1=ηAi+(1−η)Ai−1ηBi+(1−η)Bi−1<script type="math/tex" id="MathJax-Element-108">{H_i}^{\rm{*}}{\rm{ = }}\frac{{\eta {G_i} \odot {F_i}^* + \left( {1 - \eta } \right){A_{i - 1}}}}{{\eta {F_i} \odot {F_i}^* + \left( {1 - \eta } \right){B_{i - 1}}}}{\rm{ = }}\frac{{\eta {A_i} + \left( {1 - \eta } \right){A_{i - 1}}}}{{\eta {B_i} + \left( {1 - \eta } \right){B_{i - 1}}}}</script>

参考文献资料

Visual object tracking using adaptive correlation filters[C]// CVPR, 2010:2544-2550.

更多推荐