YOLO 9000 中的WordTree細節問題


YOLO9000

VOC數據集可以檢測20種對象,但實際上對象的種類非常多,只是缺少相應的用於對象檢測的訓練樣本。YOLO2嘗試利用ImageNet非常大量的分類樣本,聯合COCO的對象檢測數據集一起訓練,使得YOLO2即使沒有學過很多對象的檢測樣本,也能檢測出這些對象。

基本的思路是,如果是檢測樣本,訓練時其Loss包括分類誤差和定位誤差,如果是分類樣本,則Loss只包括分類誤差。

1)構建WordTree

要檢測更多對象,比如從原來的VOC的20種對象,擴展到ImageNet的9000種對象。簡單來想的話,好像把原來輸出20維的softmax改成9000維的softmax就可以了,但是,ImageNet的對象類別與COCO的對象類別不是互斥的。比如COCO對象類別有“狗”,而ImageNet細分成100多個品種的狗,狗與100多個狗的品種是包含關系,而不是互斥關系。一個Norfolk terrier同時也是dog,這樣就不適合用單個softmax來做對象分類,而是要采用一種多標簽分類模型。

YOLO2於是根據WordNet[5],將ImageNet和COCO中的名詞對象一起構建了一個WordTree,以physical object為根節點,各名詞依據相互間的關系構建樹枝、樹葉,節點間的連接表達了對象概念之間的蘊含關系(上位/下位關系)。

 

圖10 WordTree

 

整個WordTree中的對象之間不是互斥的關系,但對於單個節點,屬於它的所有子節點之間是互斥關系。比如terrier節點之下的Norfolk terrier、Yorkshire terrier、Bedlington terrier等,各品種的terrier之間是互斥的,所以計算上可以進行softmax操作。上面圖10只畫出了3個softmax作為示意,實際中每個節點下的所有子節點都會進行softmax。

2)WordTree的構建方法。

構建好的WordTree有9418個節點(對象類型),包括ImageNet的Top 9000個對象,COCO對象,以及ImageNet對象檢測挑戰數據集中的對象,以及為了添加這些對象,從WordNet路徑中提取出的中間對象。

構建WordTree的步驟是:①檢查每一個將用於訓練和測試的ImageNet和COCO對象,在WordNet中找到對應的節點,如果該節點到WordTree根節點(physical object)的路徑只有一條(大部分對象都只有一條路徑),就將該路徑添加到WrodTree。②經過上面操作后,剩下的是存在多條路徑的對象。對每個對象,檢查其額外路徑長度(將其添加到已有的WordTree中所需的路徑長度),選擇最短的路徑添加到WordTree。這樣就構造好了整個WordTree。

3)WordTree如何表達對象的類別

之前對象互斥的情況下,用一個n維向量(n是預測對象的類別數)就可以表達一個對象(預測對象的那一維數值接近1,其它維數值接近0)。現在變成WordTree,如何表達一個對象呢?如果也是n維向量(這里WordTree有9418個節點(對象),即9418維向量),使預測的對象那一位為1,其它維都為0,這樣的形式依然是互斥關系,這樣是不合理的。合理的向量應該能夠體現對象之間的蘊含關系。

比如一個樣本圖像,其標簽是是"dog",那么顯然dog節點的概率應該是1,然后,dog屬於mammal,自然mammal的概率也是1,......一直沿路徑向上到根節點physical object,所有經過的節點其概率都是1。參考上面圖10,紅色框內的節點概率都是1,其它節點概率為0。另一個樣本假如標簽是"Norfolk terrier",則從"Norfolk terrier"直到根節點的所有節點概率為1(圖10中黃色框內的節點),其它節點概率為0。

所以,一個WordTree對應且僅對應一個對象,不過該對象節點到根節點的所有節點概率都是1,體現出對象之間的蘊含關系,而其它節點概率是0。

4)預測時如何確定一個WordTree所對應的對象

上面講到訓練時,有標簽的樣本對應的WordTree中,該對象節點到根節點的所有節點概率都是1,其它節點概率是0。那么用於預測時,如何根據WordTree各節點的概率值來確定其對應的對象呢?

根據訓練標簽的設置,其實模型學習的是各節點的條件概率。比如我們看WordTree(圖10)中的一小段。假設一個樣本標簽是dog,那么dog=1,父節點mammal=1,同級節點cat=0,即P(dog|mammal)=1,P(cat|mammal)=0。

既然各節點預測的是條件概率,那么一個節點的絕對概率就是它到根節點路徑上所有條件概率的乘積。比如

P(Norfolk terrier) = P(Norfolk terrier|terrier) * P(terrier|hunting dog) * P(hunting dog|dog) *......* P(animal|physical object) * P(physical object)

對於分類的計算,P(physical object) = 1。

不過,為了計算簡便,實際中並不計算出所有節點的絕對概率。而是采用一種比較貪婪的算法。從根節點開始向下遍歷,對每一個節點,在它的所有子節點中,選擇概率最大的那個(一個節點下面的所有子節點是互斥的),一直向下遍歷直到某個節點的子節點概率低於設定的閾值(意味着很難確定它的下一層對象到底是哪個),或達到葉子節點,那么該節點就是該WordTree對應的對象。

5)分類和檢測聯合訓練

由於ImageNet樣本比COCO多得多,所以對COCO樣本會多做一些采樣(oversampling),適當平衡一下樣本數量,使兩者樣本數量比為4:1。

YOLO9000依然采用YOLO2的網絡結構,不過5個先驗框減少到3個先驗框,以減少計算量。YOLO2的輸出是13*13*5*(4+1+20),現在YOLO9000的輸出是13*13*3*(4+1+9418)。假設輸入是416*416*3。

由於對象分類改成WordTree的形式,相應的誤差計算也需要一些調整。對一個檢測樣本,其分類誤差只包含該標簽節點以及到根節點的所有節點的誤差。比如一個樣本的標簽是dog,那么dog往上標簽都是1,但dog往下就不好設置了。因為這個dog其實必然也是某種具體的dog,假設它是一個Norfolk terrier,那么最符合實際的設置是從Norfolk terrier到根節點的標簽都是1。但是因為樣本沒有告訴我們這是一個Norfolk terrier,只是說一個dog,那么從dog以下的標簽就沒法確定了。

對於分類樣本,則只計算分類誤差。YOLO9000總共會輸出13*13*3=507個預測框(預測對象),計算它們對樣本標簽的預測概率,選擇概率最大的那個框負責預測該樣本的對象,即計算其WrodTree的誤差。

另外論文中還有一句話,"We also assume that the predicted box overlaps what would be the ground truth label by at least .3 IOU and we backpropagate objectness loss based on this assumption."。感覺意思是其它那些邊框,選擇其中預測置信度>0.3的邊框,作為分類的負樣本(objectness)。即這些邊框不應該有那么高的置信度來預測該樣本對象。具體的就要看下代碼了。

原文鏈接:https://zhuanlan.zhihu.com/p/47575929


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM