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


 本文來自公眾號“每日一醒”

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

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

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

 

YOLOV5的改進

1、backbone:CSPDarkNet53+Focus

2、neck:SPP+PAN

3、head:YOLOv3

4、自適應圖片縮放

5、數據增強:馬賽克(Mosaic)

6、自適應錨框計算

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

8、損失函數:GIOU

9、跨網格預測(新的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模塊(空間金字塔池化模塊), 分別采用5、9、13的最大池化,再進行concat融合,提高感受野。

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

SPP示意圖:

SPP代碼實現:

 

 

自適應錨框計算

在 yolov3、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大道理

掃描下方“每日一醒”,選擇“關注”公眾號

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

 

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

投稿吧   | 留言吧

 



免責聲明!

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



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