天天看點

SiameseFC和CFNet細節筆記SiameseFCCFNet

這兩篇文章出自牛津大學同一個實驗室,一個發表在ECCV2016,一個發表在CVPR2017,下載下傳CFNet的matlab代碼中會有改進版的SiamFC代碼,也就是論文中提到的baseline-conv5,SiamFC的TensorFlow版本代碼也是這個架構的。

看代碼的過程中需要對論文熟悉,就再看了一遍這兩篇文章,發現有許多細節需要記錄下來。

SiameseFC:http://www.robots.ox.ac.uk/~luca/siamese-fc.html

CFNet:http://www.robots.ox.ac.uk/~luca/cfnet.html

SiameseFC

SiameseFC和CFNet細節筆記SiameseFCCFNet

這是SiamFC的架構圖,注意最後輸出的是一個17x17的響應圖,圖上的每一點對應的是搜尋圖像255x255的一個區域。

平移算子 ( L τ x ) [ u ] = x [ u − τ ] (L_\tau x)[u]=x[u-\tau ] (Lτ​x)[u]=x[u−τ]

h ( L k τ x ) = L τ h ( x ) h(L_{k\tau }x)=L_\tau h(x) h(Lkτ​x)=Lτ​h(x)

訓練

網絡的初始參數借鑒了MSRA何恺明的文章,參數均服從高斯分布

網絡的基礎結構是AlexNet,一共五層,如下:

C1:96個11*11*3的卷積核,步長為4;
        C2:256個5*5*48的卷積核,步長為1;
        C3:384個3*3*256的卷積核,步長為1;
        C4:384個3*3*192的卷積核,步長為1;
        C5:256個3*3*192的卷積核,步長為1。
           

損失函數:

l ( y , v ) = l o g ( 1 + e x p ( − y v ) ) l(y,v)=log(1+exp(-yv)) l(y,v)=log(1+exp(−yv))

L ( y , v ) = 1 ∣ D ∣ ∑ u ∈ D l ( y [ u ] , v [ u ] ) L(y,v)= \frac{1}{|D|} \sum_{u\in D}l(y[u],v[u]) L(y,v)=∣D∣1​u∈D∑​l(y[u],v[u])

u ∈ D u\in D u∈D是得分圖譜的位置, v [ u ] v[u] v[u]是這個位置做相關操作後的值 v = f ( z , x ; θ ) v=f(z,x;\theta ) v=f(z,x;θ), y [ u ] y[u] y[u]是這個位置的标簽,取{+1,-1}。

y [ u ] = { + 1  if  k ∥ u − c ∥ ≤ R − 1  otherwise  y[u]=\begin{cases} +1 & \text{ if } k\left \| u-c \right \|\leq R \\ -1 & \text{ otherwise } \end{cases} y[u]={+1−1​ if k∥u−c∥≤R otherwise ​

k是網絡的步長,當小于圖像中心一定距離時,取正标簽。

最小化這個 L ( y , v ) L(y,v) L(y,v),通過随機梯度下降法,求出網絡的參數 θ \theta θ。

訓練集是ILSVRC2015,為了更好的适應對訓練集做了一些處理,剔除了一些占整幅畫面太大或太小的目标,還剔除了一下距離圖檔邊緣太近的目标。處理後的資料集包含2820個視訊,843371個目标。

訓練的圖像對(pairs)包含兩幀的圖像,最多相隔T幀,因為是全卷積,學習傾向在圖像中心,是以訓練的目标都在圖像的中心,如下圖:

SiameseFC和CFNet細節筆記SiameseFCCFNet

對圖像的尺寸做了歸一化,不改變圖像的縱橫比,多出的部分用圖像的RGB均值填充。

網絡結構中沒有padding

跟蹤

本文隻是證明了全卷積孿生網絡做跟蹤的有效性,以及在imgnet上訓練的泛化能力,是以we do not update a model or maintain a memory of past appearances, we do not incorporate additional cues such as optical flow or colour histograms, and we do not re fine our prediction with bounding box regression.

盡管如此,它也表現出不錯的性能。

作者在得分圖上加入餘弦窗來懲罰過大的距離。

跟蹤時, φ ( x ) \varphi(x) φ(x)隻算一次,也就是樣例圖像隻是第一幀。

為了應對目标的尺度變化,搜尋分支的圖像選取了多個尺度。其中初始的SiamFC采用了5種尺度,分别是 1.02 5 { − 2 , − 1 , 0 , 1 , 2 } 1.025^{\left \{ -2,-1,0,1,2 \right \}} 1.025{−2,−1,0,1,2},針對這些尺度采用了以0.35為步長的線性函數作為抑制。另外SiamFC-3s則是采用了3種尺度 1.0 3 { − 1 , 0 , 1 } 1.03^{\left \{ -1,0,1 \right \}} 1.03{−1,0,1}。哪種尺度得分高選哪個。

通過雙三次插值上采樣得分圖譜從17x17變為272x272,來定位目标。雙三次插值的原理網上可以搜到。

疑問:bounding box怎麼确定的?

CFNet

SiameseFC和CFNet細節筆記SiameseFCCFNet

在孿生網絡結構的基礎上加了相關濾波器,在特征提取上,上下兩分支的網絡還是一模一樣的,不同的是在樣例分支上,也就是Training Image分支上加了相關濾波器,是以上面的分支出來的就是相關濾波器 w w w。本文的核心就是将CF可微,視為網絡中的一層,使之可以反向傳播,以至于整個網絡可以端到端的訓練。

我們知道,SiamFC的速度很快,但是精度方面不太好,因為全卷積的結構缺少特定目标判别性的資訊

加入CF,也就是相關濾波器,一是通過解嶺回歸問題,它的判别性比較好,二是它利用循環矩陣的性質在傅裡葉域計算很快,可以線上跟蹤。是以作者将CNN和CF結合了起來,可以端到端訓練。

通過下面的公式,算出相關濾波器:

arg ⁡ min ⁡ w 1 2 n ∥ w ⋆ x − y ∥ 2 + λ 2 ∥ w ∥ 2 \arg \min_{w} \frac{1}{2n}\left \| w\star x-y \right \|^2+\frac{\lambda }{2}\left \| w \right \|^2 argwmin​2n1​∥w⋆x−y∥2+2λ​∥w∥2

w w w是相關濾波器, y y y是 x x x位置的高斯響應, ⋆ \star ⋆ 代表的是互相關。

至于怎麼實作端到端的,具體細節可以看論文,推導過程中利用了将上述方程轉化為的拉格朗日對偶問題,再進行的微分。

作者還提到,其實 y y y是可以通過反向傳播優化的,但是效果并不好,是以幹脆就用了高斯響應。

SiameseFC和CFNet細節筆記SiameseFCCFNet

這張圖是CFNet和Baseline的比較,Baseline和之前提出的SiamFC還是有少許不同的,總步長由8改為了4,防止得出的相關濾波器圖譜過小,最後的特征圖通道數也限制在了32層。

通過對比可以看出,加入相關濾波器的CFNet的性能,并不是随着網絡的加深而提高,甚至出現了降低,說明相關濾波器主要需要的是淺層的特征資訊。在網絡層數較深的情況下,和SiamFC的性能差異不大,SiamFC是全卷積網絡,在網絡結構上還是有很大改進空間的,最近出了很多以此為baseline的論文印證了這一點。

繼續閱讀