AI大視覺(十八) | Yolo v5的改進思想

 本文來自公衆號「每日一醒」git

Yolo v5一共有四個模型,分別爲Yolov5s、Yolov5m、Yolov5l、Yolov5x。算法

Yolov5s網絡最小,速度最少,AP精度也最低,若是檢測的以大目標爲主,追求速度,倒也是個不錯的選擇。網絡

其餘的三種網絡,在此基礎上,不斷加深加寬網絡,AP精度也不斷提高,但速度的消耗也在不斷增長。app

 

YOLOV5的改進函數

一、backbone:CSPDarkNet53+Focus性能

二、neck:SPP+PAN學習

三、head:YOLOv3測試

四、自適應圖片縮放優化

五、數據加強:馬賽克(Mosaic)spa

六、自適應錨框計算

七、激活函數:Leaky ReLU 和 Sigmoid 激活函數。

八、損失函數:GIOU

九、跨網格預測(新的Loss計算方法)

 

Focus

Focus從高分辨率圖像中,週期性的抽出像素點重構到低分辨率圖像中,即將圖像相鄰的四個位置進行堆疊,聚焦wh維度信息到c通道空間,提升每一個點感覺野,並減小原始信息的丟失,該模塊的設計主要是減小計算量加快速度。

以Yolov5s的結構爲例,原始640*640*3的圖像輸入Focus結構,採用切片操做,先變成320*320*12的特徵圖,再通過一次32個卷積核的卷積操做,最終變成320*320*32的特徵圖。

簡單來講就是把數據切分爲4份,每份數據都是至關於2倍下采樣獲得的,而後在channel維度進行拼接,最後進行卷積操做。

(4*4*3的圖像切片後變成2*2*12的特徵圖)

 

Focus示意圖:

 

 

爲何要加fucus?

其最大好處是能夠最大程度的減小信息損失而進行下采樣操做。

 

 

CSP(跨階段局部網絡)

跨階段局部網絡緩解之前須要大量推理計算的問題。

Yolov4中只有主幹網絡使用了CSP結構,而Yolov5中設計了兩種CSP結構。

以Yolov5s網絡爲例,CSP1_X結構應用於Backbone主幹網絡,另外一種CSP2_X結構則應用於Neck中。

Yolov4的Neck結構中,採用的都是普通的卷積操做。

Yolov5的Neck結構中,採用借鑑CSPnet設計的CSP2結構,增強網絡特徵融合的能力。

CSP示意圖:

 

CSP代碼實現:

Res unit模塊:

 

 

SPP

SPP模塊(空間金字塔池化模塊), 分別採用五、九、13的最大池化,再進行concat融合,提升感覺野。

SPP的輸入是512x20x20,通過1x1的卷積層後輸出256x20x20,而後通過並列的三個Maxpool進行下采樣,將結果與其初始特徵相加,輸出1024x20x20,最後用512的卷積核將其恢復到512x20x20。

SPP示意圖:

SPP代碼實現:

 

 

自適應錨框計算

在 yolov三、v4 中是採用 kmean 和遺傳算法對自定義數據集進行分析,得到合適自定義數據集中對象邊界框預測的預設錨點框,計算初始錨框的值是經過單獨的程序運行的。

在YOLO V5 中錨定框是基於訓練數據自動學習的,此功能嵌入到代碼中,每次訓練時,自適應的計算不一樣訓練集中的最佳錨框值。

在網絡訓練中,網絡在初始錨框的基礎上輸出預測框,進而和真實框groundtruth進行比對,計算二者差距,再反向更新,迭代網絡參數。

所以初始錨框也是比較重要的一部分,好比Yolov5在Coco數據集上初始設定的錨框:

 

自適應圖片縮放

在項目實際使用時,不少圖片的長寬比不一樣,所以縮放填充後,兩端的黑邊大小都不一樣,而若是填充的比較多,則存在信息冗餘,影響推理速度。

Yolov5的代碼中datasets.py的letterbox函數中進行了修改,對原始圖像自適應的添加最少的黑邊。

圖像高度上兩端的黑邊變少了,在推理時,計算量也會減小,即目標檢測速度會獲得提高。

經過這種簡單的改進,推理速度獲得了37%的提高,能夠說效果很明顯。

 

 

訓練時沒有采用縮減黑邊的方式,仍是採用傳統填充的方式,即縮放到416*416大小。                                                                                                                只是在測試,使用模型推理時,才採用縮減黑邊的方式,提升目標檢測,推理的速度。

 

 

 

 

 

 

GIOU

Yolov5採用GIOU_Loss作Bounding box的損失函數,使用 二進制交叉熵(BCE) 和 Logits 損失函數 計算類機率和目標得分的損失。

進化二:不相交時,IOU=0,兩個框距離變換,IOU loss不變,改進爲GIOU。

GIOU Loss,在IOU的基礎上引入了預測框和真實框的最小外接矩形。

GIoU公式:

 GIoU Loss公式:

 

GIOU算法流程以下:

 

當兩框徹底重合時取最小值0,當兩框的邊外切時,損失函數值爲1;

當兩框分離且距離很遠時,損失函數值爲2。

使用外接矩形的方法不只能夠反應重疊區域的面積,還能夠計算非重疊區域的比例,所以GIOU損失函數能更好的反應真實框和預測框的重合程度和遠近距離。

 

GIOU Loss存在的問題:

1)包含時計算獲得的IOU、GIOU數值相等,損失函數值與IOUloss 同樣,沒法很好的衡量其相對的位置關係。

2)同時在計算過程當中出現上述狀況,預測框在水平或垂直方向優化困難,致使收斂速度慢。

 


 

nms非極大值抑制

在目標檢測的後處理過程當中,針對不少目標框的篩選,一般須要nms操做。

由於CIOU_Loss中包含影響因子v,涉及groudtruth的信息,而測試推理時,是沒有groundtruth的。

因此Yolov4在DIOU_Loss的基礎上採用DIOU_nms的方式,Yolov5中採用加權nms的方式。

 

激活函數

YOLO V5的做者使用了 Leaky ReLU 和 Sigmoid 激活函數。

在 YOLO V5中,中間/隱藏層使用了 Leaky ReLU 激活函數,最後的檢測層使用了 Sigmoid 形激活函數。

而YOLO V4使用Mish激活函數。

跨網格預測(新的Loss計算方法)

yolov5的loss設計和前yolo系列差異比較大的地方就是正樣本anchor區域計算。

yolov3的loss計算過程很是簡單,核心是如何獲得loss計算所需的target。

yolov5的很大區別就是在於正樣本區域的定義。

 

yolov3的正樣本區域也就是anchor匹配策略很是粗暴:

保證每一個gt bbox必定有一個惟一的anchor進行對應,匹配規則就是IOU最大,而且某個gt必定不可能在三個預測層的某幾層上同時進行匹配。

(不考慮一個gt bbox對應多個anchor的場合,也不考慮anchor是否設置合理,不考慮一個gt bbox對應多個anchor的場合的設定會致使總體收斂比較慢。)

yolov5採用了增長正樣本anchor數目的作法來加速收斂。

 

yolov5核心匹配規則爲:

(1) 對於任何一個輸出層,拋棄了基於max iou匹配的規則,而是直接採用shape規則匹配,也就是該bbox和當前層的anchor計算寬高比,若是寬高比例大於設定閾值,則說明該bbox和anchor匹配度不夠,將該bbox過濾暫時丟掉,在該層預測中認爲是背景

(2) 對於剩下的bbox,計算其落在哪一個網格內,同時利用四捨五入規則,找出最近的兩個網格,將這三個網格都認爲是負責預測該bbox的,能夠發現粗略估計正樣本數相比前yolo系列,至少增長了三倍。

綠點表示該Bbox中心,如今須要額外考慮其2個最近的鄰域網格也做爲該bbox的正樣本anchor。

bbox的xy迴歸分支的取值範圍再也不是0~1,而是-0.5~1.5(0.5是網格中心偏移),由於跨網格預測了。

在任何一預測層,將每一個bbox複製和anchor個數同樣多的數目,而後將bbox和anchor一一對應計算,去除不匹配的bbox,而後對原始中心點網格座標擴展兩個鄰居像素,增長正樣本anchor。

有個細節須要注意,前面shape過濾時候是不考慮bbox的xy座標的,也就是說bbox的wh是和全部anchor匹配的,會致使找到的鄰居也至關於進行了shape過濾規則,故對於任何一個輸出層,若是該bbox保留,那麼至少有3個anchor進行匹配,而且保留的3個anchor shape是同樣大的。

即保留的anchor在不考慮越界狀況下是3或者6或者9。

 

(1) 不一樣於yolov3和v4,其gt bbox能夠跨層預測即有些bbox在多個預測層都算正樣本

(2) 不一樣於yolov3和v4,其gt bbox的匹配數範圍從3-9個,明顯增長了不少正樣本(3是由於多引入了兩個鄰居)

(3) 不一樣於yolov3和v4,有些gt bbox因爲和anchor匹配度不高,而變成背景

這種特別暴力增長正樣本作法仍是存在很大弊端,雖然能夠加速收斂,可是因爲引入了不少低質量anchor,對最終結果仍是有影響的。

 

yolo v5深度與寬度控制

Yolov5代碼中的四種網絡,和以前的Yolov3,Yolov4中的cfg文件不一樣,都是以yaml的形式來呈現。

並且四個文件的內容基本上都是同樣的,只有最上方的depth_multiple和width_multiple兩個參數不一樣。

四種結構就是經過上面的兩個參數,來進行控制網絡的深度和寬度。

其中depth_multiple控制網絡的深度,width_multiple控制網絡的寬度。

 

深度:四種網絡結構中每一個CSP結構的深度都是不一樣的。

yolov5s,第一個CSP1中,使用了1個殘差組件,是CSP1_1。

Yolov5m,在第一個CSP1中,使用了2個殘差組件,是CSP1_2。

Yolov5l,在第一個CSP1中,使用了3個殘差組件,是CSP1_3。

Yolov5x,在第一個CSP1中,使用了4個殘差組件,是CSP1_4。

 

寬度:四種yolov5結構在不一樣階段的卷積核的數量都是不同的,所以也直接影響卷積後特徵圖的第三維度,即厚度。

Yolov5s,第一個Focus結構中,最後卷積操做使用了32個卷積核,所以通過Focus結構,特徵圖的大小變成304*304*32。

yolov5m,第一個Focus結構中,最後卷積操做使用了48個卷積核,所以通過Focus結構,特徵圖的大小變成304*304*48。

yolov5l,yolov5x也是一樣的原理。

 

總結

yolov5:

(1) 考慮了鄰域的正樣本anchor匹配策略,增長了正樣本。

(2) 經過靈活的配置參數,能夠獲得不一樣複雜度的模型。

(3) 經過一些內置的超參優化策略,提高總體性能。

(4) 和yolov4同樣,都用了mosaic加強,提高小物體檢測性能。


 

 

 

   

 

 ——————

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

掃描下方「每日一醒」,選擇「關注」公衆號

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

 

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

投稿吧   | 留言吧

 


相關文章
相關標籤/搜索