『計算機視覺』YOLO系列總結
網絡細節資料很多,不做贅述,主要總結演化思路和解決問題。
一、YOLO
1、網絡簡介
YOLO網絡結構由24個卷積層與2個全連接層構成,網絡入口為448x448(v2為416x416),圖片進入網絡先經過resize,輸出格式為:
其中,S為劃分網格數,B為每個網格負責目標個數,C為類別個數。B表示每個小格對應B組可能的框,5表示每個框的四個坐標和一個置信度,C表示類別,同時也說明B個框只能隸屬於同一個類別。
2、損失函數
損失函數有四部分組成,
上文中的紅圈符號表示是否開關,比如第一個符號表示i號格子j號坐標框中如果含有obj則為1,否則為0
損失函數第一部分的寬高計算加根號,這是因為:一個同樣將一個100x100的目標與一個10x10的目標都預測大了10個像素,預測框為110 x 110與20 x 20。顯然第一種情況我們還可以失道接受,但第二種情況相當於把邊界框預測大了一倍,但如果不使用根號函數,那麽損失相同,都為200,如果使用根號則可以表示出兩者的差異。
Ci表示第i個框含有物體的置信度,類似於RCNN中的二分類部分思想,由於大部分框中沒有物體,為平衡損失函數,本部分的權重取小為0.5
中c為正確類別則值為1,否則為0
3、網絡不足
1) 對小物體及鄰近特征檢測效果差:當一個小格中出現多於兩個小物體或者一個小格中出現多個不同物體時效果欠佳。原因:B表示每個小格預測邊界框數,而YOLO默認同格子裏所有邊界框為同種類物體。
(2) 圖片進入網絡前會先進行resize為448 x 448,降低檢測速度(it takes about 10ms in 25ms),如果直接訓練對應尺寸會有加速空間。
(3) 基礎網絡計算量較大
二、YOLO_v2
v2沒有一個明確的主線創新,就是把各種奇技淫巧融入v1中,等到更好的網絡。
創新點簡述
- 關於BN作用,YOLOv2在加入BN層之後mAP上升2%
- yolov1也在Image-Net預訓練模型上進行fine-tune,但是預訓練時網絡入口為224 x 224,而fine-tune時為448 x 448,這會帶來預訓練網絡與實際訓練網絡識別圖像尺寸的不兼容。yolov2直接使用448 x 448的網絡入口進行預訓練,然後在檢測任務上進行訓練,效果得到3.7%的提升。
- yolov2為了提升小物體檢測效果,減少網絡中pooling層數目,使最終特征圖尺寸更大,如輸入為416 x 416,則輸出為13 x 13 x 125,其中13 x 13為最終特征圖,即原圖分格的個數,125為每個格子中的邊界框構成(5 x (classes + 5))。需要註意的是,特征圖尺寸取決於原圖尺寸,但特征圖尺寸必須為奇數
- 通過預測偏移量而不是坐標值能夠簡化問題,讓神經網絡學習起來更容易,及anchor的設置是有其優越性的,至於每個格子中設置多少個anchor(即k等於幾),作者使用了k-means算法離線對voc及coco數據集中目標的形狀及尺度進行了計算。發現當k = 5時並且選取固定5比例值的時,anchors形狀及尺度最接近voc與coco中目標的形狀。(引入anchors和采用k_means確定anchors的個數、形狀是兩個創新)
- 新的主幹網絡:模型的mAP值沒有顯著提升,但計算量減少了:
- 對細粒度特征做了加強,個人理解就是resnet的跳層
- YOLOv2中使用的Darknet-19網絡結構中只有卷積層和池化層,所以其對輸入圖片的大小沒有限制。YOLOv2采用多尺度輸入的方式訓練,在訓練過程中每隔10個batches,重新隨機選擇輸入圖片的尺寸,由於Darknet-19下采樣總步長為32,輸入圖片的尺寸一般選擇32的倍數{320,352,…,608}。采用Multi-Scale Training, 可以適應不同大小的圖片輸入,當采用低分辨率的圖片輸入時,mAP值略有下降,但速度更快,當采用高分辨率的圖片輸入時,能得到較高mAP值,但速度有所下降。
- 本文對anchors的回歸提出了更好的算法,這部分比較麻煩,貼出一篇講解很透徹的文章,其思想就是Fast RCNN的anchor回歸值沒有限制,可能出現anchor檢測出很遠的目標box的情況,效率比較低,作者覺得應該是每一個anchor只負責檢測周圍正負一個單位以內的目標box。
除此之外,YOLO_v2的實例YOLO9000在超多類分類(9000類)也做出了實踐性質的創新,感興趣的可以看一看。
二、YOLO_v3
延續了v2的思路,繼續修修補補
S
『計算機視覺』YOLO系列總結