前言
前文目標檢測-One Stage-YOLOv4提到YOLOv4主要是基于技巧的集成,對于算法落地具有重大意義,YOLOv5則在工程應用方面更近一步,將算法深度集成,使得使用者不用再過多關注算法實現(xiàn),且提供了多種預訓練模型,到目前為止,由ultralytics團隊開發(fā)的ultralytics
包,已經(jīng)支持YOLOv3
、YOLOv5
、YOLOv6
、YOLOv8
、YOLO-NAS
、RT-DETR
等等,其中YOLOv5和當前YOLO家族最新的YOLOv8是由ultralytics團隊研發(fā)的。
提示:以下是本篇文章正文內(nèi)容,下面內(nèi)容可供參考
一、YOLOv5的網(wǎng)絡結構和流程
YOLOv5的不同版本
YOLOv5給出了五個版本:Yolov5n
、Yolov5s
、Yolov5m
、Yolov5l
、Yolov5x
ps:
- 要注意的是Yolov5n是YOLOv5 系列中的一個變體,專為 Nano 設備(如 NVIDIA Jetson Nano)進行優(yōu)化。YOLOv5n 在保持較快速度的同時,提供適用于邊緣設備的準確度。
- 因此不算Yolov5n的話,YOLOv5s網(wǎng)絡是YOLOv5系列中深度最小,特征圖的寬度(channels)最小的網(wǎng)絡。其他的三種(m、l、x)都是在此基礎上不斷加深,不斷加寬。
![]()
YOLOv5的流程
- 利用自適應圖片縮放技術對輸入圖片進行縮放
ps:
- 傳統(tǒng)的縮放填充后,兩端的黑邊大小都不同,如果填充的比較多,則存在信息冗余,影響推理速度。
![]()
- yolov5對原始圖像自適應的添加最少的黑邊。圖像高度上兩端的黑邊變少了,在推理時,計算量也會減少,即目標檢測速度會得到提升。注意自適應圖片縮放只在檢測時使用,在訓練時仍使用傳統(tǒng)填充方法。
- 舉例說明自適應圖片縮放計算過程:
- 根據(jù)原始圖片大小以及輸入到網(wǎng)絡的圖片大小計算縮放比例,并選擇小的縮放系數(shù)
![]()
- 第一步得到縮放系數(shù)的計算縮放后的圖片大小
![]()
- 計算黑邊填充數(shù)值:將416-312=104,得到原本需要填充的高度,再采用32對104取余,得到8個像素,再除以2,即得到圖片高度兩端需要填充的數(shù)值。之所以利用32取余,是因為YOLOv5的網(wǎng)絡經(jīng)過5次下采樣,而2的5次方,等于32。所以至少要去掉32的倍數(shù),再進行取余,以免產(chǎn)生尺度太小走不完stride(filter在原圖上掃描時,需要跳躍的格數(shù))的問題。
![]()
- 將利用Focus在不丟失信息情況下對輸入影像進行下采樣
- 將下采樣圖像輸入Backbone+PANet提取多尺度特征
- 利用自適應anchor計算獲取預選框
ps:
- YOLO系列中,可以針對數(shù)據(jù)集設置初始的anchor。在網(wǎng)絡訓練中,網(wǎng)絡在anchor的基礎上輸出預測框,進而和GT框進行比較,計算loss,再反向更新,迭代網(wǎng)絡參數(shù)。在YOLOv3、4版本中,設置初始anchor的大小都是通過單獨的程序使用K-means算法得到,但是在YOLOv5中,將此功能嵌入到代碼中,每次訓練數(shù)據(jù)集之前,都會自動計算該數(shù)據(jù)集最合適的Anchor尺寸,該功能可以在代碼中設置超參數(shù)進行關閉。
- 自適應anchor的計算具體過程如下:
①獲取數(shù)據(jù)集中所有目標的寬和高。
②將每張圖片中按照等比例縮放的方式到 resize 指定大小,這里保證寬高中的最大值符合指定大小。
③將 bboxes 從相對坐標改成絕對坐標,這里乘以的是縮放后的寬高。
④篩選 bboxes,保留寬高都大于等于兩個像素的 bboxes。
⑤使用 k-means 聚類三方得到n個 anchors,與YOLOv3、YOLOv4 操作一樣。
⑥使用遺傳算法隨機對 anchors 的寬高進行變異。倘若變異后的效果好,就將變異后的結果賦值給 anchors;如果變異后效果變差就跳過,默認變異1000次。這里是使用 anchor_fitness 方法計算得到的適應度 fitness,然后再進行評估。
- 將上一步得到的anchor輸入不同的分類和邊框回歸器
- 使用非極大值抑制DIoU-NMS去除冗余窗口(訓練時用的CIoU loss)
YOLOv5s的網(wǎng)絡結構圖
二、YOLOv5的創(chuàng)新點
1. 網(wǎng)絡結構
- 卷積塊從CBM換回了CBL(激活函數(shù)從Mish到Leaky relu)
- 設計了CSP_2X結構應用于Neck中,加強了網(wǎng)絡特征融合的能力。
- backbone最前端添加了Focus模塊(基本上是Yolov2中的pass through)以減小特征圖尺寸,減小了模型復雜度。
2. 輸入數(shù)據(jù)處理
- Mosaic數(shù)據(jù)增強
- 自適應錨框計算
- 自適應圖片縮放
3. 訓練策略
- 多尺度訓練(Multi-scale training)。 如果網(wǎng)絡的輸入是416 x 416。那么訓練的時候就會從 0.5 x 416 到 1.5 x 416 中任意取值,但所取的值都是32的整數(shù)倍。
- 訓練開始時先使用 warmup 進行預熱。 在模型預訓練階段,先使用較小的學習率訓練一些epochs或者steps (如4個 epoch 或10000個 step),再修改為預先設置的學習率進行訓練。
- 使用了余弦退火學習率衰減策略(Cosine annealing scheduler)。
- 采用了 EMA (Exponential Moving Average)更新權重。 相當于訓練時給參數(shù)賦予一個動量,這樣更新起來就會更加平滑。
ps:在深度學習中,經(jīng)常會使用EMA(指數(shù)移動平均)這個方法對模型的參數(shù)做平均,以求提高測試指標并增加模型魯棒。
- 使用了AMP(Automatic Mixed-Precision training)進行混合精度訓練(Mixed precision)。 能夠減少顯存的占用并且加快訓練速度,但是需要 GPU 支持。
ps:默認情況下,大多數(shù)深度學習框架都采用32位浮點算法進行訓練。2017年,NVIDIA研究了一種用于混合精度訓練的方法,該方法在訓練網(wǎng)絡時將單精度(FP32)與半精度(FP16)結合在一起,并使用相同的超參數(shù)實現(xiàn)了與FP32幾乎相同的精度。
總結
YOLOv5的精度和速度如下:
文章來源:http://www.zghlxwxcb.cn/news/detail-816463.html
ps:YOLOv5n6等后綴的6代表6.0版本,是在默認版本(5.0)上的更新,區(qū)別如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-816463.html
- 使用了更大的輸入,提高了對小物體的檢測精度
- backbone中:5.0中是SPP+CSP2_X的結構,而在6.0版本是CSP1_X+SPPF結構
- CBL修改為CBS
![]()
到了這里,關于目標檢測-One Stage-YOLOv5的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!