1. 程式人生 > 其它 >YOLOv3 學習筆記

YOLOv3 學習筆記

 

圖中最左側一列的1、2、8、8、4數字表示有多少個重複的殘差元件,每個殘差元件有兩個卷積層和一個快捷鏈路;
不斷進行下采樣的過程中,輸入圖片的高和寬不斷被壓縮,通道數不斷被擴張;
->從而可以獲得一堆的特徵層,可以表示注入進來的圖片的特徵:
52,52,256 52×52×75 ->52×52×3×25(20+1+4)
26,26,512 會和13×13×1024特徵層上取樣後的結果進行堆疊5次卷積 26×26×75 26×26×3×25(20+1+4)
13,13,1024進行5次卷積 13,13,75->13,13,3(3個先驗框),25->13,13,3,20+1+4(屬於概率的概率+是否有物體置信度分數+中心點座標和長寬)

IoU為0不會預測類別;
YOLOv3是每個BBOX預測自己是屬於哪個類別,(S * S * B )* ( 4 + 1 + C );
Scale1預測的是更大的框,Scale3預測的是更小的框,預測的目標不一樣,克服了單層輸出的缺陷;
COCO資料集是80個類別;
YOLOv3有九種尺度的先驗框,每種下采樣的尺度設定三種先驗框,總共會聚類出九種尺寸的先驗框。在COCO資料集這9個先驗框是:(10x13),(16x30),(33x23),(30x61),(62x45),(59x119),(116x90),(156x198),(373x326)。分配上,在最小的1313特徵圖上(有最大的感受野)應用較大的先驗框(116x90),(156x198),(373x326),適合檢測較大的物件。中等的2626特徵圖上(中等感受野)應用中等的先驗框(30x61),(62x45),(59x119),適合檢測中等大小的物件。較大的52*52特徵圖上(較小的感受野)應用較小的先驗框(10x13),(16x30),(33x23),適合檢測較小的物件;

預測物件類別時不再使用softmax,改成使用Logistic的輸出進行預測,這樣能夠支援多標籤物件(比如一個人有Women和Person兩個標籤);
YOLO3共進行了多少個預測?對於一個416×416的輸入影象,在每個尺度的特徵圖的每個網格設定3個先驗框,總共有 13×13×3 + 26×26×3 + 52×52×3 = 10647 個預測。每一個預測是一個(4+1+80)=85維向量,這個85維向量包含邊框座標(4個數值),邊框置信度(1個數值),物件類別的概率(對於COCO資料集,有80種物件)。對比一下,YOLO2採用13×13×5 = 845個預測,YOLO3的嘗試預測邊框數量增加了10多倍,而且是在不同解析度上進行,所以mAP以及對小物體的檢測效果有一定的提升。

YOLOv3借鑑了殘差網路結構,形成層次更深的網路層次,以及多尺度檢測,提升了mAP及小物體檢測效果。如果採用COCO mAP50作為評估指標,YOLOv3的表現非常好,在精確度相當的情況下,YOLOv3的速度是其他模型的3、4倍。但是,如果要求更加精準的預測框,YOLOv3在精確率上確實表現一般;

YOLOv3做了嘗試的東西:
(1)Anchor Boxes座標的偏移預測:我們嘗試了常規的Anchor box預測方法,比如利用線性啟用將座標x、y的偏移程度預測為邊界框寬度或高度的倍數。但我們發現這種做法降低了模型的穩定性,且效果不佳;
(2)用線性方法預測x,y,而不是使用邏輯方法。我們嘗試使用線性啟用來直接預測x,y的offset,而不是邏輯啟用。這降低了mAP成績;
(3)focal loss:我們嘗試使用focal loss,但它使我們的mAP降低了2點。 對於focal loss函式試圖解決的問題,YOLOv3從理論上來說已經很強大了,因為它具有單獨的物件預測和條件類別預測。因此,對於大多數例子來說,類別預測沒有損失?或者其他的東西?我們並不完全確定;
(4)雙IOU閾值和真值分配。在訓練期間,Faster R-CNN用了兩個IOU閾值,如果預測的邊框與.7的ground truth重合,那它是個正面的結果;如果在[.3—.7]之間,則忽略;如果和.3的ground truth重合,那它就是個負面的結果。我們嘗試了這種思路,但效果並不好。我們對現在的更新狀況很滿意,它看起來已經是最佳狀態。有些技術可能會產生更好的結果,但我們還需要對它們做一些調整來穩定訓練;

YoloV3所使用的主幹特徵提取網路為Darknet53,它具有兩個重要特點:
1、Darknet53具有一個重要特點是使用了殘差網路Residual,Darknet53中的殘差卷積就是首先進行一次卷積核大小為3X3、步長為2的卷積,該卷積會壓縮輸入進來的特徵層的寬和高,此時我們可以獲得一個特徵層,我們將該特徵層命名為layer。之後我們再對該特徵層進行一次1X1的卷積和一次3X3的卷積,並把這個結果加上layer,此時我們便構成了殘差結構。通過不斷的1X1卷積和3X3卷積以及殘差邊的疊加,我們便大幅度的加深了網路。殘差網路的特點是容易優化,並且能夠通過增加相當的深度來提高準確率。其內部的殘差塊使用了跳躍連線,緩解了在深度神經網路中增加深度帶來的梯度消失問題。

2、Darknet53的每一個卷積部分使用了特有的DarknetConv2D結構,每一次卷積的時候進行l2正則化,完成卷積後進行BatchNormalization標準化與LeakyReLU。普通的ReLU是將所有的負值都設為零,Leaky ReLU則是給所有負值賦予一個非零斜率。