Yolov5官方代碼中,給出的目標檢測網絡中一共有4個版本,分別是Yolov5s、Yolov5m、Yolov5l、Yolov5x四個模型。
YOLO v5四個版本的算法性能圖
YOLO v5s的框架圖
Mosaic數據增強
Mosaic是參考CutMix數據增強的方式,但CutMix只使用了兩張圖片進行拼接,而Mosaic數據增強則采用了4張圖片,隨機縮放、隨機裁剪、隨機排布的方式進行拼接。
1、每次讀取四張圖片。
2、分別對四張圖片進行翻轉、縮放、色域變化等,並且按照四個方向位置擺好。
3、進行圖片的組合和框的組合
對於小目標的檢測效果還是很不錯的
自適應錨框計算
在Yolo算法中,針對不同的數據集,都會有初始設定長寬的錨框。
在網絡訓練中,網絡在初始錨框的基礎上輸出預測框,進而和真實框groundtruth進行比對,計算兩者差距,再反向更新,迭代網絡參數。
因此初始錨框也是比較重要的一部分,比如Yolov5在Coco數據集上初始設定的錨框:
在YOLOv3、YOLOv4中,訓練不同的數據集時,計算初始錨框的值是通過單獨的程序運行的。
但YOLOv5中將此功能嵌入到代碼中,每次訓練時,自適應的計算不同訓練集中最佳錨框找值。
當然,如果計算錨框效果不是很好,也可以在代碼中將西東計算錨框功能關閉,控制的代碼中即train.py中上面一行代碼,設計成FALSE,每次訓練時,不會自動計算。
自適應圖片縮放
在常用的目標檢測算法中,不同的圖片長寬都不相同,因此常用的方式是將原始圖片統一縮放到一個標准尺寸,再送入檢測網絡中。
自適應圖片縮放
在常用的目標檢測算法中,不同的圖片長寬都不相同,因此常用的方式是將原始圖片統一縮放到一個標准尺寸,再送入檢測網絡中。
比如Yolo算法中常用416*416,608*608等尺寸,比如對下面800*600的圖像進行縮放。
Yolov5的代碼中datasets.py的letterbox函數中進行了修改,對原始圖像自適應的添加最少的黑邊。
Focus結構
Focus是Yolov5新增的操作,右圖就是將443的圖像切片后變成2212的特征圖。
以Yolov5s的結構為例,原始6086083的圖像輸入Focus結構,采用切片操作,先變成30430412的特征圖,再經過一次32個卷積核的卷積操作,最終變成30430432的特征圖。
需要注意的是:Yolov5s的Focus結構最后使用了32個卷積核,而其他三種結構,使用的數量有所增加。
CSP結構
Yolov5中設計了兩種CSP結構,以Yolov5s網絡為例,CSP1_X結構應用於Backbone主干網絡,另一種CSP2_X結構則應用於Neck中。
CSPNet(Cross Stage Partial Network):跨階段局部網絡,以緩解以前需要大量推理計算的問題。
- 增強了CNN的學習能力,能夠在輕量化的同時保持准確性。
- 降低計算瓶頸。
- 降低內存成本。
CSPNet通過將梯度的變化從頭到尾地集成到特征圖中,在減少了計算量的同時可以保證准確率。
CSPNet和PRN都是一個思想,將feature map拆成兩個部分,一部分進行卷積操作,另一部分和上一部分卷積操作的結果進行concate。
neck部分
Yolov5的Neck和Yolov4中一樣,都采用FPN+PAN的結構。
Yolov4的Neck結構中,采用的都是普通的卷積操作。而Yolov5的Neck結構中,采用借鑒CSPnet設計的CSP2結構,加強網絡特征融合的能力。
輸出端
主要是IOU的不同計算方法,這一塊要重點理解,對於目標檢測的輸出結果有很大的影響(重疊)
GIOU
Yolov5中采用其中的GIOU_Loss做Bounding box的損失函數。
上面公式的意思是:先計算兩個框的最小閉包區域面積 [公式] (通俗理解:同時包含了預測框和真實框的最小框的面積),再計算出IoU,再計算閉包區域中不屬於兩個框的區域占閉包區域的比重,最后用IoU減去這個比重得到GIoU。
用圖片來進行理解就是:
- 兩個框的最小閉包區域面積 = 紅色矩形面積
- IoU = 黃色框和藍色框的交集 / 並集
- 閉包區域中不屬於兩個框的區域占閉包區域的比重 = 藍色面積 / 紅色矩陣面積
- GIoU = IoU - 比重
DIoU
DIoU要比GIou更加符合目標框回歸的機制,將目標與anchor之間的距離,重疊率以及尺度都考慮進去,使得目標框回歸變得更加穩定,不會像IoU和GIoU一樣出現訓練過程中發散等問題。
其中 分別代表了預測框和真實框的中心點,且 ρ 代表的是計算兩個中心點間的歐式距離。c 代表的是能夠同時包含預測框和真實框的最小閉包區域的對角線距離。
優點:
- 與GIoU loss類似,DIoU loss(LDIoU=1−DIoU)在與目標框不重疊時,仍然可以為邊界框提供移動方向。
- DIoU loss可以直接最小化兩個目標框的距離,因此比GIoU loss收斂快得多。
- 對於包含兩個框在水平方向和垂直方向上這種情況,DIoU損失可以使回歸非常快,而GIoU損失幾乎退化為IoU損失。
- DIoU還可以替換普通的IoU評價策略,應用於NMS中,使得NMS得到的結果更加合理和有效。
CIOU
作者考慮到bbox回歸三要素中的長寬比還沒被考慮到計算中,因此,進一步在DIoU的基礎上提出了CIoU。
Yolov4中采用CIOU_Loss作為目標Bounding box的損失。
完整的 CIoU 損失函數定義:
其中α 是權重函數,而 v vv 用來度量長寬比的相似性,定義為
nms非極大值抑制
在目標檢測的后處理過程中,針對很多目標框的篩選,通常需要nms操作。
因為CIOU_Loss中包含影響因子v,涉及groudtruth的信息,而測試推理時,是沒有groundtruth的。
所以Yolov4在DIOU_Loss的基礎上采用DIOU_nms的方式,而Yolov5中采用加權nms的方式。
不同的nms,會有不同的效果,采用了DIOU_nms的方式,在同樣的參數情況下,將nms中IOU修改成DIOU_nms。對於一些遮擋重疊的目標,確實會有一些改進。
比如下面黃色箭頭部分,原本兩個人重疊的部分,在參數和普通的IOU_nms一致的情況下,修改成DIOU_nms,可以將兩個目標檢出。
雖然大多數狀態下效果差不多,但在不增加計算成本的情況下,有稍微的改進也是好的。
Yolov5四種網絡的深度
Yolov5四種網絡的寬度