Target Tracking-MDNet分析

MDNet

如果直接使用DL方法從多個視頻序列中對各個不同類型的目標進行通用的特徵提取,幾乎是不現實的。因爲在某一個視頻中的目標可能在另一個視頻中就是背景。也就是說這個目標在A視頻中對應的標籤是1,在另一個B視頻中對應的標籤可能就是0了,所以一會作爲目標,需要學習它的特徵,來降低Loss Function,一會兒又要作爲背景,不學習它的特徵,才能降低Loss Function。

所以針對這個問題,提出了Multi-Domain的算法,提出了一種新的CNN的網絡結構,整個算法的網絡架構分爲共享層和特定域層,每個視頻對應特定域層中的一個域,Domain,所以用於MDNet參數學習的多個視頻序列對應的就是多個Domain,這也就是Multi-Domain的由來。將不同視頻中的不同類型的目標的通用特徵通過共享層進行提取,而對於每一個特定的用於跟蹤的視頻,則選擇最接近的Domain來作爲特定類型目標的特徵的提取,並且進行

在線finetune,由此在所有不同類型的目標的通用特徵的基礎上強化特定某種類型目標的特徵。 

============================

關於在線finetune部分:

作者還提出了一個有效的在線跟蹤框架,該框架基於MDNet獲得的特徵表示。當給出一個測試序列時,所有在訓練階段使用的二元分類層的現有分支被刪除,並構造一個新的單分支來計算測試序列中的目標分數。(所謂新的分支,可以理解爲就是tensorflow計算圖的分支,表示Loss Function的計算與定義,是用來用來輔助finetune過程的。) 然後在跟蹤過程中對共享層內的新分類層和完全連接層進行微調,以適應新的域。 在線更新是爲了模擬目標的長期和短期外觀變化以分別提高魯棒性和適應性,並將有效且高效的硬性負面挖掘技術(an effective and efficient hard negative mining technique)納入學習過程。

MDNet算法由多領域表示學習和在線視覺追蹤組成。主要工作和貢獻爲:

提出了一個基於CNN的多域學習框架,將領域獨立信息與領域特定信息分開,以有效捕獲共享表示。

============================

多域學習:

本文的深層CNN預練練方法屬於多域學習,它指的是一種學習方法,其中訓練數據來源於多個領域,領域信息被納入學習過程。

多領域學習在自然語言處理(例如,具有多個產品的情感分類和具有多個用戶的垃圾郵件過濾)中很流行,並且已經提出了各種方法。 在計算機視覺領域中,只有少數領域適應方法討論了多領域學習。例如,Duan等人引入了用於視頻概念檢測的SVM的域加權組合,並且Hoffman等人 提出了一個混合變換模型的對象分類。

============================

MDNetMulti-Domain的理解

理解在offline learning中specific layer的作用:是用於輔助shared layers對所有不同類型跟蹤目標的視頻序列進行學習的。也就是說,MDNet中進行offline learning的過程的最終目的是爲了讓shared layers對所有視頻序列中的通用特徵進行學習的。之所以在shared layers的訓練過程中還要加入specific layer進行輔助,是因爲對於衆多目標類型不同的視頻序列,要能訓練出一個ConvNet來區分出這些目標和背景幾乎是不現實的事情,因爲在一些視頻中,某個類型的物體可能是作爲這些視頻的目標,而在其他的視頻中,他們又可能只是作爲背景中的一部分。所以加入specific並令每一個視頻序列對應一個domain分支,從而將每個domain的專屬信息每個domain中具有的所有domain共有的信息進行分離。

由此可知,offline learning過程中的specific layer只是用於輔助shared layers中參數的學習,用於提取通用特徵,並沒有在tracking過程中的使用價值。所以在online tracking過程中,會將offline learning中的shared layers保留,將specific layer中的所有分支刪除,並且替換成一個初始參數隨機的且尚未經過訓練的FC layer,作爲tracking當前視頻的specific layer的domain分支,並且在online tracking的過程中會對shared layers中的FC layers和新增的specific layer中的參數進行更新。

學習算法的目標是訓練一個多域CNN可以在任意域中辨別目標和背景,這不是直接的,因爲來自不同域的訓練數據對目標和背景有不同的概念。不過,對於所有域中的目標表示仍然存在一些常見描述屬性,例如對照明變化的魯棒性,運動模糊,尺度變化等。爲了提取滿足這些公共屬性的有用特徵,我們通過結合多領域學習框架將領域獨立信息與領域特定信息分開。

============================

學習算法(訓練過程):

使用SGD算法對整個網絡進行更新,包括shared layers和specific layer。每個迭代過程中都僅對specific layer中的當前訓練視頻對應的特定domain分支進行更新,但是對於共享層,每一次迭代都會對其進行更新。

在第k次迭代中,網絡基於一個由第(k mod K k除以K取餘數)個序列的訓練樣本組成的minibatch更新(minibatch中包含的就是一些正負樣本),其中僅啓用第(k mod K)的單個分支fc6。一直重複,直到網絡收斂或達到預定義的迭代次數。

第一次迭代,用來自sequence1(訓練集中的視頻序列)的一個minibatch訓練網絡進行更新;

         第二次迭代,用來自sequence2 的一個minibatch訓練網絡進行更新;

         第k次迭代,用來自sequence(k mod K)的一個minibatch訓練網絡進行更新;

通過這個學習過程,獨立於領域的信息在共享層中建模,從中獲得有用的通用特徵表示。

  • 訓練樣本:

在K個標註的視頻序列,每幀抽取樣本數:

S+ = 50S+ = 50 (IoU≥0.7IoU≥0.7)

S- = 200S- = 200 (IoU≤0.5IoU≤0.3)

  • 學習率:

conv1-conv3卷積層的學習率爲0.0001,fc4-fc5全連接層的學習率爲0.001。

  • 訓練過程:

SGD迭代100次訓練,或訓練誤差收斂到一定閾值後結束;每次迭代按以下方法處理:第kthkth迭代中,minibatch(大小:128)由(kmodK)th視頻序列中的隨機八幀圖像隨機產生,其中32個正樣本和96個負樣本,對應的fc6th全連接層激活;

  • 訓練結果:

前5層共享權重(學習跟蹤視頻的公共屬性),最後一層針對特定目標選擇特定的層(配合訓練);

============================

在線finetune過程:

分爲long-term和short-term update。long-term update能解決對樣本敏感的問題,而short-term update能解決潛在的跟蹤失敗等問題,即能夠對跟蹤失敗的情況進行目標模版的更新。

其中long-term update使用的是long-term正樣本,short-term update使用的是short-term正樣本。而無論是long-term還是short-term update使用的都是short-term的負樣本。

並且在每一幀中生成一定數量的正樣本和負樣本用於訓練。通過在之前目標周圍按照某一種分佈方式生成一系列的候選區域,並且對每個候選區域使用網絡進行評估。生成正分數f+和負分數f-,分別對應該候選區域對應的是目標的可能性和對應的是背景的可能性。

  • 實現細節:

//long-term正樣本來自於long-term(最近100幀),負樣本來自於short-term(最近20幀)

//short-term正負樣本均來自於short-term(最近20幀)

//且無論是long-term還是short-term對負樣本都要進行hard negative mining 最終對分類器性能進行提升

  • 樣本採集:

根據跟蹤的目標區域,在當前幀採集50個正樣本(IoU≥0.6IoU≥0.6) 和200個負樣本(IoU≤0.3IoU≤0.3),並加入總的正負樣本數據集;由於卷積層參數不變,將樣本以卷積後的特徵保存,可以節省空間;

  • 總樣本集維護: 

總的正樣本集保存最近100次跟蹤成功幀的正樣本(此處作者的程序包含了沒有跟蹤成功的樣本,這樣幀對應的樣本爲空,不合理) 

總的負樣本集保存最近20次跟蹤成功幀的負樣本(此處作者的程序包含了沒有跟蹤成功的樣本,這樣幀對應的樣本爲空,不合理)

  • 跟蹤成功:

記錄跟蹤成功的幀

short-term訓練:

  • 更新規則:

每一幀中,目標得分小於0更新(目標外觀變化越快,模型更新越快)->short-term的體現

  • 訓練樣本: 

正樣本:最近20幀成功跟蹤收集的正樣本(第一幀訓練的500個正樣本直接添加進去,隨後每幀添加50個正樣本);從這些樣本中隨機挑選32*10個樣本作爲正樣本; 

負樣本:最近20幀成功跟蹤收集的負樣本(_第一幀訓練的5000個負樣本丟棄,每幀產生200個負樣本);(過期的負樣本和當前幀的相關度不大),從中隨機選出1024*10個負樣本,進行hard negative mining後得到96*10個負樣本。這些負樣本更具有代表性,如下圖所示;隨着跟蹤幀數增加,負樣本越來越難分 

  • 學習率:

fc4−fc6全連接層的學習率爲0.0003。

  • 訓練過程:

batch(大小:128)由32個正樣本和96個負樣本,迭代10次。

  • 訓練結果:

fine-tune fc4−fc6權重參數。

long-term訓練:

  • 更新規則:

10幀更新一次 - **訓練樣本**:->long-term的體現

  • 訓練樣本:

正樣本:最近100幀成功跟蹤收集的正樣本(第一幀訓練的500個正樣本直接添加進去,隨後每幀添加50個正樣本);從這些樣本中隨機挑選32*10個樣本作爲正樣本; 

負樣本:最近20幀成功跟蹤收集的負樣本(第一幀訓練的5000個負樣本丟棄,每幀產生200個負樣本);(過期的負樣本和當前幀的相關度不大),從中隨機選出1024*10個負樣本,進行hard negative mining後得到96*10個負樣本。這些負樣本更具有代表性,如下圖所示; 

  • 學習率:fc4−fc6全連接層的學習率爲0.0003。 
  • 訓練過程:batch(大小:128)由32個正樣本和96個負樣本,迭代10次。 
  • 訓練結果:fine-tune fc4−fc6權重參數。

============================

Online tracking過程:

初始訓練fc6層

  • 訓練樣本:

根據給定的初始bounding 按照以下策略隨機產生5500個樣本:

S+ = 50 S+ = 50 (IoU≥0.7IoU≥0.7)

S- = 200 S- = 200 (IoU≤0.3IoU≤0.3)

  • 學習率:

fc4-fc5的學習率爲0.0001(由於已經進行離線訓練過),fc6fc6的學習率爲0.001。

  • 訓練過程:

batch(大小:128)由32個正樣本和96個負樣本,迭代30次。

  • 訓練結果:

根據特定的跟蹤目標,fine-tune fc4-fc6層權重參數。

============================

Tracking Strategy

  • 候選樣本:

以前一幀目標位置爲均值,以(0.09r2,0.09r2,0.25)爲協方差,產生256個候選樣本,其中:r爲前一幀目標寬和高和的平均值;

  • 樣本評估:

將樣本通過網絡前向傳播計算樣本scores:/itf+(xi)/itf+(xi)和/itf-(xi)/itf-(xi),目標位置有下式產生: 

x∗=argmax_i f_+(x_i)

============================

Hard negative mining難分負樣本挖掘:

Hard negative從字面上理解,就是難以區分的負樣本。因爲負樣本中有完全不包含目標、只有背景的負樣本,也有包含一部分目標、大部分是背景的負樣本。hard negative通常是那些含有一部分目標、大部分是背景的負樣本。因爲含有一部分目標,所以才導致分類器難以將其正確地分類。簡單地理解就是將分類器難以進行分類的數據、分類器分類效果不好的數據重新用於分類器的訓練,從而加強分類器對這些難以進行分類的數據的分類效果,也可以抽象地理解爲是加強分類器對這些難以分類的數據的特徵的提取。

對於hard negative,可想而知是從negative中進行選取。對於樣本的生成,正樣本就是根據幀圖像中表示預測的目標的Bounding Box生成的,但是負樣本生成就沒有參照物了。所以在樣本的生成過程中,會根據預測目標的Bounding Box根據某一種分佈生成一系列的Proposal,這樣每個樣本都根據各個Proposal來生成。關於每個樣本的標籤,使用IoU爲標註的依據:當某一個Proposal與預測目標所在位置的Bounding Box的IoU大於某一個閾值時,將其標籤設置爲Positive;當某一個Proposal與預測目標所在位置的Bounding Box的IoU小於此閾值時,將其標籤設置爲Negative。注意,根據IoU說生成的樣本的標籤,是用於評價分類器性能的標準。權威...

之後,再各個Proposal上應用分類器,得到分類器對各個Proposal的分類結果。將分類器的分類結果與根據Proposal和Ground Truth Bounding Box的IoU所確定的各個Proposal的標籤進行比較,將False Positive選出來作爲hard negative,並將他們重新用於分類器的訓練。從而加強分類器對這類hard negative的分類性能。

在 bootstrapping 方法中, 我們先用初始的正負樣本(一般是正樣本+與正樣本同規模的負樣本的一個子集)訓練分類器, 然後再用訓練出的分類器對樣本進行分類, 把其中負樣本中錯誤分類的那些樣本(hard negative)放入負樣本集合, 再繼續訓練分類器, 如此反覆, 直到達到停止條件(比如分類器性能不再提升)“

首先我們看看 hard negative example 是怎麼定義?

negative,即負樣本,hard 說明是難以正確分類的樣本,也就是說在對負樣本分類時候,loss比較大(label與prediction相差較大)的那些樣本,也可以說是容易將負樣本看成正樣本的那些樣本;

對於目標檢測, 我們會事先標記 ground truth,然後再算法中會生成一系列 proposal,這些 proposal有跟 ground truth重合的也有沒重合的,那麼 IoU 超過一定閾值(通常0.5)的則認定爲是正樣本,以下的則是負樣本, 然後扔進網絡中訓練。 然而,這也許會出現一個問題那就是正樣本的數量遠遠小於負樣本,這樣訓練出來的分類器的效果總是有限的,會出現許多 false negative, 即預測爲負例的正樣本

一般來說, 負樣本遠多於正樣本, 如 99% 的負樣本, 那麼算法不需要訓練直接輸出爲負例, 準確率也會有 99%, 那麼正負樣本不均衡時, 預測偏向於樣本多的一方, 對於目標檢測而言, 負例多, 所以被預測爲 false negative(即預測爲負例的正樣本) 可能性比較大。

我們爲了避免這樣一種情況, 需要使用策略使得正負樣本儘量的均衡一點, Fast RCNN 採用的是隨機抽樣, 使得正負樣本的比例爲 1:3, 爲何是1:3, 而不是1:1呢? 可能是正樣本太少了, 如果 1:1 的話, 一張圖片處理的 ROI 就太少了,  訓練的效率就太低了, 但是負例比例也不能太高了, 否則算法會出現上面所說的 false negative 太多的現象, 選擇 1:3 這個比例是算法在性能和效率上的一個折中考慮。

Hard negative mining的實現過程是通過不停迭代,將所有false positive按照分類器輸出的對應的概率將他們排序,篩選出一些得分高的(得分高表示分類器更偏向於將他們分類成positive)false negative,再將他們依次重新送入分類器的訓練過程中,對分類器進行訓練。

思考:

選擇使用Proposal和Ground Truth的IoU爲依據來標記各個Proposal對應的標籤,正樣本數會遠遠少於負樣本數,這會導致false positive增加(即將negative分類成positive)的原因:

我們可以先驗的認爲, 如果 Roi 裏沒有物體,全是背景,這時候分類器很容易正確分類成背景,這個就叫 easy negative, 如果roi裏有二分之一個物體,標籤仍是負樣本,這時候分類器就容易把他看成正樣本,這時候就是 hard negative。

可想而知hard negative mining是一個對樣本集數據增強的一個過程。所以這個方法是用在樣本生成上的。尤其是當正樣本數目遠遠小於負樣本數目的時候。

============================

樣本生成:

  • 在線fine-tune階段的樣本生成:

//long-term正樣本來自於long-term(最近100幀),負樣本來自於short-term(最近20幀)

//short-term正負樣本均來自於short-term(最近20幀)

//且無論是long-term還是short-term對負樣本都要進行hard negative mining 最終對分類器性能進行提升

  • 樣本採集:

根據跟蹤的目標區域,在當前幀採集50個正樣本(IoU≥0.6IoU≥0.6) 和200個負樣本(IoU≤0.3IoU≤0.3),並加入總的正負樣本數據集;由於卷積層參數不變,將樣本以卷積後的特徵保存,可以節省空間;

同時注意,每一幀跟蹤成功的圖像生成的正負樣本數是固定的。所以在之後“最近x幀成功跟蹤收集的x樣本”中的“x幀”可以通過樣本數來體現。

  • 總樣本集維護: 

總的正樣本集保存最近100次跟蹤成功幀的正樣本(此處作者的程序包含了沒有跟蹤成功的樣本,這樣幀對應的樣本爲空,不合理) 

總的負樣本集保存最近20次跟蹤成功幀的負樣本(此處作者的程序包含了沒有跟蹤成功的樣本,這樣幀對應的樣本爲空,不合理)

跟蹤成功:記錄跟蹤成功的幀

總之,設置一個樣本池,將每一幀跟蹤結束後生成的樣本加入樣本池中。

short-term訓練:

  • 更新規則:

每一幀中,目標得分小於0更新(目標外觀變化越快,模型更新越快)->short-term的體現

  • 訓練樣本: 

正樣本:最近20幀成功跟蹤收集的正樣本(第一幀訓練的500個正樣本直接添加進去,隨後每幀添加50個正樣本);從這些樣本中隨機挑選32*10個樣本作爲正樣本; 

負樣本:最近20幀成功跟蹤收集的負樣本(第一幀訓練的5000個負樣本丟棄,每幀產生200個負樣本);(過期的負樣本和當前幀的相關度不大),從中隨機選出1024*10個負樣本,進行hard negative mining後得到96*10個負樣本。這些負樣本更具有代表性;隨着跟蹤幀數增加,負樣本越來越難分 

long-term訓練:

  • 更新規則:

10幀更新一次 - **訓練樣本**:->long-term的體現

  • 訓練樣本:

正樣本:最近100幀成功跟蹤收集的正樣本(第一幀訓練的500個正樣本直接添加進去,隨後每幀添加50個正樣本);從這些樣本中隨機挑選32*10個樣本作爲正樣本; 

負樣本:最近20幀成功跟蹤收集的負樣本(第一幀訓練的5000個負樣本丟棄,每幀產生200個負樣本);(過期的負樣本和當前幀的相關度不大),從中隨機選出1024*10個負樣本,進行hard negative mining後得到96*10個負樣本。這些負樣本更具有代表性,如下圖所示; 

  • 訓練階段的樣本生成

在K個標註的視頻序列,每幀抽取樣本數:

S+ = 50S+ = 50 (IoU≥0.7IoU≥0.7)

S- = 200S- = 200 (IoU≤0.5IoU≤0.3)

注意,hard negative mining過程僅在fine-tune過程中進行。而在訓練階段生成的負樣本不進行hard negative mining。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章