AI大視覺(四) | Yolo v3 如何提高對小目標的檢測效率


 本文來自公眾號“AI大道理”

YOLO v3 是目前工業界用的非常多的目標檢測的算法。

YOLO v3 沒有太多的創新,主要是借鑒一些好的方案融合到 YOLO v2 里面。

不過效果還是不錯的,在保持速度優勢的前提下,提升了預測精度,尤其是加強了對小物體的識別能力。

YOLO v3 主要的改進有:

(1)調整了網絡結構;

(2)利用多尺度特征進行對象檢測;

(3)對象分類用 Logistic 取代了 softmax。


​YOLO v3的思想

1)多種尺度網格

YOLO v3 的核心思想就是用 3 種不同的網格來划分原始圖像。

其中 13 * 13 的網格划分的每一塊最大,用於預測大物體。

26 * 26 的網格划分的每一塊中等大小,用於預測中等物體。

52 * 52 的網格划分的每一塊最小,用於預測小物體。

2)Darknet-53

YOLO v3 的 backbone 采用了自己設計的 Darknet-53 的網絡結構(含有53個卷積層),它借鑒了殘差網絡 residual network 的做法,在一些層之間設置了快捷鏈路(shortcut connections)。

上圖的 Darknet-53 網絡采用 256 * 256 * 3 作為輸入,最左側那一列的 1、2、8 等數字表示多少個重復的殘差組件。每個殘差組件有兩個卷積層和一個快捷鏈路。

 

3)9 種尺度先驗框

隨着輸出的特征圖的數量和尺度的變化,先驗框的尺寸也需要相應的調整。

YOLO v2 已經開始采用 K-means 聚類得到先驗框的尺寸,YOLO v3 延續了這種方法,為每種下采樣尺度設定 3 種先驗框,總共聚類出 9 種尺寸的先驗框。

在 COCO 數據集這 9 個先驗框是:(10x13),(16x30),(33x23),(30x61),(62x45),(59x119),(116x90),(156x198),(373x326)。

 

分配上,在最小的 13 * 13 特征圖上(有最大的感受野)應用較大的先驗框(116x90),(156x198),(373x326),適合檢測較大的對象。

中等的 26 * 26 特征圖上(中等感受野)應用中等的先驗框(30x61),(62x45),(59x119),適合檢測中等大小的對象。

較大的 52 * 52 特征圖上(較小的感受野)應用較小的先驗框(10x13),(16x30),(33x23),適合檢測較小的對象。

 

 

藍色框為聚類得到的先驗框,黃色框是 ground truth,紅框是對象中心點所在的網格。

4)輸入與輸出

 

不考慮神經網絡結構細節的話,總的來說,對於一個輸入圖像,YOLO v3 將其映射到 3 個尺度的輸出張量,代表圖像各個位置存在各種對象的概率。

對於一個 416 * 416 的輸入圖像,在每個尺度的特征圖的每個網格設置 3 個先驗框,總共有 13 * 13 * 3 + 26 * 26 * 3 + 52 * 52 * 3 = 10647 個預測。

每一個預測是一個 (4 + 1 + 80) = 85 維向量,這個 85 維向量包含邊框坐標(4 個數值),邊框置信度(1 個數值),對象類別的概率(對於 COCO 數據集,有 80 種對象)。

對比一下,YOLO v2 采用 13 * 13 * 5 = 845 個預測,YOLO v3 的嘗試預測邊框數量增加了 10 多倍,而且是在不同分辨率上進行,所以 mAP 以及對小物體的檢測效果有一定的提升。

 

5)bounding box的坐標預測方式

bounding box的坐標預測方式還是延續了YOLO v2的做法。

簡單講就是下面這個截圖的公式,tx、ty、tw、th就是模型的預測輸出。

cx和cy表示grid cell的坐標,比如某層的feature map大小是13*13,那么grid cell就有13*13個,第0行第1列的grid cell的坐標cx就是0,cy就是1。

pw和ph表示預測前bounding box的size。

bx、by。bw和bh就是預測得到的bounding box的中心的坐標和size。

坐標的損失采用的是平方誤差損失。 

6)類別預測

類別預測方面主要是將原來的單標簽分類改進為多標簽分類。

因此網絡結構上就將原來用於單標簽多分類的softmax層換成用於多標簽多分類的邏輯回歸層。

為什么要做這樣的修改?

原來分類網絡中的softmax層都是假設一張圖像或一個object只屬於一個類別,但是在一些復雜場景下,一個object可能屬於多個類。

比如你的類別中有woman和person這兩個類,那么如果一張圖像中有一個woman,那么你檢測的結果中類別標簽就要同時有woman和person兩個類。

這就是多標簽分類,需要用邏輯回歸層來對每個類別做二分類。

邏輯回歸層主要用到sigmoid函數,該函數可以將輸入約束在0到1的范圍內,因此當一張圖像經過特征提取后的某一類輸出經過sigmoid函數約束后如果大於0.5,就表示屬於該類。

 

​YOLO  v3的網絡結構

YOLO v2 曾采用 passthrough 結構來檢測細粒度特征,在 YOLO v3 更進一步采用了 3 個不同尺度的特征圖來進行對象檢測。

結合上圖看,卷積網絡在 79 層后,經過下方幾個黃色的卷積層得到一種尺度的檢測結果。

相比輸入圖像,這里用於檢測的特征圖有 32 倍的下采樣。

比如輸入是 416 * 416 的話,這里的特征圖就是 13 * 13 了。

由於下采樣倍數高,這里特征圖的感受野比較大,因此適合檢測圖像中尺寸比較大的對象。

為了實現細粒度的檢測,第 79 層的特征圖又開始作上采樣(從 79 層往右開始上采樣卷積),然后與第 61 層特征圖融合(Concatenation),這樣得到第 91 層較細粒度的特征圖,同樣經過幾個卷積層后得到相對輸入圖像 16 倍下采樣的特征圖。

它具有中等尺度的感受野,適合檢測中等尺度的對象。

最后,第 91 層特征圖再次上采樣,並與第 36 層特征圖融合(Concatenation),最后得到相對輸入圖像 8 倍下采樣的特征圖。

它的感受野最小,適合檢測小尺寸的對象。

 

​YOLO v3 的損失函數

在YOLO v1中使用了一種叫sum-square error的損失計算方法,就是簡單的差方相加而已。

但在v3的論文里沒有明確提所用的損失函數。

其實也是跟YOLO v1類似,只是做了一些小調整。即損失還是四個特性((x,y)、(w,h)、分類和confidence)的損失累加起來,也就是一個loss_function搞定端到端的訓練。

 

​總結

YOLO3借鑒了殘差網絡結構,形成更深的網絡層次,以及多尺度檢測,提升了mAP及小物體檢測效果。

如果采用COCO mAP50做評估指標(不是太介意預測框的准確性的話),YOLO3的表現相當驚人,如下圖所示,在精確度相當的情況下,YOLOv3的速度是其它模型的3、4倍。

 

 

 

   

 

 ——————

淺談則止,細致入微AI大道理

掃描下方“AI大道理”,選擇“關注”公眾號

—————————————————————

​     

—————————————————————

投稿吧   | 留言吧

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM