目錄
- YOLO V2簡介
- V2主要改進方面
- 論文細節介紹
arxiv: https://arxiv.org/abs/1612.08242
code: http://pjreddie.com/yolo9000/
github(PyTorch): https://github.com/longcw/yolo2-pytorch
github(Tensorflow): https://github.com/hizhangp/yolo_tensorflow
github(Windows): https://github.com/AlexeyAB/darknet
一、YOLO V2簡介
經過Joseph Redmon等的改進,YOLOv2和YOLO9000算法在2017年CVPR上被提出,並獲得較佳論文提名,重點解決召回率和定位精度方面的誤差。采用Darknet-19作為特征提取網絡,增加了批量歸一化(Batch Normalization)的預處理,並使用224×224和448×448兩階段訓練ImageNet預訓練模型后fine-tuning。
相比於原來的YOLO是利用全連接層直接預測bounding box的坐標,YOLOv2借鑒了Faster R-CNN的思想,引入anchor機制,利用K-Means聚類的方式在訓練集中聚類計算出更好的anchor模板,在卷積層使用anchorboxes操作,增加候選框的預測,同時采用較強約束的定位方法,大大提高算法召回率。結合圖像細粒度特征,將淺層特征與深層特征相連,有助於對小尺寸目標的檢測。
YOLOv1對於bounding box的定位不是很好,在精度上比同類網絡還有一定的差距,所以YOLOv2對於速度和精度做了很大的優化,並且吸收了同類網絡的優點,一步步做出嘗試。
更快:YOLO 使用的是 GoogLeNet 架構,比 VGG-16 快,YOLO 完成一次前向過程只用 85.2 億次運算,而 VGG-16 要 306.9 億次,但是 YOLO 精度稍低於 VGG-16。
二、V2主要改進方面
2.1 Darknet-19網絡的使用
- 使用了BN,使得訓練更加穩定;
- 增加卷積層,去掉最后的全連接層FC,因為全連接層會破壞空間的相對位置信息,而且增加復雜度。
2.2 pre-defined anchors
YOLO1,xywh的位置不固定,取值范圍為是±無窮大。
YOLO2使用anchors(標桿)的思維,給你一個大致范圍,比如給你幾個特定的標桿類型:比如使用5個標桿,根據IOU計算進行選取標桿。比如下圖使用5個標桿(藍色部分)
2.3 bias的應用
為避免Anchor Box回歸導致模型不穩定的問題,作者在預測位置參數時采用了強約束方法:
- 對應 Cell 距離左上角的邊距為(Cx,Cy),σ定義為sigmoid激活函數,將函數值約束到[0,1],用來預測相對於該Cell 中心的偏移(不會偏離cell);
- 預定Anchor(文中描述為bounding box prior)對應的寬高為(Pw,Ph),預測 Location 是相對於Anchor的寬高 乘以系數得到;
現在,神經網絡在特征圖(13 *13 )的每個cell上預測5個bounding boxes(聚類得出的值),同時每一個bounding box預測5個坐值,分別為 tx,ty,tw,th,to 其中前四個是坐標,to是置信度。如果這個cell距離圖像左上角的邊距為 (cx,cy)以及該cell對應box(bounding box prior)的長和寬分別為 (pw,ph) ,那么預測值可以表示為上圖所示,這樣對於較遠距離的預測就能夠得到很大的限制。
三、論文細節介紹
2.1 創新點-更准
1. Batch Normalization
Batch Normalization是2015年Google研究員在論文《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》一文中提出的,同時也將BN應用到了2014年的GoogLeNet上,也就是Inception-v2。
對數據進行預處理(統一格式、均衡化、去噪等)能夠大大提高訓練速度,提升訓練效果。批量規范化 正是基於這個假設的實踐,對每一層輸入的數據進行加工。
2. High Resolution Classifier
YOLO 從 224*224 增加到了 448*448,這就意味着網絡需要適應新的輸入分辨率。為了適應新的分辨率,YOLO v2 的分類網絡以 448*448 的分辨率先在 ImageNet上進行微調,微調 10 個 epochs,讓網絡有時間調整濾波器(filters),好讓其能更好的運行在新分辨率上,還需要調優用於檢測的 Resulting Network。最終通過使用高分辨率,mAP 提升了 4%。
3. Convolutional With Anchor Boxes
之前的YOLO利用全連接層的數據完成邊框的預測,導致丟失較多的空間信息,定位不准。作者在這一版本中借鑒了Faster R-CNN中的anchor思想,回顧一下,anchor是RNP網絡中的一個關鍵步驟,說的是在卷積特征圖上進行滑窗操作,每一個中心可以預測K種不同大小的建議框。
YOLO V1包含有全連接層,從而能直接預測 Bounding Boxes 的坐標值。 Faster R-CNN 的方法只用卷積層與 Region Proposal Network 來預測 Anchor Box 偏移值與置信度,而不是直接預測坐標值。作者發現通過預測偏移量而不是坐標值能夠簡化問題,讓神經網絡學習起來更容易。YOLOv2 去掉了全連接層,使用 Anchor Boxes 來預測 Bounding Boxes。同時去掉了網絡中一個池化層,這讓卷積層的輸出能有更高的分辨率。收縮網絡讓其運行在 416*416 而不是 448*448。由於圖片中的物體都傾向於出現在圖片的中心位置,特別是那種比較大的物體,所以有一個單獨位於物體中心的位置用於預測這些物體。YOLO 的卷積層采用 32 這個值來下采樣圖片,所以通過選擇 416*416 用作輸入尺寸最終能輸出一個 13*13 的特征圖。 使用 Anchor Box 會讓精確度稍微下降,但用了它能讓 YOLO 能預測出大於一千個框,同時 recall 達到88%,mAP 達到 69.2%。
YOLO v1: S*S* (B*5 + C) => 7*7(2*5+20)
其中B對應Box數量,5對應 Rect 定位+置信度。每個Grid只能預測對應兩個Box,這兩個Box共用一個分類結果(20 classes),這是很不合理的臨時方案。
YOLO v2: S*S*K* (5 + C) => 13*13*9(5+20)
4. Dimension Clusters——K-means(IOU)
之前 Anchor Box 的尺寸是手動選擇的,所以尺寸還有優化的余地。 為了優化,在訓練集的 Bounding Boxes 上跑一下 k-means聚類,來找到一個比較好的值。
如果我們用標准的歐式距離的 k-means,尺寸大的框比小框產生更多的錯誤。因為我們的目的是提高 IOU 分數,這依賴於 Box 的大小,所以距離度量的使用:
作者也做了實驗來對比兩種策略的優劣,使用聚類方法,僅僅5種boxes的召回率就和Faster R-CNN的9種相當。說明K-means方法的引入使得生成的boxes更具有代表性,為后面的檢測任務提供了便利。
5.Direct location prediction
直接Anchor Box回歸導致模型不穩定,對應公式也可以參考 Faster-RCNN論文,該公式沒有任何約束,中心點可能會出現在圖像任何位置,這就有可能導致回歸過程震盪,甚至無法收斂:
針對這個問題,作者在預測位置參數時采用了強約束方法:
- 對應 Cell 距離左上角的邊距為(Cx,Cy),σ定義為sigmoid激活函數,將函數值約束到[0,1],用來預測相對於該Cell 中心的偏移(不會偏離cell);
- 預定Anchor(文中描述為bounding box prior)對應的寬高為(Pw,Ph),預測 Location 是相對於Anchor的寬高 乘以系數得到;
現在,神經網絡在特征圖(13 *13 )的每個cell上預測5個bounding boxes(聚類得出的值),同時每一個bounding box預測5個坐值,分別為 tx,ty,tw,th,to 其中前四個是坐標,to是置信度。如果這個cell距離圖像左上角的邊距為 (cx,cy)以及該cell對應box(bounding box prior)的長和寬分別為 (pw,ph) ,那么預測值可以表示為上圖所示,這樣對於較遠距離的預測就能夠得到很大的限制。
6. Fine-Grained Features
YOLO 修改后的特征圖大小為 13*13,這個尺寸對檢測圖片中尺寸大物體來說足夠了,同時使用這種細粒度的特征對定位小物體的位置可能也有好處。Faster-RCNN、SSD 都使用不同尺寸的特征圖來取得不同范圍的分辨率,而 YOLO 采取了不同的方法,YOLO 加上了一個 Passthrough Layer 來取得之前的某個 26*26 分辨率的層的特征。這個 Passthrough layer 能夠把高分辨率特征與低分辨率特征聯系在一起,聯系起來的方法是把相鄰的特征堆積在不同的 Channel 之中,這一方法類似與 Resnet 的 Identity Mapping,從而把 26*26*512 變成 13*13*2048。YOLO 中的檢測器位於擴展后(expanded )的特征圖的上方,所以他能取得細粒度的特征信息,這提升了 YOLO 1% 的性能。
7. Multi-Scale Training
作者希望 YOLOv2 能健壯地運行於不同尺寸的圖片之上,所以把這一想法用於訓練模型中。
區別於之前的補全圖片的尺寸的方法,YOLOv2 每迭代幾次都會改變網絡參數。每 10 個 Batch,網絡會隨機地選擇一個新的圖片尺寸,由於使用了下采樣參數是 32,所以不同的尺寸大小也選擇為 32 的倍數 {320,352…..608},最小 320*320,最大 608*608,網絡會自動改變尺寸,並繼續訓練的過程。
這一政策讓網絡在不同的輸入尺寸上都能達到一個很好的預測效果,同一網絡能在不同分辨率上進行檢測。當輸入圖片尺寸比較小的時候跑的比較快,輸入圖片尺寸比較大的時候精度高,所以你可以在 YOLOv2 的速度和精度上進行權衡。
2.2 創新點-更快
YOLO 使用的是 GoogLeNet 架構,比 VGG-16 快,YOLO 完成一次前向過程只用 85.2 億次運算,而 VGG-16 要 306.9 億次,但是 YOLO 精度稍低於 VGG-16。
New Network——Darknet-19
YOLOv2使用了一個新的分類網絡作為特征提取部分,參考了前人的先進經驗,比如類似於VGG,作者使用了較多的3 * 3卷積核,在每一次池化操作后把通道數翻倍。借鑒了network in network的思想,網絡使用了全局平均池化(global average pooling),把1 * 1的卷積核置於3 * 3的卷積核之間,用來壓縮特征。也用了batch normalization(前面介紹過)穩定模型訓練。
最終得出的基礎模型就是Darknet-19,如上圖,其包含19個卷積層、5個最大值池化層(maxpooling layers )。Darknet-19運算次數為55.8億次,imagenet圖片分類top-1准確率72.9%,top-5准確率91.2%。
Training for classication
在訓練時,把整個網絡在更大的448*448分辨率上Fine Turnning 10個 epoches,初始學習率設置為0.001,這種網絡達到達到76.5%top-1精確度,93.3%top-5精確度。
2.3 創新點-更強
交叉數據訓練
作者提出了一種在分類數據集和檢測數據集上聯合訓練的機制。使用檢測數據集的圖片去學習檢測相關的信息,例如bounding box 坐標預測,是否包含物體以及屬於各個物體的概率。使用僅有類別標簽的分類數據集圖片去擴展可以檢測的種類。
作者通過ImageNet訓練分類、COCO和VOC數據集來訓練檢測,這是一個很有價值的思路,可以讓我們在公網上達到比較優的效果。 通過將兩個數據集混合訓練,如果遇到來自分類集的圖片則只計算分類的Loss,遇到來自檢測集的圖片則計算完整的Loss。
但是ImageNet對應分類有9000種,而COCO則只提供80種目標檢測,作者使用multi-label模型,即假定一張圖片可以有多個label,並且不要求label間獨立。
通過作者Paper里的圖來說明,由於ImageNet的類別是從WordNet選取的,作者采用以下策略重建了一個樹形結構(稱為分層樹):
- 遍歷Imagenet的label,然后在WordNet中尋找該label到根節點(指向一個物理對象)的路徑;
- 如果路徑直有一條,那么就將該路徑直接加入到分層樹結構中;
- 否則,從剩余的路徑中選擇一條最短路徑,加入到分層樹。
這個分層樹我們稱之為 Word Tree,作用就在於將兩種數據集按照層級進行結合。
分類時的概率計算借用了決策樹思想,某個節點的概率值等於 該節點到根節點的所有條件概率之積。
最終結果是一顆 WordTree (視覺名詞組成的層次結構模型)。用WordTree執行分類時,預測每個節點的條件概率。例如: 在"terrier"節點會預測:
如果想求得特定節點的絕對概率,只需要沿着路徑做連續乘積。例如 如果想知道一張圖片是不是"Norfolk terrier "需要計算:
另外,為了驗證這種方法作者在WordTree(用1000類別的ImageNet創建)上訓練了Darknet-19模型。為了創建WordTree1k作者天添加了很多中間節點,把標簽由1000擴展到1369。訓練過程中ground truth標簽要順着向根節點的路徑傳播:例如 如果一張圖片被標記為"Norfolk terrier"它也被標記為"dog" 和"mammal"等。為了計算條件概率,模型預測了一個包含1369個元素的向量,而且基於所有"同義詞集"計算softmax,其中"同義詞集"是同一概念的下位詞。
softmax操作也同時應該采用分組操作,下圖上半部分為ImageNet對應的原生Softmax,下半部分對應基於Word Tree的Softmax:
通過上述方案構造WordTree,得到對應9418個分類,通過重采樣保證Imagenet和COCO的樣本數據比例為4:1。
2.4總結
通過對YOLOv1網絡結構和訓練方法的改進,提出了YOLOv2/YOLO9000實時目標檢測系統。YOLOv2在YOLOv1的基礎上進行了一系列的改進,在快速的同時達到state of the art。同時,YOLOv2可以適應不同的輸入尺寸,根據需要調整檢測准確率和檢測速度(值得參考)。作者綜合了ImageNet數據集和COCO數據集,采用聯合訓練的方式訓練,使該系統可以識別超過9000種物品。除此之外,作者提出的WordTree可以綜合多種數據集的方法可以應用於其它計算機數覺任務中。但是對於重疊的分類,YOLOv2依然無法給出很好的解決方案。
