前言
之前無論是傳統目標檢測,還是RCNN,亦或是SPP NET,Faste Rcnn,Faster Rcnn,都是二階段目標檢測方法,即分為“定位目標區域”與“檢測目標”兩步,而YOLO V1,V2,V3都是一階段的目標檢測。
從R-CNN到FasterR-CNN網絡的發展中,都是基於proposal+分類的方式來進行目標檢測的,檢測精度比較高,但是檢測速度不行,YOLO提供了一種更加直接的思路:
直接在輸出層回歸boundingbox的位置和boundingbox所屬類別的置信度,相比於R-CNN體系的目標檢測,YOLO將目標檢測從分類問題轉換為回歸問題。其主要特點是:
•速度快,能夠達到實時的要求,在TitanX的GPU上達到45fps;
•使用全圖Context信息,背景錯誤(把背景當做物體)比較少;
•泛化能力強;




其想做的事如此看來很清晰,先判斷是目標還是背景,若是目標,則再判斷是屬於這20個類別的哪個類(此VOC數據集是20個類別,別的數據集就是別的類別)
因為論文建議了我們一個grid cell最好是承載着兩個邊框,即bounding box,那么,這幅7*7個cell的圖就有98個邊框了,如下圖
每個邊框都是上面公式計算來的,我有寫的,即背景還是物體的概率*20個類哪個類別的概率,如下圖
然后呢 ,就是處理這98個框框,如下圖
這總共是20個類別,一行行的這么處理,直到20行處理完畢
然后對結果遍歷,如果置信度的評分大於0,那這個框就可以代表此物體,如果得分小於0,就不行,如下圖
來看一下損失函數吧,我把它分成了三類
總結一下,並分析一下優缺點:

YOLO V2
算法的增強正是有了對原來的基礎不斷改進才得來的,YOLO V2相對於V1主要有三方面變化。


下圖是聚類的不同標准下的平均IOU值
其沿用了Faster RCNN中Anchor box(錨點框)的思想,通過kmeans方法在VOC數據集(COCO數據集)上對檢測物體的寬高進行了聚類分析,得出了5個聚類中心,因此選取5個anchor的寬高: (聚類時衡量指標distance = 1-IOU(bbox, cluster))
COCO: (0.57273, 0.677385), (1.87446, 2.06253), (3.33843, 5.47434), (7.88282, 3.52778), (9.77052, 9.16828)
VOC: (1.3221, 1.73145), (3.19275, 4.00944), (5.05587, 8.09892), (9.47112, 4.84053), (11.2364, 10.0071)
這樣每個grid cell將對應5個不同寬高的anchor, 如下圖所示:(上面給出的寬高是相對於grid cell,對應的實際寬高還需要乘以32(2的5次方),因為這里給出的原圖大小是416*416大小的,經過卷積啊池化啊下采樣了5次后變成了13*13大小的)
關於預測的bbox的計算:(416*416-------13*13 為例),卷積池化等經歷了5次下采樣,縮小了2的5次方倍(看下面這三段話的時候,記得看此行往上數第9到12行字,相信你會明白的)
(1) 輸入圖片尺寸為416*416, 最后輸出結果為13*13*125,這里的125指5*(5 + 20),5表示5個anchor,25表示[x, y, w, h, confidence ] + 20 class ),即每一個anchor預測一組值。
(2) 對於每一anchor預測的25個值, x, y是相對於該grid cell左上角的偏移值,需要通過logistic函數將其處理到0-1之間。如13*13大小的grid,對於index為(6, 6)的cell,預測的x, y通過logistic計算為xoffset, yoffset, 則對應的實際x = 6 + xoffset, y = 6+yoffset, 由於0<xoffset<1, 0<yoffset<1, 預測的實際x, y總是在(6,6)的cell內。對於預測的w, h是相對於anchor的寬高,還需乘以anchor的(w, h), 就得到相應的寬高
(3) 由於上述尺度是在13*13下的,需要還原為實際的圖片對應大小,還需乘以縮放倍數32





yolo v3在保證實施率(fps>36)的情況下,盡量追求性能,下面是幾個主干網絡的對比
darknet為論文中使用的,效果不錯,resnet在top5的准確率上和darknet一致。但是實時性略差,畢竟它本質是用來分類的網絡,若用於目標檢測還需要修改修改
下圖是特征金字塔的結構與其他幾種結構的對比圖
下面是yolo v3的具體結構,其中特征金字塔部分參照上圖看,就能明白
來看一下損失函數吧,采用了類似YOLOv1的損失函數,其主要更改的地方是將v1中關於confidence和class類別概率部分的損失函數更改為logistic交叉熵損失函數(tf.nn.sigmoid_cross_entropy_with_logits)。
訓練操作類似YOLOv1和v2,主要特點如下:
•網絡結構darknet;
•輸入數據完整圖像,不進行hardnegativemining(難負樣本的挖掘,當然,我們自己實現代碼的時候可以做)或者其它操作;
•多尺度訓練multiscale;
•數據增強dataaugmentation;
•批歸一化batchnormalization;

致此完畢全部內容,我求求你們關注我好不好,很不容易的,一個人打兩份工,晚上還要給別人織毛衣......