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就是集成學習中的一個經典算法。中心思想是將最終的高級分類器看成是一些低級(基)分類器的加權組合。即:
其中
類似於一般的分類算法中的損失函數,集成學習中用
集成學習的一大好處就是能夠增加分類器的表達能力(泛化能力),但是我們該如何選擇基分類器呢?如果基分類器之間非常相似,那最終的集成分類器則不具有較好的多樣性,因此在集成學習中用
各個基分類器與最優基分類器的相關性。當
這裏的
有了上述改進的基分類器損失表達形式,則選出的新的基分類器的參數爲:
通過這種方法能夠有效的增加基分類器的多樣性,提升分類器的泛化性能。
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的卷積核,生成一個通道的輸出結果,代表目標的位置。
所以最後的輸出,即卷積輸出結果可以表示成如下形式:
根據集成學習的形式,作者講上述的卷積的輸出
所以,在線的更新CNN-A就可以等價的看成更新每一個基分類器,並且序貫的選擇最優基分類器來構成最終的分類器。
5、怎麼訓練級聯分類器,以及在線更新每個基分類器
圖4. STCT實現流程圖
- 1、隨機初始化每個基分類器,並用第一幀的目標圖像對每個基分類器用SGD進行更新
- 2、從這些基分類器中選出訓練誤差最小的分類器,將這個基分類器放入ensemble set集合
ε 中,並將剩餘的C1−1 個基分類器放入候選集合ξ 中。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),掩膜層的空間大小與卷積層的空間大小一致,其在初始階段隨機初始化,並且在後面的在線訓練過程中不發生改變。
卷積層與掩膜層相乘的結果如下:
7、跟蹤中的具體實現
一、在初始化階段:
1、採用歐氏距離作爲損失函數對基分類器
其中
根據上述式子,計算出每個初始的基分類器的損失值後,選擇損失值最小的一個基分類器,將其取出,放入ensemble set中,其餘的放入候選集合中。
2、採用hinge loss作爲尺度金字塔網絡的損失函數,構造SPN network:
其中
二、在線更新階段
在第t幀的圖像,首先獲取一個以上一幀目標爲中心矩形框,將矩形框內容通過CNN-E提取特徵圖,同時用如下式子預測特徵的響應熱圖:
找到熱圖中響應最大的位置,並且此位置的響應值大於置信閾值conf時,將此位置定爲當前幀的目標框所在位置。爲了預測當前目標尺度,獲取以當前預測位置爲中心,兩倍目標大小的區域,將其傳入SPN network,並根據