STCT: Sequentially Training Convolutional Networks for visual tracking

1、怎麼將CNN用在特定的任務中




圖1. 將CNN用在特定的任務中

  衆所周知CNN的使用往往需要大量的訓練樣本,但是我們在很多特定任務中是沒法獲得像imageNet那樣龐大的樣本庫,因此如何在小樣本中使用CNN是一個難題。後來很多學者經過研究發現CNN的模型有很好的泛化性能,即在大樣本庫中訓練好的CNN模型對於特定的任務也有不錯的性能。一些學者根據這個特性提出了fine-tune的方法,
  
  如圖1所示。我們首先在big dataset上訓練好CNN模型,然後用我們特定任務中獲得的樣本對CNN模型進行微調(fine-tune),上圖中最左側是經典的CNN模型VGGnet,我們用imagenet數據庫對其訓練(其實是別人訓練好,我們直接把訓練結果拿來用);

  如果我們的訓練樣本數量不少,如上圖右側部分所示,那麼我們可以用自己的樣本更新更多的層,比如上圖右側中,不僅更新了全連接層,還更新了pooling層以及卷積層。

2、將CNN用在visual tracking中

  目前用CNN做跟蹤的方法主要有兩種,一種是利用已經訓練好的CNN模型提取目標特徵,再採用傳統的目標跟蹤方法進行跟蹤;一種是利用已知的跟蹤目標樣本來對CNN模型進行fine-tune,將最終訓練的結果用於跟蹤。

  第一種方法本身具有侷限性,CNN提取到的特徵具有很強的語義信息,但是空間信息卻很缺乏。第二種方法由於跟蹤中樣本數量太少,確定的樣本往往只有第一幀的目標,因此fine-tune出的新模型很容易出現過擬合。

  爲緩解上述問題,作者提出了sequential training method,將CNN中每個卷積覈對應的特徵map輸出看成是一個基學習器,將CNN的訓練過程看成是一個集成學習的過程,然後用集成學習的方法得到最終的跟蹤分類器。

3、集成學習(ensemble learning)

  說到集成學習,可能有些人聽起來會覺得陌生,但是提到adaboost,相信很多人都聽過,而adaboost就是集成學習中的一個經典算法。中心思想是將最終的高級分類器看成是一些低級(基)分類器的加權組合。即:

F(x⃗ )α0+m=1Mαmf(x⃗ ;γm)

  其中F(x) 代表最終的集成分類器,f(x⃗ ;γ) 代表每個基分類器。αmγm 則代表基分類器與集成分類器相關性係數和基分類器本身的參數。
  類似於一般的分類算法中的損失函數,集成學習中用Q(γ) 來表示基分類器的損失,同時也可以理解成基分類器與當前問題的無關性。
Q(γ)=minα0,α1Ni=1NL(yi,α0+αf(x⃗ ,γ))

  集成學習的一大好處就是能夠增加分類器的表達能力(泛化能力),但是我們該如何選擇基分類器呢?如果基分類器之間非常相似,那最終的集成分類器則不具有較好的多樣性,因此在集成學習中用σ 來表示基分類器之間的相關性:
σ=1Mm=1M[Q(γm)Q(γ)]

  各個基分類器與最優基分類器的相關性。當σ 很小時,則說明各個基分類器之間的相關性很高,降低了集成分類器的多樣性,也降低了分類器的泛化性能;而當σ 很大時,則說明基分類器之間大部分的基分類器都與當前問題無關。過大或者過小的σ 都對集成分類器有不好的影響,因此我們要想辦法選擇合適的基分類器,使得σ 不大也不小。Friedman and Popescu在Importance sampled learning ensembles中提出了一種sequential sampling方法,這種方法首先修改了基分類器的損失表達形式:
Qm(γ|{γ}m11)=minα0,α1NL(yi,α0+αmf(x⃗ i;γ)+ηk=1m1αkf(x⃗ i;γk))

  這裏的η 是控制先前選取的基分類器對當前分類器的影響程度。
  有了上述改進的基分類器損失表達形式,則選出的新的基分類器的參數爲:
γm=argminγQ(γ|γkm11)

  通過這種方法能夠有效的增加基分類器的多樣性,提升分類器的泛化性能。

4、用序貫集成學習方法在線訓練CNN

  CNN-E來表示預訓練(pre-trained)的卷積神經網絡,這個預訓練的圖像能夠將輸入的RGB圖像轉化爲512*7*7的輸出特徵圖X。
  CNN-A表示在線更新的卷積神經網絡。這是一個兩層的卷積神經網絡,採用ReLU作爲非線性激活函數。CNN-A以CNN-E的輸出X作爲輸入,並輸出最終的特徵圖。整個模型如下圖:



圖2. STCT模型圖

  其中的pre-trained feature map是VGGnet的輸出,輸出的特徵是512個通道,7*7大小的特徵圖,即512*7*7。



圖3. VGGnet結構圖

  在線更新的CNN共有兩層卷積層,第一層採用大小爲5*5的卷積核,生成100*3*3的結果,第二層採用3*3的卷積核,生成一個通道的輸出結果,代表目標的位置。

  所以最後的輸出,即卷積輸出結果可以表示成如下形式:

F2(X)=k=1C1wkFk1(X)+bc

  根據集成學習的形式,作者講上述的卷積的輸出F2(X) 看成是一些基分類器的加權和,即:
F2(X)=k=1C1f(X;γck)

  所以,在線的更新CNN-A就可以等價的看成更新每一個基分類器,並且序貫的選擇最優基分類器來構成最終的分類器。

5、怎麼訓練級聯分類器,以及在線更新每個基分類器



圖4. STCT實現流程圖

  • 1、隨機初始化每個基分類器,並用第一幀的目標圖像對每個基分類器用SGD進行更新
  • 2、從這些基分類器中選出訓練誤差最小的分類器,將這個基分類器放入ensemble set集合ε 中,並將剩餘的C11 個基分類器放入候選集合ξ 中。ensemble set中基分類器的結合看成是集成分類器,可以寫成如下形式:
    F(X;ε)=1|ε|γiεf(X;γi)
  • 3、在第t幀,當獲得新的訓練樣本Xt 以及其對應的標籤Yt 後,仍舊採用SGD和如下的損失函數對ε 中的分類器F(X;ε) 進行參數更新:Lε=L(Yt,F(Xt;ε) 。對於候選集合ξ 中的每一個基分類器也都各自的採用如下損失函數和SGD進行更新:Lξ(Yt,f(Xt;γj))=L(Yt,f(Xt;γj)+ηF(Xt;ε))
  • 4、當訓練誤差Lε 高於我們給定的一個閾值,並且候選集合ξ 不爲空,那麼在候選集合中選出訓練誤差最小的一個基分類器,將其放入ensemble set中,同時從候選集中刪除。

      經過上述訓練過程,最終訓練出的CNN的每個通道都是採用不同的損失函數訓練而成,因此整個CNN模型更加具有多樣性和較好的泛化性能。

6、帶有掩膜的卷積層

  dropout是神經網絡中一種常見的正則方法,其原理是在全連接層隨機的讓一些激活神經元的輸出爲0。但是這種正則化方法不適用於卷積層,而本文使用的是兩層卷積層,因此沒法採用dropout方法防止過擬合。後面又有spatial dropout方法,這種方法是直接讓卷積層的某個通道全爲0,可以適用於卷積層,但是作者通過實驗發現這種方法有時候會導致發散。

  爲了提高模型的泛化能力,作者提出在卷積層後面加上一層二值掩膜層(mask layer),掩膜層的空間大小與卷積層的空間大小一致,其在初始階段隨機初始化,並且在後面的在線訓練過程中不發生改變。
卷積層與掩膜層相乘的結果如下:

Fc=k=1Kwck(McXk)+bc

7、跟蹤中的具體實現

一、在初始化階段:

  1、採用歐氏距離作爲損失函數對基分類器{f(X1;γk)}1100 進行選擇:

L(M1,f(X1;γk))=||M1f(X1;γk)||22

  其中M1 是一個二維高斯分佈,高斯分佈的中心處於目標的中心。
  根據上述式子,計算出每個初始的基分類器的損失值後,選擇損失值最小的一個基分類器,將其取出,放入ensemble set中,其餘的放入候選集合中。

  2、採用hinge loss作爲尺度金字塔網絡的損失函數,構造SPN network:

LS=max(0,1+maxsls,slSFS(Γ(X,sl))FS(Γ(X,s)))+RS

  其中S={sl|l=1,2,...,ns} 代表不同的尺度,s 代表目標真正的尺度,{Γ(S,s)}ns1 代表不同尺度經過CNN-E後的特徵圖。FS 是SPN對不同尺度的打分,RS 是權值衰減。

二、在線更新階段

  在第t幀的圖像,首先獲取一個以上一幀目標爲中心矩形框,將矩形框內容通過CNN-E提取特徵圖,同時用如下式子預測特徵的響應熱圖:

M^=1|ε|γiεf(X;γi)

  找到熱圖中響應最大的位置,並且此位置的響應值大於置信閾值conf時,將此位置定爲當前幀的目標框所在位置。爲了預測當前目標尺度,獲取以當前預測位置爲中心,兩倍目標大小的區域,將其傳入SPN network,並根據s^=argmaxslSFS(Γ(X^t,sl)) 獲取最終的尺度。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章