❝上期咱們一塊兒學了
❞YOLO-V2
的算法結構以及跟YOLO-V1
比起來有哪些優缺點,以下:
目標檢測算法YOLO-V2詳解
今天咱們看下在YOLO-V2
版本上改進的YOLO-V3
算法,到底作了哪些優化?web
今天咱們主要從如下幾個方面來學習YOLO-V3
對YOLO-V2
作了哪些改進。算法
-
Darknet-53
結構 -
YOLO-V3
結構 -
先驗框設置 -
損失函數 -
模型性能
YOLO-V3模型框架
YOLO-V3
模型框架,咱們主要從它的基礎網絡Darknet-53
以及YOLO-V3
的結構方面學習,首先看下Darknet-53
結構。微信
Darknet-53結構
Darknet-53
是專門爲YOLO-V3
設計的一個深度學習框架,有着很是好的圖像識別的效果,以下圖:網絡

整個網絡主要包括5
組殘差塊,以下:框架
-
以 256x256
輸入爲例,首先通過一個3x3x32
的卷積層輸出爲256x256x32
; -
接着通過一個 3x3x64 stride=2
的卷積層輸出爲128x128x64
; -
接着通過一個 殘差塊(前面學習殘差網絡的時候學過),輸出爲 128x128x64
; -
再通過一個 3x3x128 stride=2
的卷積層輸出爲64x64x128
; -
通過 2
個殘差塊後輸出爲64x64x128
; -
接着通過一個 3x3x256 stride=2
的卷積層輸出爲32x32x256
; -
接着通過 8
個殘差塊,輸出爲32x32x256
; -
再通過一個 3x3x512 stride=2
的卷積層輸出爲16x16x512
; -
接着通過 8
個殘差塊後輸出爲16x16x512
; -
接着通過一個 3x3x1024 stride=2
的卷積層輸出爲8x8x1024
; -
接着通過 4
個殘差塊後輸出爲8x8x1024
; -
最後通過池化全鏈接層以及 softmax
輸出.
這就是Darknet-53
網絡的具體框架,接下來咱們看下YOLO-V3
算法是怎麼嫁接上去的。編輯器
YOLO-V3結構
YOLO-V3
借鑑了前面學的SSD算法的思想,採用從不一樣尺度特徵圖上下手的檢測方式,以下:ide

咱們看下這個殘差塊,如上圖右上小塊,簡單的說就是一組特徵圖與它通過兩個卷積層後的特徵圖相加。函數
YOLO-V3
分別從Darknet-53
框架的第7
步,第9
步和第11
步的特徵圖下手進行多尺度檢測。首先,一塊兒從Darknet-53
最後輸出的8x8x1024
的特徵圖看如何檢測的。這裏將8x8x1024
的特徵圖通過5
個卷積層進行二次提取特徵後拿去檢測目標。然後再將提取後的特徵圖上採樣與第9
步的特徵圖合併通過5
個卷積層進行二次提取特徵後拿去檢測目標。再將第9
步的二次提取特徵圖上採樣與第7
步的特徵圖合併進行二次特徵提取檢測目標。性能
YOLO-V3
通常使用416x416
大小的圖片做爲輸入,根據上面結構圖,最後獲得的特徵圖爲13x13
,Scale2
的特徵圖爲26x26
,Scale3
的特徵圖爲52x52
.YOLO-V3
使用的是COCO
數據集訓練,COCO
數據集目標檢測有80
個類別,而YOLO-V3
中每一個cell
有3
個box
,每一個box
還有(x,y,w,h,confidence)
五個基本參數,也就是說一個cell
對應的輸出維度爲3x(5+80)=255
(這裏不明白爲何這樣計算的請參考YOLO-V2算法).
因此YOLO-V3
有3
個不一樣特徵尺度的輸出,分別爲13x13x255
,26x26x255
和52x52x255
的檢測結果。對於416x416
的輸入圖片,YOLO-V2
中的bounding boxes
有13x13x5=845
個,而YOLO-V3
則有(13x13+26x26+52x52)x3=10467
個.學習
模型的訓練及性能
明白了YOLO-V3
算法的結構,咱們一塊兒看下訓練方面的東西,首先先驗框該怎麼設?
先驗框設置
前面學的YOLO-V2算法已經開始採用K-means
聚類獲得先驗框的尺寸,YOLO-V3
延續了這種方法,爲每種下采樣尺度設定3中先驗框,總共聚類出9
中尺寸的先驗框。在COCO
數據集上,這9
個先驗框是(10x13)
,(16x30)
,(33x23)
,(30x61)
,(62x45)
,(59x119)
,(116x90)
,(156x198)
,(373x326)
.
分配上,在最小的13x13
特徵圖上(有最大的感覺野)應用較大的先驗框(116x90)
,(156x198)
,(373x326)
適合檢測較大的對象。
中等的26x26
特徵圖上(中等感覺野)應用中等大小的先驗框(30x61)
,(62x45)
,(59x119)
,適合檢測中等大小的對象。
較大的52x52
特徵圖上(較小的感覺野)應用較小的先驗框(10x13)
,(16x30)
,(33x23)
,適合檢測較小的對象。以下表:
損失函數
YOLO-V3
對類別預測的代價函數進行了修改,而且沒有用softmax
。那爲何沒有用softmax
呢?在原來的分類網絡中softmax
層都是假設一張圖片或者一個object
只屬於一個類別,可是在一些複雜場景下,一個object
可能屬於多個類,好比,咱們的類別中有woman
和person
這兩類,那麼若是一張圖像中有一個woman
,那麼咱們檢測的結果中類別標籤就要同時有woman
和person
這兩類,這就是多標籤分類。也就是一個object
屬於多個類別。
因此在YOLO-V3
中,用了邏輯迴歸層來對每一個類別作二分類。邏輯迴歸層主要用到sigmoid
函數,該函數能夠將輸入約束在0~1
的範圍內,所以當一張圖像通過特徵提取後的某一類輸出通過sigmoid
函數約束後若是大於0.5
,就表示屬於該類,這樣一個框就能夠預測多個類別,代價函數用的是sigmoid
的交叉熵。
模型性能
YOLO-V3
在速度和準確率上都是很不錯的,從下圖中,咱們能夠看到在跟其餘算法進行對比的圖中,YOLO-V3
在inference time
上處於領先地位,其中YOLOV3-320
因爲輸入圖片爲320x320
,因此inference time
最小爲22ms
,而YOLOV3-608
因爲輸入圖片較大,inference time
爲51ms
,也是領先於其餘算法的。雖然mAP
最高的算法爲FPN-FRCN
,可是運行時間卻要172ms
。而YOLOV3-608
的mAP
也達到了57.9
。

從下面各算法在COCO
數據集上的性能圖中,咱們也能夠清楚的看到YOLO-V3
算法的強大性能。

好了,至此,咱們今天從Darknet-53
結構,YOLO-V3
結構,先驗框設置,損失函數,模型性能的角度對YOLO-V3
作了詳細的介紹,以及跟YOLO-V2
對比作了哪些改進,但願對你們有些幫助。下期,咱們將一塊兒學習目標檢測算法YOLO-V4
。
本文分享自微信公衆號 - 智能算法(AI_Algorithm)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。