目標檢測算法YOLO-V3結構詳解


上期咱們一塊兒學了YOLO-V2的算法結構以及跟YOLO-V1比起來有哪些優缺點,以下:
目標檢測算法YOLO-V2詳解
今天咱們看下在YOLO-V2版本上改進的YOLO-V3算法,到底作了哪些優化?web

今天咱們主要從如下幾個方面來學習YOLO-V3YOLO-V2作了哪些改進。算法

  • Darknet-53結構
  • YOLO-V3結構
  • 先驗框設置
  • 損失函數
  • 模型性能

YOLO-V3模型框架

YOLO-V3模型框架,咱們主要從它的基礎網絡Darknet-53以及YOLO-V3的結構方面學習,首先看下Darknet-53結構。微信

Darknet-53結構

Darknet-53是專門爲YOLO-V3設計的一個深度學習框架,有着很是好的圖像識別的效果,以下圖:網絡

Darknet-53模型結構

整個網絡主要包括5組殘差塊,以下:框架

  1. 256x256輸入爲例,首先通過一個 3x3x32的卷積層輸出爲 256x256x32;
  2. 接着通過一個 3x3x64 stride=2的卷積層輸出爲 128x128x64;
  3. 接着通過一個 殘差塊(前面學習殘差網絡的時候學過),輸出爲 128x128x64
  4. 再通過一個 3x3x128 stride=2的卷積層輸出爲 64x64x128;
  5. 通過 2個殘差塊後輸出爲 64x64x128;
  6. 接着通過一個 3x3x256 stride=2的卷積層輸出爲 32x32x256;
  7. 接着通過 8個殘差塊,輸出爲 32x32x256
  8. 再通過一個 3x3x512 stride=2的卷積層輸出爲 16x16x512;
  9. 接着通過 8個殘差塊後輸出爲 16x16x512;
  10. 接着通過一個 3x3x1024 stride=2的卷積層輸出爲 8x8x1024;
  11. 接着通過 4個殘差塊後輸出爲 8x8x1024;
  12. 最後通過池化全鏈接層以及 softmax輸出.

這就是Darknet-53網絡的具體框架,接下來咱們看下YOLO-V3算法是怎麼嫁接上去的。編輯器

YOLO-V3結構

YOLO-V3借鑑了前面學的SSD算法的思想,採用從不一樣尺度特徵圖上下手的檢測方式,以下:ide

YOLO-V3結構

咱們看下這個殘差塊,如上圖右上小塊,簡單的說就是一組特徵圖與它通過兩個卷積層後的特徵圖相加。函數

YOLO-V3分別從Darknet-53框架的第7步,第9步和第11步的特徵圖下手進行多尺度檢測。首先,一塊兒從Darknet-53最後輸出的8x8x1024的特徵圖看如何檢測的。這裏將8x8x1024的特徵圖通過5個卷積層進行二次提取特徵後拿去檢測目標。然後再將提取後的特徵圖上採樣與第9步的特徵圖合併通過5個卷積層進行二次提取特徵後拿去檢測目標。再將第9步的二次提取特徵圖上採樣與第7步的特徵圖合併進行二次特徵提取檢測目標。性能

YOLO-V3通常使用416x416大小的圖片做爲輸入,根據上面結構圖,最後獲得的特徵圖爲13x13Scale2的特徵圖爲26x26Scale3的特徵圖爲52x52.
YOLO-V3使用的是COCO數據集訓練,COCO數據集目標檢測有80個類別,而YOLO-V3中每一個cell3box,每一個box還有(x,y,w,h,confidence)五個基本參數,也就是說一個cell對應的輸出維度爲3x(5+80)=255(這裏不明白爲何這樣計算的請參考YOLO-V2算法).
因此YOLO-V33個不一樣特徵尺度的輸出,分別爲13x13x255,26x26x25552x52x255的檢測結果。對於416x416的輸入圖片,YOLO-V2中的bounding boxes13x13x5=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可能屬於多個類,好比,咱們的類別中有womanperson這兩類,那麼若是一張圖像中有一個woman,那麼咱們檢測的結果中類別標籤就要同時有womanperson這兩類,這就是多標籤分類。也就是一個object屬於多個類別。

因此在YOLO-V3中,用了邏輯迴歸層來對每一個類別作二分類。邏輯迴歸層主要用到sigmoid函數,該函數能夠將輸入約束在0~1的範圍內,所以當一張圖像通過特徵提取後的某一類輸出通過sigmoid函數約束後若是大於0.5,就表示屬於該類,這樣一個框就能夠預測多個類別,代價函數用的是sigmoid的交叉熵。

模型性能

YOLO-V3在速度和準確率上都是很不錯的,從下圖中,咱們能夠看到在跟其餘算法進行對比的圖中,YOLO-V3inference time上處於領先地位,其中YOLOV3-320因爲輸入圖片爲320x320,因此inference time最小爲22ms,而YOLOV3-608因爲輸入圖片較大,inference time51ms,也是領先於其餘算法的。雖然mAP最高的算法爲FPN-FRCN,可是運行時間卻要172ms。而YOLOV3-608mAP也達到了57.9

目標檢測算法對比

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

各算法在COCO數據集上的性能

好了,至此,咱們今天從Darknet-53結構,YOLO-V3結構,先驗框設置,損失函數,模型性能的角度對YOLO-V3作了詳細的介紹,以及跟YOLO-V2對比作了哪些改進,但願對你們有些幫助。下期,咱們將一塊兒學習目標檢測算法YOLO-V4

本文分享自微信公衆號 - 智能算法(AI_Algorithm)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索