目標追蹤論文之狼吞虎嚥(1):VITAL演算法
VITAL: VIsual Tracking via Adversarial Learning
一、摘要
當前已有的基於神經網路的目標追蹤演算法大都是基於這樣一個兩階段框架:
- 先是在目標可能出現的位置附近找出一系列樣本;
- 然後對這些樣本進行分類,判斷是屬於目標還是背景。
由此會導致追蹤演算法在以下兩個層面受到限制:
- 每一幀上的正樣本在空間上高度重疊,難以捕獲到大規模形變;
- 類不均衡:正樣本數遠遠小於負樣本。
為了解決上述兩個問題,作者提出了基於對抗學習的VITAL演算法:
- 為了增強正樣本資料,使用一個生成對抗式網路(GAN)隨機產生遮罩mask,這些mask作用在輸入特徵上來捕獲目標物體的一系列變化。在對抗學習的作用下,作者的網路能夠識別出在整個時序中哪一種mask保留了目標物體的魯棒性特徵。
- 為了解決類不均衡問題,作者提出了一個高階的代價敏感損失函式,用於降低簡單負樣本的影響力,促進網路的訓練。
二、VITAL演算法
2.1 對抗學習
GAN原理:在訓練過程中,生成網路G的目標是儘量生成真實的圖片去欺騙判別網路D,而D的目標是儘量把G生成的圖片和真實的圖片區分開來。通過使用標準的交叉熵代價函式,模型的損失函式定義為:
式(1)
公式說明:
符號 | 含義 |
---|---|
x | 真實圖片 |
z | 隨機噪聲 |
D(x) | 判別網路D判斷真實圖片x是否真實的概率 |
G(z) | 生成網路G通過隨機噪聲z生成的偽造圖片 |
D(G(z)) | 判別網路D判斷偽造圖片是否真實的概率 |
(1)對於判別網路D而言,D(x)越接近於1越好,說明判別網路D明辨是非的能力越強,所以目標是使得V(D,G)變大;
(2)對於生成網路G而言,D(G(z))越接近於1越好,說明生成網路G以假亂真的能力越強,所以目標是使得V(D,G)變小。
作者指出傳統的GAN並不適合於直接用在目標跟蹤任務中,主要有以下三點原因:
Ⅰ、在目標跟蹤中,輸入網路的資料不是隨機噪聲,而是一個從實際圖片中取樣得到的影象區域塊;
Ⅱ、在目標跟蹤中,我們需要有監督的訓練分類器,而不是像傳統GAN一樣做無監督的訓練;
Ⅲ、在目標跟蹤中,我們最終的目的是獲得分類器D,而不是像傳統GAN一樣最終目的是獲得G。
為了將GANs應用到檢測追蹤tracking-by-detection框架上,
作者在VGG-M網路的基礎上設計了這樣一個網路:在最後一個卷積層和第一個全連線層之間增加了一個生成式網路,從而達到在特徵空間增強正樣本的目的。具體的,生成式網路輸入為目標特徵,輸出為一個mask矩陣,該mask矩陣作用於目標特徵後表示目標的一種外觀變化。通過對抗學習,該生成式網路可以產生能保留目標特徵中最魯棒部分的mask矩陣(說白了就是自動判斷特徵中哪部分是目標的魯棒表達,哪部分對目標變化不魯棒,幹掉後者保留前者的智慧mask矩陣)。最終,訓練得到的生成式網路生成的mask矩陣可以對判別力強的特徵進行削弱,防止判別器過擬合於某個樣本。
(這裡,可能會有人提出疑問,削弱有判別力的特徵?有沒有搞錯?當然沒有~聽我解釋:首先,我們要知道判別力強的特徵和魯棒性強的特徵是不一樣的,打個比方——假設我們要跟蹤一個人臉,一開始都是正常的人臉,然後我突然在第100幀的時候往人臉上貼一個小的暴走漫畫!那麼,對於100幀來說,這個暴走漫畫就屬於判別力強的特徵,因為他相對人臉其他部分來說邊緣性強,而且只有人臉這裡有這個漫畫,其他地方都沒有,在第100幀可以合理的認為有漫畫的地方就是人臉,這就是判別力強的特徵。而什麼是魯棒性強的特徵呢?當然是眼睛,眉毛,鼻子,嘴之類的,因為他們始終屬於人臉,並且大部分時候都是可見的,我們根據他們來判斷一個目標框是不是人臉,從長遠角度看是更可靠的,畢竟第150幀你可能撕掉了暴走漫畫,但是你撕不掉鼻子吧~所以,我們希望判別器關注魯棒性強的特徵(因為它具有一般性),削弱判別力強的特徵(因為它具有偶然性))
網路分成三大部分:
1. 特徵提取器:VGG-M網路提取多通道的特徵
2. 對抗特徵生成器:產生能保留目標特徵中最魯棒部分的mask矩陣
3. 判別分類器:與GAN不同,本文的目的在於獲得一個對目標變化魯棒的判別器。
類似上面的損失函式,這裡的損失函式定義為:
式(2)
公式說明:
符號 | 含義 |
---|---|
M | 在特徵C下理論上最優的mask矩陣(讓判別器犯錯越明顯就越優) |
C | 目標經過VGG-M網路後得到的多通道的特徵 |
對輸入特徵C做dropout | |
G(C) | 生成網路G作用於輸入特徵C生成的mask矩陣 |
上式的訓練目的可以描述為:G想得到C後盡力生成mask矩陣,使得D很難判斷M⋅C和G(C)⋅C的區別,所以G的目的是生成靠近於M的mask矩陣,於此同時,D又想,即使在C上增加了M⋅C和G(C)⋅C干擾,我也要努力的區分出他們的不同,這樣,有干擾的我都不怕,我還會怕你沒幹擾的嗎?明顯又是一個G和D相愛相殺的過程;
網路執行簡述:當訓練分類器D的時候,提取目標特徵C後,不直接將C送給分類器進行訓練,而是先使用G網路生成mask,mask作用於C後在送到分類器D中進行分類器學習。值得一提的是,最初G根據C生成隨機的mask矩陣(因為初始狀態下G是隨機的),且每一個mask矩陣都對應目標的一種外觀變化,希望多個mask可以儘量覆蓋目標的各種變化。通過對抗訓練後,G會學會如何根據C產生最難為最不利於分類器D分類的mask(這個時候就很6了),這個時候的G就是一個相對智慧的了。當然~不要忘記了我們的D,D發現:我湊~G變聰明瞭,那我也不能水了,我也要學一些魯棒的特徵來對抗G了~就這樣,D和G就既像一對好基友相互促進,又像一對敵人相互為難。
通過上述對抗學習,結果是分類器會更加關注魯棒的特徵,而對有判別力的特徵關注較少;為了形象說明,以下圖為例:
對於視訊幀(a),不使用對抗學習(GAN)的圖(b)的熵分佈和(c)很相似。然而,如視訊幀(d),當目標經過部分遮擋和平面外旋轉後,不使用GAN的圖(e)的熵變大,意味著這時候的分類器對目標周圍區域的判別變得很模糊了。這是因為訓練器訓練時專注於歷史幀中有判別力的特徵,當目標在測試幀中發生變化後,這些有判別力的特徵將大大降低分類器的準確度。
而對比圖(f),其熵分佈就沒有像(e)一樣變化得很明顯了,這是因為分類器是通過上述對抗學習,會更加關注魯棒的特徵,而對有判別力的特徵關注較少;
2.2 代價敏感損失
首先讓我們一起來回顧一下二分類中交叉熵(cross entropy,簡稱CE)損失的概念。記y{0,1}作為類標,p[0,1]是估計樣本是正類(y=1)的概率,則樣本是負類(y=0)的概率為1-p。交叉熵損失的公式為:
交叉熵損失一個顯著的問題是簡單負樣本,例如當p<<0.5且y=0時計算的損失值儘管小,但是如果存在很多簡單負樣本的話,最後累加起來還是會超過稀缺的正樣本的損失值。在目標追蹤中,由於正樣本少,單簡單負樣本很多,就會出現類不平衡問題。簡單負樣本佔據了交叉熵損失的絕大部分,主宰著梯度。
目前這個問題的解決方法包括複雜負樣本挖掘、訓練資料重賦權。想讓一個分類器能夠對代價敏感,最簡單的方法是調整類的重要性。舉個栗子,當正負樣本數之比為1:100時,則設負類的重要性為0.01。注意到簡單地加一個調整因子來平衡正負類的重要性並不能看出每個樣本的簡單或複雜程度。於是,作者引入了focal loss,在交叉熵損失中根據神經網路輸出的概率p加了一個調整因子,改進後的損失函式為:
有了上述公式後,作者又重新定義了模型總的誤差函式為: