1. 程式人生 > >YOLOv2 目標檢測演算法詳細總結分析(one-stage)(深度學習)(CVPR 2017)

YOLOv2 目標檢測演算法詳細總結分析(one-stage)(深度學習)(CVPR 2017)

論文名稱:《 YOLO9000: Better, Faster, Stronger 》

論文下載: https://arxiv.org/abs/1612.08242 

論文程式碼: http://pjreddie.com/yolo9000/ 


一、演算法概述:

建立在YOLOv1的基礎上,經過Joseph Redmon等的改進,YOLOv2和YOLO9000演算法在2017年CVPR上被提出,並獲得最佳論文提名,重點解決YOLOv1召回率和定位精度方面的誤差。在提出時,YOLOv2在多種監測資料集中都要快過其他檢測系統,並可以在速度與精確度上進行權衡。

YOLOv2採用Darknet-19作為特徵提取網路,增加了批量標準化(Batch Normalization)的預處理,並使用224×224和448×448兩階段訓練ImageNet,得到預訓練模型後fine-tuning。

相比於YOLOv1是利用FC層直接預測Bounding Box的座標,YOLOv2借鑑了FSR-CNN的思想,引入Anchor機制,利用K-Means聚類的方式在訓練集中聚類計算出更好的Anchor模板,在卷積層使用Anchor Boxes操作,增加Region Proposal的預測,同時採用較強約束的定位方法,大大提高演算法召回率。同時結合影象細粒度特徵,將淺層特徵與深層特徵相連,有助於對小尺寸目標的檢測。  

下圖所示是YOLOv2採取的各項改進帶了的檢測效能上的提升:

圖1-1  YOLOv2中不同改進點帶來的演算法效能提升

YOLO9000 的主要檢測網路也是YOLO v2,同時使用WordTree來混合來自不同的資源的訓練資料,並使用聯合優化技術同時在ImageNet和COCO資料集上進行訓練,目的是利用數量較大的分類資料集來幫助訓練檢測模型,因此,YOLO 9000的網路結構允許實時地檢測超過9000種物體分類,進一步縮小了檢測資料集與分類資料集之間的大小代溝。

下面將具體分析YOLOv2的各個創新點。

二、演算法創新點:

1、批量標準化(Batch Nomalization)(使mAP提升2%):

(1)BN概述:

對資料進行預處理(統一格式、均衡化、去噪等)能夠大大提高訓練速度,提升訓練效果。BN正是基於這個假設的實踐,對每一層輸入的資料進行加工。

BN是2015年Google研究員在論文《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》一文中提出的,同時也將BN應用到了2014年的GoogLeNet上,也就是Inception-v2。

2-1  BN 效果示意圖

BN層簡單講就是對網路的每一層的輸入都做了歸一化,這樣網路就不需要每層都去學資料的分佈,收斂會更快。YOLOv1演算法(採用的是GoogleNet網路提取特徵)是沒有BN層的,而在YOLOv2中作者為每個卷積層都添加了BN層。

使用BN對網路進行優化,讓網路提高了收斂性,同時還消除了對其他形式的正則化(regularization)的依賴,因此使用BN後可以從模型中去掉Dropout,而不會產生過擬合。

(2)BN優點:

1神經網路每層輸入的分佈總是發生變化,加入BN,通過標準化上層輸出,均衡輸入資料分佈,加快訓練速度,因此可以設定較大的學習率(Learning Rate)和衰減(Decay);

(2)通過標準化輸入,降低啟用函式(Activation Function)在特定輸入區間達到飽和狀態的概率,避免梯度彌散(Gradient Vanishing)問題;

(3)輸入標準化對應樣本正則化,BN在一定程度上可以替代 Dropout解決過擬合問題。

(3)BN演算法:

在卷積或池化之後,啟用函式之前,對每個資料輸出進行標準化,方式如下圖所示:

 

圖2-2  BN 的計算步驟

公式很簡單,前三行是 Batch內資料歸一化(假設一個Batch中有每個資料),同一Batch內資料近似代表了整體訓練資料。第四行引入了附加引數 γ 和 β,此二者的取值演算法可以參考BN論文,在此不再贅述。

2高解析度模型(High Resolution Classifier)(使mAP提升4%):

fine-tuning:用已經訓練好的模型,加上自己的資料集,來訓練新的模型。即使用別人的模型的前幾層,來提取淺層特徵,而非完全重新訓練模型,從而提高效率。一般新訓練模型準確率都會從很低的值開始慢慢上升,但是fine-tuning能夠讓我們在比較少的迭代次數之後得到一個比較好的效果。

YOLO模型分為兩部分,分類(Classification)模型和檢測(Detection)模型,前者使用在ImageNet上預訓練好的模型,後者在檢測資料集上fine-tuning。

YOLOv1在預訓練時採用的是224*224的輸入(在ImageNet資料集上進行),然後在檢測的時候採用448*448的輸入,這會導致從分類模型切換到檢測模型的時候,模型還要適應影象解析度的改變。

YOLOv2則將預訓練分成兩步:先用224*224的輸入在ImageNet資料集訓練分類網路,大概160個epoch(將所有訓練資料迴圈跑160次)後將輸入調整到448*448,再訓練10個epoch(這兩步都是在ImageNet資料集上操作)。然後利用預訓練得到的模型在檢測資料集上fine-tuning。這樣訓練得到的模型,在檢測時用448*448的影象作為輸入可以順利檢測。

3、引入AnchorConvolutional with Anchor BoxesmAP下降0.2%recall提升7%):

YOLOv1將輸入影象分成7*7的網格,每個網格預測2個Bounding Box,因此一共有98個Box,同時YOLOv1包含有全連線層,從而能直接預測Bounding Boxes的座標值,但也導致丟失較多的空間資訊,定位不準。

YOLOv2首先將YOLOv1網路的FC層和最後一個Pooling層去掉,使得最後的卷積層可以有更高解析度的特徵,然後縮減網路,用416*416大小的輸入代替原來的448*448,使得網路輸出的特徵圖有奇數大小的寬和高,進而使得每個特徵圖在劃分單元格(Cell)的時候只有一箇中心單元格(Center Cell)。

為什麼希望只有一箇中心單元格呢?由於圖片中的物體都傾向於出現在圖片的中心位置,特別是比較大的物體,所以有一個單元格單獨位於物體中心的位置用於預測這些物體。

2-3  13*13 特徵圖示意圖  

YOLOv2通過引入Anchor Boxes,通過預測Anchor Box的偏移值與置信度,而不是直接預測座標值。YOLOv2的卷積層採用32這個值來下采樣圖片,所以通過選擇416*416用作輸入尺寸最終能輸出一個13*13的特徵圖。若採用FSRCNN中的方式,每個Cell可預測出9個Anchor Box,共13*13*9=1521個(YOLOv2確定Anchor Boxes的方法見是維度聚類,每個Cell選擇5個Anchor Box)。

在FSRCNN中,以一個51*39大小的特徵圖為例,其可以看做一個尺度為51*39的影象,對於該影象的每一個位置,考慮9個可能的候選視窗:3種面積3種比例。這些候選視窗稱為Anchor Boxes。圖2-4示出的是51*39個Anchor Box中心,以及9種Anchor Box示例。

圖2-4  FSRCNN中 Anchor Boxes 示意圖

 YOLOv1和YOLOv2特徵圖資料結構:

(1)YOLOv1: S*S* (B*5 + C) => 7*7(2*5+20)

其中B對應Box數量,5對應邊界框的定位資訊(w,y,w,h)和邊界框置信度(Confidience)。解析度是7*7,每個Cell預測2個Box,這2個Box共用1套條件類別概率(1*20)。

(2)YOLOv2: S*S*K* (5 + C) => 13*13*9(5+20)

解析度提升至13*13,對小目標適應性更好,借鑑了FSRCNN的思想,每個Cell對應K個Anchor box(YOLOv2中K=5),每個Anchor box對應1組條件類別概率(1*20)。

 

2-5   YOLOv1 YOLOv2 特徵圖資料結構對比

4、維度聚類(Dimension Clusters(與第5點結合使mAP提升5%)

聚類:聚類是指事先沒有“標籤”而通過某種成團分析找出事物之間存在聚集性原因的過程。即在沒有劃分類別的情況下,根據資料相似度進行樣本分組。

在FSR-CNN中Anchor Box的大小和比例是按

2-6  聚類效果示意圖  

經驗設定的,然後網路會在訓練過程中調整Anchor Box的尺寸,最終得到準確的Anchor Boxes。若一開始就選擇了更好的、更有代表性的先驗Anchor Boxes,那麼網路就更容易學到準確的預測位置。

YOLOv2使用K-means聚類方法類訓練Bounding Boxes,可以自動找到更好的寬高維度的值用於一開始的初始化。傳統的K-means聚類方法使用的是歐氏距離函式,意味著較大的Anchor Boxes會比較小的Anchor Boxes產生更多的錯誤,聚類結果可能會偏離。由於聚類目的是確定更精準的初始Anchor Box引數,即提高IOU值,這應與Box大小無關,因此YOLOv2採用IOU值為評判標準,即K-means 採用的距離函式(度量標準) 為:

式(2-1)

如圖2-7,左邊是聚類的簇個數和IOU的關係,兩條曲線分別代表兩個不同的資料集。分析聚類結果並權衡模型複雜度與IOU值後,YOLOv2選擇K=5,即選擇了5種大小的Box 維度來進行定位預測。

其中紫色和灰色也是分別表示兩個不同的資料集,可以看出其基本形狀是類似的。更重要的是,可以看出聚類的結果和手動設定的Anchor Box位置和大小差別顯著——結果中扁長的框較少,而瘦高的框更多(更符合行人的特徵)。

2-7  YOLOv2 聚類效果

 

YOLOv2採用的5種Anchor(Cluster IOU)的Avg IOU是61,而採用9種Anchor Boxes的Faster RCNN的Avg IOU是60.9,也就是說本文僅選取5種box就能達到Faster RCNN的9中box的效果。選擇值為9的時候,AVG IOU更有顯著提高。說明K-means方法的生成的boxes更具有代表性。

2-1 聚類與非聚類效果比對

5、直接位置預測(Direct location prediction)(與第4點結合使mAP提升5%

直接對Bounding Boxes求迴歸會導致模型不穩定,其中心點可能會出現在影象任何位置,有可能導致迴歸過程震盪,甚至無法收斂,尤其是在最開始的幾次迭代的時候。大多數不穩定因素產生自預測Bounding Box的中心座標(x,y)位置的時候。

YOLOv2的網路在特徵圖(13*13)的每一個單元格中預測出5個Bounding Boxes(對應5個Anchor Boxes),每個Bounding Box預測出5個值(tx,ty,tw,th,t0),其中前4個是座標偏移值,t0是置信度結果(類似YOLOv1中的邊界框置信度Confidence)。YOLOv2借鑑瞭如下的預測方式,即當Anchor Box的中心座標和寬高分別是(xa,ya)和(wa,wh)時,Bounding Box座標的預測偏移值(tx,ty,tw,th)與其座標寬高(x,y,w,h)的關係如下:                         

式(2-2)

基於這種思想,YOLOv2在預測Bounding Box的位置引數時採用瞭如下強約束方法:

2-8  YOLOv2 預測 Bounding Box 引數

圖中,黑色虛線框是Anchor Box,藍色矩形框就是預測的Bounding Box結果,預測出的Bounding Box的座標和寬高為(bx,by)和(bw,bh),計算方式如圖2-8中所示,其中:對每個Bounding Box預測出5個值(tx,ty,tw,th,t0),Cell與影象左上角的橫縱座標距離為(cx,cy),σ定義為sigmoid啟用函式(將函式值約束到[0,1]),該Cell對應的Anchor Box對應的寬高為(pw,ph)。

簡而言之,(bx,by)就是(cx,cy)這個Cell附近的Anchor Box針對預測值(tx,ty)得到的Bounding Box的座標預測結果,同時可以發現這種方式對於較遠距離的Bounding Box預測值(tx,ty)能夠得到很大的限制。

6、細粒度特徵(Fine-Grained Features)(特徵融合)(使mAP提升1%

YOLOv2通過新增一個轉移層(Passthrough Layer:Route + Reorg),把高解析度的淺層特徵連線到低解析度的深層特徵(把特徵堆積在不同Channel中)而後進行融合和檢測。具體操作是先獲取前層的26*26的特徵圖,將其同最後輸出的13*13的特徵圖進行連線,而後輸入檢測器進行檢測(檢測器的FC層起到了全域性特徵融合的作用),以此來提高對小目標的檢測能力。    

2-9  YOLOv2 融合淺層和深層資訊

7、多尺度訓練(Muinti-Scale Training)(使mAP提升1%

為了適應不同尺度下的檢測任務,YOLOv2在訓練網路時,其在檢測資料集上fine-tuning時候採用的輸入影象的size是動態變化的。具體來講,每訓練10個Batch,網路就會隨機選擇另一種size的輸入影象。因為YOLOv2用到了引數是32的下采樣,因此也採用32的倍數作為輸入的size,即採用{320,352,…,608}的輸入尺寸(網路會自動改變尺寸,並繼續訓練的過程)。

2-10  YOLOv2 VOC 2007 上的準確性與速度

這一策略讓網路在不同的輸入尺寸上都能達到較好的預測效果,使同一網路能在不同解析度上進行檢測。輸入圖片較大時,檢測速度較慢,輸入圖片較小時,檢測速度較快,總體上提高了準確率,因此多尺度訓練算是在準確率和速度上達到一個平衡。

2-2  YOLOv2 VOC 2007 上的效能對比

 

表2-2反映的是在檢測時,不同大小的輸入圖片情況下的YOLOv2和其他目標檢測演算法的對比。可以看出通過多尺度訓練的檢測模型,在測試的時候,輸入影象在尺寸變化範圍較大的情況下也能取得mAP和FPS的平衡。

三、網路訓練:

1、訓練分類網路(預訓練):

YOLOv1採用的訓練網路是GoogleNet,YOLOv2採用了新的分類網路Darknet-19作為基礎網路,它使用了較多的3 * 3卷積核,並把1 * 1的卷積核置於3 * 3的卷積核之間,用來壓縮特徵,同時在每一次池化操作後把通道(Channels)數翻倍(借鑑VGG網路)。

YOLOv1採用的GooleNet包含24個卷積層和2個全連線層,而Darknet-19包含19個卷積層和5個最大池化層(Max Pooling Layers),後面新增Average Pooling層(代替v1中FC層),而Softmax分類器作為啟用被用在網路最後一層,用來進行分類和歸一化。

在ImageNet資料集上進行預訓練,主要分兩步(採用隨機梯度下降法):

1、輸入影象大小是224*224,初始學習率(Learning Rate)為0.1,訓練160個epoch,權值衰減(Weight Decay)為0.0005,動量(Momentum)為0.9,同時在訓練時採用標準的資料增強(Data Augmentation)方式如隨機裁剪、旋轉以及色度、亮度的調整。

2、fine-tuning:第1步結束後,改用448*448輸入(高解析度模型),學習率改為0.001,訓練10個epoch,其他引數不變。結果表明:fine-tuning後的top-1準確率為76.5%,top-5準確率為93.3%,若按照原來的訓練方式,Darknet-19的top-1準確率是72.9%,top-5準確率為91.2%。可以看出,兩步分別從網路結構和訓練方式方面入手提高了網路分類準確率。

2、訓練檢測網路(fine-tuning):

    預訓練之後,開始基於檢測的資料集再進行fine-tuning。    

首先,先把最後一個卷積層去掉,然後新增3個3*3的卷積層,每個卷積層有1024個卷積核,並且後面都連線一個1*1的卷積層,卷積核個數(特徵維度)根據需要檢測的類數量決定。比如對VOC資料,每個Cell需要預測5個Boungding Box,每個Bounding Box有4個座標   

2-11  Darknet-19 網路結構   

 值、1個置信度值和20個條件類別概率值,所以每個單元格對應125個數據,此時卷積核個數應該取125。)

然後,將最後一個3*3*512的卷積層和倒數第2個卷積層相連(提取細粒度特徵),最後在檢測資料集上fine-tuning預訓練模型160個epoch,學習率採用0.001,並且在第60和90個epoch的時候將學習率除以10,權值衰減、動量和資料增強方法與預訓練相同。

 

四、YOLO9000的實現(資料及融合及聯合訓練):

YOLO9000通過結合分類和檢測資料集,使得訓練得到的模型可以檢測約9000類物體,利用帶標註的分類資料集量比較大的特點,解決了帶標註的檢測資料集量比較少的問題。具體方法是:一方面採用WordTree融合資料集,另一方面聯合訓練分類資料集和檢測資料集。

1、用WordTree融合資料集:

分類資料集和檢測資料集存在較大差別:檢測資料集只有粗粒度的標記資訊,如“貓”、“狗”,而分類資料集的標籤資訊則更細粒度,更豐富。比如“狗”就包括“哈士奇”、“金毛狗”等等。所以如果想同時在檢測資料集與分類資料集上進行訓練,那麼就要用一種一致性的方法融合這些標籤資訊。

用於分類的方法,常用Softmax(比如v2),Softmax意味著分類的類別之間要互相獨立的,而ImageNet和COCO這兩種資料集之間的分類資訊不相互獨立(ImageNet對應分類有9000種,而COCO僅提供80種目標檢測),所以使用一種多標籤模型來混合資料集,即假定一張圖片可以有多個標籤,並且不要求標籤間獨立,而後進行Softmax分類。

由於ImageNet的類別是從WordNet選取的,作者採用以下策略重建了一個樹形結構(稱為WordTree):

(1)遍歷ImageNet的標籤,然後在WordNet中尋找該標籤到根節點(所有的根節點為實體物件)的路徑;

(2)如果路徑只有一條,將該路徑直接加入到WordTree結構中;

(3)否則,從可選路徑中選擇一條最短路徑,加入到WordTree結構中。

WordTree的作用就在於將兩種資料集按照層級進行結合。

如此,在WordTree的某個節點上就可以計算該節點的一些條件概率值,比如在terrier這個節點,可以得到如下條件概率值:

 

terrier節點條件概率值

進而,如果要預測此節點的概率(即圖片中目標是Norfolk terrier的概率),可以根據WordTree將該節點到根節點的條件概率依次相乘得到,如下式:

圖片中目標是Norfolk terrier的概率

其中:        

YOLO9000在WordTree1k(用有1000類別的ImageNet1k建立)上訓練了Darknet-19模型。為了建立WordTree1k作者添加了很多中間節點(中間詞彙),把標籤由1000擴充套件到1369。

訓練過程中GroundTruth標籤要順著向根節點的路徑傳播:為了計算條件概率,模型預測了一個包含1369個元素的向量,而且基於所有“同義詞集”計算Softmax,其中“同義詞集”是同一概念下的所屬詞。

現在一張圖片是多標記的,標記之間不需要相互獨立。在訓練過程中,如果有一個圖片的標籤是“Norfolk terrier”,那麼這個圖片還

  2-12  ImageNet1k WordTree1k 資料

會獲得“狗”以及“哺乳動物”等標籤。

如圖2-12所示,之前的ImageNet分類是使用一個大Softmax進行分類,而現在WordTree只需要對同一概念下的同義詞進行Softmax分類。然後作者分別兩個資料集上用相同訓練方法訓練Darknet-19模型,最後在ImageNet資料集上的top-1準確率為72.9%,top-5準確率為91.2%;在WordTree資料集上的top-1準確率為71.9%,top-5準確率為90.4%。

這種方法的好處是有“退而求其次”的餘地:在對未知或者新的物體進行分類時,效能損失更低,比如看到一個狗的照片,但不知道是哪種種類的狗,那麼就預測其為“狗”。

以上是構造WordTree的原理,圖2-11是融合COCO資料集和ImageNet資料集以及生成它們的WordTree的示意圖(用顏色區分了COCO資料集和ImageNet資料集的標籤節點), 混合後的資料集對應的WordTree有9418個類。另一方面,由於ImageNet資料集太大,YOLO9000為了平衡兩個資料集之間的資料量,通過過取樣(Oversampling)COCO資料集中的資料,使COCO資料集與ImageNet資料集之間的資料量比例達到1:4。

2-13  COCO ImageNet WordTree 示意圖

 

對YOLO9000進行評估,發現其mAP比DPM高,而且YOLO有更多先進的特徵,YOLO9000是用部分監督的方式在不同訓練集上進行訓練,同時還能檢測9000個物體類別,並保證實時執行。雖然YOLO9000對動物的識別效能很好,但是對衣服或者裝備的識別效能不是很好(這跟資料集的資料組成有關)。

2、聯合訓練分類資料集與檢測資料集:

YOLO9000的網路結構和YOLOv2類似,區別是每個單元格只採用3個Anchor Boxes。

YOLO9000提出了一種在分類資料集和檢測資料集上聯合訓練的機制,即使用檢測資料集(COCO)的圖片去學習檢測相關的資訊即查詢物件(例如預測邊界框座標、邊界框是否包含目標及目標屬於各個類別的概率),使用僅有類別標籤的分類資料集(ImageNet)中的圖片去擴充套件檢測到的物件的可識別種類。

具體方法是:當網路遇到一個來自檢測資料集的圖片與標記資訊,就把這些資料用完整的損失函式(v2和9000均沿用了v1網路的損失函式)反向傳播,而當網路遇到一個來自分類資料集的圖片和分類標記資訊,只用代表分類誤差部分的損失函式反向傳播這個圖片。

五、效能評估:

YOLO v2 在大尺寸圖片上能夠實現高精度,在小尺寸圖片上執行更快,可以說在速度和精度上達到了平衡,具體效能表現見表2-3和表2-4。

2-3  YOLOv2 VOC2012 資料集上的效能對比

 

2-4  YOLOv2 COCO 資料集上的效能對比

 

六、網路結構(日誌資訊):

v2網路訓練時列印的日誌資訊