天天看點

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

注:此文為閱讀筆記,參考了很多論文,部落格,如有侵權請聯系,我附上原出處。

文章目錄

  • YOLO V1
    • 創新點
    • grid cell
    • 置信度
    • 例子
    • 網絡架構
      • Backbone
      • Neck
      • Head
    • 損失函數
    • 優缺點
  • YOLO V2
    • 創新點
    • Batch Normalization 批量标準化
    • High Resolution Classifier 高分辨率分類器
    • Convolutional With Anchor Boxes 引入Anchor Boxes
    • DimensionCluster 次元聚類
    • Direct Location Prediction 直接位置預測
    • Fine-Grained Features 細粒度特征
    • Multi-Scale Training 多尺度訓練
    • 給Anchor打label
    • 網絡架構
      • Backbone
      • Neck
      • Head
    • 損失函數
    • 優缺點
  • YOLO V3
    • 創新點
    • Multiscale detection 多尺度檢測
    • Bounding Box 預測框感受野
    • 網絡架構
      • Backbone
      • Neck
      • Head
    • 損失函數
    • 優缺點
  • YOLO V4
    • 創新點
    • 常用的技巧方法
    • V4 采用的方法
      • CutMix Mosaic資料增強
      • Dropblock
      • Class label smoothing 類标簽平滑
      • CIOU
      • Self-Adversarial Training自對抗訓練
      • 最優超參數
      • SAM(Spatial Attention Module)改進
      • Cross mini -Batch Normalization CmBN
    • 網絡架構
      • Backbone
        • CSPnet
      • Neck
        • Spatial Pyramid Pooling SPP
        • PANet
      • Head
    • 損失函數
    • 大量實驗組合
    • 優缺點
  • YOLO V5
    • Auto Learning Bounding Box Anchors-自适應錨定框
    • 網絡架構
      • Backbone
      • Neck
      • Head
    • 優缺點
  • 參考部落格連結:

YOLO V1

You Only Look Once:Unified, Real-Time Object Detection

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

這篇文章發表在CVPR 2016,來自華盛頓大學、艾倫人工智能研究院和FAIR,作者有Ross Girshick大神。此篇文章算是一階段目标檢測方法的開山之作,後續也産生了一系列工作。

創新點

目标檢測問題

許多目标檢測算法通常将此問題變成分類問題,之前的一些方法使用sliding window或者region proposal,這些方法通常在整個圖像中選取一些子區域,對于這些子區域進行分類,上述方法比較慢、也比較難地去優化。

YOLO将目标檢測問題轉換為簡單的回歸問題,直接從像素回歸得到bounding box坐标和分類機率。由于使用單個神經網絡就能夠實作,是以可以端到端地優化。

在整圖上進行訓練并且直接優化,具有以下好處:

1.非常快。把檢測問題模組化成一個回歸問題就無需複雜的pipeline。每秒45幀(更快的版本每秒150幀)。

2.YOLO在預測時可以推理整張圖檔。也就是說,它能夠在訓練和預測階段看到整幅圖的資訊,即包含類别及其外觀的語義資訊。這是和滑動窗方法不一樣的地方。Fast RCNN會把背景誤判為目标因為他不能看到大的場景資訊。YOLO的background error比Fast RCNN少了一半。

3.YOLO能夠學習到目标更加泛化的特征。當它被應用到新的場景或者輸入不尋常的圖像時,性能不會下降得很厲害。

grid cell

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

1.将圖像resize到448 * 448作為神經網絡的輸入。

2.運作神經網絡,得到一些bounding box坐标、box中包含物體的置信度和class probabilities。

3.進行非極大值抑制,篩選Boxes。

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

将一幅圖像分成SxS個網格(grid cell),

如果某個object的中心 落在這個網格中,則這個網格就負責預測這個object。

每個網格預測出B個bounding boxes和分數(置信度)。

bounding boxes隻預測框中有沒有物體(confidence資訊)

cell單元預測物體的類别( class資訊)

置信度

定義置信度為:

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

當b-box包含目标時,Pr(Object)為1;不包含目标時,Pr(Object)為0.

如果包含目标,則置信度為預測的box和ground truth之間的IOU;若不包含這個目标,則置信度為0。

每個bounding box包含5個預測:x,y,w,h,confidence。

(x,y)是box的中心相對于網格的坐标。注意,(x,y)是相對于每個單元格左上角坐标點的偏移值,機關是相對于單元格的大小。而邊界框的寬高也是相對于整張圖檔的寬高的比例。

這四個值的大小應該都在0-1之間,歸一化更容易收斂。

每個網格cell也預測了C個條件類别機率,Pr(Classi|Object) .一個網格cell不論有多少個Bbox,都隻預測一組(C個)條件類别機率。

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

例子

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:
YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

S ×S grid and for each grid cell

predicts B bounding boxes,

confidence for those boxes,

x, y, w, h, and confidence

and C class probabilities

7×7大小的網格 、一個網格預測2個 bounding box、一共有20種類别

YOLO中,VOC資料集上使用S=7,B=2,C=20最後的預測是一個7×7×(2*5+20)的張量。

網絡架構

YOLO V1的網絡架構

Backbone

網絡架構受到GoogLeNet圖像分類模型的啟發。 在ImageNet分類任務上 以一半的分辨率(224x224的輸入圖像)預訓練卷積層,然後将分辨率加倍來進行檢測。檢測任務需要精細粒度的視覺資訊,是以在檢測的時候把網絡的輸入分辨率從224×224變成448×448。

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

網絡的初始卷積層從圖像中提取特征,而全連接配接層預測輸出機率和坐标。

由圖可見,其進行了二十多次卷積還有四次最大池化,其中3x3卷積用于提取特征,1x1卷積用于壓縮特征,最後将圖像壓縮到7x7xfilter的大小,相當于将整個圖像劃分為7x7的網格,每個網格負責自己這一塊區域的目标檢測。

Neck

Head

FC-——》7x7x30

整個網絡最後利用全連接配接層使其結果的size為(7x7x30),其中7x7代表的是7x7的網格,30前20個代表的是預測的種類,後10代表兩個預測框及 其xywh與置信度(5x2)。

為了防止過拟合,在第一個全連接配接層後面接了一個 ratio=0.5 的 Dropout 層。

最後一層預測類别機率和bound ing box的坐标。

在最後一層使用一個線性激活函數,其他層都使用leaky ReLU線性激活函數:

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

損失函數

YOLO V1的損失函數

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:
YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

優缺點

YOLO V1的優點:

1.非常快。把目标檢測問題轉換成一個回歸問題。使用單個神經網絡,處理速度為每秒45幀(更快的版本每秒150幀)。

2.YOLO能夠在訓練和預測階段看到整幅圖的資訊,即包含類别及其外觀的語義資訊。這與RCNN中的滑動視窗不同,例如因為不能看到大的場景資訊,而把背景當作目标對象。YOLO的background error比Fast RCNN少了一半。

3.YOLO能夠學習到目标更加泛化的特征。當它被應用到新的場景或者輸入不尋常的圖像時,性能不會下降得很厲害。

YOLO V1的缺點:

1、YOLO的物體檢測精度低于FastRCNN系列的算法。

2、YOLO容易産生物體的定位錯誤,例如互相靠的很近的物體。

3、YOLO對小物體的檢測效果不好(尤其是密集的小物體,因為一個cell隻能預測2個物體)。

4、YOLO 方法模型訓練依賴于物體識别标注資料,是以,對于非正常的物體形狀或比例,YOLO 的檢測效果并不理想。同一類物體出現的新的不常見的長寬比和其他情況時,泛化能力偏弱。

5、YOLO 采用了多個下采樣層,網絡學到的物體特征并不精細,是以也會影響檢測效果。

6、YOLO 的損失函數中,大物體 IOU 誤差和小物體 IOU 誤差對網絡訓練中 loss 貢獻值接近(雖然采用求平方根方式,但沒有根本解決問題)。是以,對于小物體,小的 IOU 誤差也會對網絡優化過程造成很大的影響,進而降低了物體檢測的定位準确性。

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:
YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

YOLO V2

YOLO9000:Better, Faster, Stronger

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

創新點

優化目标:改善recall,提升定位的準确度,同時保持分類的準确度。

1.Better:從精度方面進行改進,讓效果從YOLOv1的63.4%mAP上升到YOLOv2的78.6%mAP,基本和FasterR-CNN以及SSD持平。

2.Faster:網絡結構方面做了更改,讓模型速度更快;

3.Stronger:對損失函數做一個變化;

YOLO V2 的改進:

Batch Normalization 批量标準化

可以參考:https://www.cnblogs.com/shine-lee/p/11989612.html

去掉了Dropout,在每個卷積層後面加了BN層,模型收斂速度有了很大提升,且不會過拟合。

BN的優點:

BN層讓損失函數更平滑;

BN更有利于梯度下降

效果:mAP提升了2%

High Resolution Classifier 高分辨率分類器

在YOLO V2中自定義了darknet分類網絡,将圖像的輸入分辨率更改為448*448,然後在ImageNet上訓練10輪,訓練後的網絡可以适應高分辨率的輸入;應用到檢測的時候,對檢測部分網絡進行微調.

預訓練尺寸從224×224提高到448×448

效果:mAP提升了4%.

Convolutional With Anchor Boxes 引入Anchor Boxes

YOLO V1是利用全連接配接層直接預測bounding box的坐标。

YOLO V2則借鑒了Faster R-CNN的思想,引入anchor。

YOLO V2移除了全連接配接層并且使用anchor box來預測邊界框。

1.首先,去掉了一個池化層來使得網絡卷積層的輸出具有更高的分辨率。

2.其次,因為YOLOv2模型下采樣的總步長為32,調整網絡輸入為416×416,(416/32=13)最終得到的特征圖大小為13×13,次元是奇數,這樣特征圖恰好隻有一個中心位置。對于一些大物體,它們中心點往往落入圖檔中心位置,此時使用特征圖的一個中心點去預測這些物體的邊界框相對容易些。

3.另外,使用anchor box之後,由anchor box同時預測 類别和坐标。

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

DimensionCluster 次元聚類

anchor boxes的次元(個數,寬,高)通常需要通過手動給定,然後通過網絡學習轉換系數,最終得到準确的b-box建議框;如果可以通過次元聚類一開始就給定更具有代表性的boxes次元,那麼網絡就會更容易預測位置。

使用統計學習中的K-means聚類方法,通過對資料集中的ground truth box做聚類,找到ground truth box的統計規律。以聚類個數k為anchor boxs個數,以k個聚類中心box的寬高次元為anchor box的次元。

為了避免歐式距離對于大、小框的敏感程度,采用IoU作為K-means聚類的距離公式。

公式:

d(box,centroid)=1−IOU(box,centroid)

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

如圖,平衡複雜度和IOU之後,最終得到k值為5,意味着作者選擇了5種大小的box次元來進行定位預測,這與手動精選的box次元不同。

COCO: (0.57273, 0.677385), (1.87446, 2.06253), (3.33843, 5.47434), (7.88282, 3.52778), (9.77052, 9.16828)

VOC: (1.3221, 1.73145), (3.19275, 4.00944), (5.05587, 8.09892), (9.47112, 4.84053), (11.2364, 10.0071)

注意,這個寬高是在Grid的尺度下的,不是在原圖尺度上,在原圖尺度上的話還要乘以步長32。

效果:

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

Direct Location Prediction 直接位置預測

引入anchor box的,導緻模型不穩定,尤其是在訓練剛開始的時候。作者認為這種不穩定主要來自預測box的中心坐标(x,y)值。

在基于region proposal的目标檢測算法中,是通過預測tx和ty來得到(x,y)值,也就是預測的是offsets。

這個公式是無限制的,預測的邊界框很容易向任何方向偏移。是以,每個位置預測的邊界框可以落在圖檔任何位置,範圍太大,反向傳播的就會很慢,這樣就會導緻模型收斂比較慢,在訓練時需要很長時間來預測出正确的offsets。

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

假設一個網格單元對于圖檔左上角的偏移量是cx,cy,Bounding Boxes Prior的寬度和高度是pw,ph。

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:
YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

YOLO V2中沒有采用這種預測方式,而是沿用了YOLO V1的方法,就是預測邊界框中心點相對于對應cell左上角位置的相對偏移值。

網絡在每一個網格單元cell有5個anchor box來預測5個bounding box,每個bounding box預測得到5個值。分别為:tx、ty、tw、th和to(類似YOLO V1的confidence)

為了将bounding box的中心點限制在目前cell中,使用sigmoid函數将tx、ty歸一化處理,将值限制在0~1,這使得模型訓練更穩定。

通過DimensionCluster+DirectLocationPrediction的改進

mAP提升5%。

Fine-Grained Features 細粒度特征

在FasterR-CNN和SSD中,通過不同的方式獲得了多尺度的适應性,FasterR-CNN中使用不同的scale,SSD直接從不同大小的feature map上來提取ROI區域。

為了提升對小尺度物體的檢測,在YOLOv2中加入了轉移層(passthroughlayer),這個層次的功能就是将淺層特征圖(26×26×256)連接配接到深層特征圖(13×13×512)中,類似ResNet的殘差網絡結構。

對于26×26×512的特征圖按行、按列隔一個進行采樣,産生4個13×13×512次元的新特征圖,然後concat合并得到13×13×2048的特征圖,最後将其連接配接到深層特征圖上。相當于做了特征融合,對于小目标檢測比較有效。

即如下圖這樣提取特征,範圍更大,最後再融合到一起

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

效果:mAP提升了1%

Multi-Scale Training 多尺度訓練

每經過10次訓練(10 epoch),就會随機選擇新的圖檔尺寸進行訓練。YOLO網絡使用的降采樣參數為32,那麼就使用32的倍數進行尺度池化{320,352,…,608}。最終最小的尺寸為320 * 320,最大的尺寸為608 * 608。接着按照輸入尺寸調整網絡進行訓練。

這種機制使得網絡可以更好地預測不同尺寸的圖檔,意味着同一個網絡可以進行不同分辨率的檢測任務,在小尺寸圖檔上YOLO V2運作更快,在速度和精度上達到了平衡。

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:
YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

給Anchor打label

首先,對于一個物體的bbox,我們得到它的中心,看這個中心落在grid中的哪一個cell,那麼這個cell就負責預測這個物體。但是,需要注意的是,每個cell中實際上有5個anchor,并不是每個anchor的會預測這個物體,我們隻會選擇一個長寬和這個bbox最比對的anchor來負責預測這個物體。

那麼什麼叫長寬最為比對?這個實際上就是将anchor和bbox都移動到了圖像左上角,然後去計算它們的iou,iou最大的就意味着是寬高最為比對,則這個anchor負責預測這個物體,如下圖所示。

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

這種做法隻是為了友善處理,anchor和bbox不轉移到圖像左上角的做法也是可行的。

網絡架構

Backbone

為了改善YOLO模型的檢測速度,YOLOv2在Faster方面也做了一些改進。

大多數神經網絡依賴于VGGNet來提取特征,VGG-16特征提取功能是非常強大的,但是複雜度有點高,對于224*224的圖像,前向計算高達306.9億次浮點數運算。

YOLOv2中使用基于GoogleNet的定制網絡DarkNet,一次前向傳播僅需要85.2億次浮點數計算。精度相比來降低2%(88%/90%)

網絡結構小巧,但是性能強悍

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

看下圖或許更清晰(一個大佬畫的)

https://blog.csdn.net/weixin_44791964/article/details/102646387

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

YOLO V2使用了一個新的分類網絡作為特征提取部分Darknet19,網絡使用了較多的3 x 3卷積核,在每一次池化操作後把通道數翻倍。借鑒了network in network的思想,把1 x 1的卷積核置于3 x 3的卷積核之間,用來壓縮特征。使用batch normalization穩定模型訓練,加速收斂,正則化模型。

與此同時,其保留了一個shortcut用于存儲之前的特征。

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:
YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

Neck

Head

Conv——》13 * 13 * (85x5)

除去網絡結構的優化外,YOLO V2相比于YOLO V1加入了先驗框部分,可以看到最後輸出的conv_dec的shape為(13,13,425),其中13x13是把整個圖分為13x13的網格用于預測,425可以分解為(85x5)。

在85中,由于YOLO V2常用的是coco資料集,其中具有80個類,剩餘的5指的是x、y、w、h和其置信度。x5的5中,意味着預測結果包含5個框,分别對應5個先驗框。

損失函數

YOLO V2 的損失函數

yoloV1 僅有兩個box,但是編碼(預測)基于單元格,分類向量隻有一個,是以一個單元格隻能預測一個目标。而yoloV2每個單元格有5個anchor box, 且單元格編碼方式改變了,編碼基于單元格的anchor box,通過anchor box 預測目标類别,實作了一個單元格同時預測多個目标)

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:
YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:
YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

優缺點

優點:

1、相對于 yolo v1 最大的變化,是使用了anchor box。增加 anchor 準确率下降,但是召回率上升不少。

2、YOLO系列的優點,如快速,pipline簡單、通用性強。

缺點:

YOLO系列的普遍缺點:

1、識别物體位置精準性差。

2、召回率相比RCNN系列還是偏低。

YOLO V3

YOLOv3: An Incremental Improvement

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

創新點

在YOLOv3中借鑒了大量其它網絡結構的優點

其主要改進如下:

1.YOLOv3的改進主要是backbone網絡的提升,從v2的darknet-19到v3的deaknet-53。在v3中,還提供了輕量高速的網絡tiny-darknet;

2.借鑒FPN(特征金字塔)在不同scale的featuremap上提取特征資訊,然後做融合。相比于v2中僅僅通過多尺度圖像的訓練來講,v3對于小目标的檢測效果更好;

3.AnchorBoxes數目從v2中的5個提升到v3中的9個;

4.采用Logistic分類器替換Softmax分類器;因為softmax做分類器的話,它一次隻能分一個類别,無法針對一個單元格有多個物體,是以換成了logistic

5.Loss損失函數進行了改進;

Multiscale detection 多尺度檢測

借鑒特征金字塔

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

底層特征圖可能保留更多小目标的特征資訊

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

DBL:代碼中的Darknetconv2d_BN_Leaky,是yolo_v3的基本元件。就是卷積+BN+Leaky relu。

res n:n代表數字,有res1,res2, … ,res8等等,表示這個res_block裡含有多少個res_unit。

concat:張量拼接。将darknet中間層和後面的某一層的上采樣進行拼接。拼接的操作和殘差層add的操作是不一樣的,拼接會擴充張量的次元,而add隻是直接相加不會導緻張量次元的改變。

YOLO V3在3個尺度行進行檢測(預測的特征圖13×13, 26×26, 52×52)

yolo v3設定的是每個網格單元預測3個box,是以每個box需要有(x, y, w, h, confidence)五個基本參數,然後還要有80個類别的機率。是以3*(5 + 80) = 255。

Bounding Box 預測框感受野

特征圖中的每一個網格cell都會預測3個bounding box 。

bounding box 與anchor box的差別:

三次檢測,每次對應的感受野不同

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

32倍降采樣的感受野最大,适合檢測大的目标,是以在輸入為416×416時,為(116 ,90); (156 ,198); (373 ,326)。

16倍的感受野适合一般大小的物體,anchor box為(30,61); (62,45); (59,119)。

8倍的感受野最小,适合檢測小目标,是以anchor box為(10,13); (16,30); (33,23)。

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

是以當輸入為416×416時,實際總共有(52×52+26×26+13×13)×3=10647 個proposal box。

網絡架構

Backbone

Darknet53

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

包含53個卷積層

1、Darknet53具有一個重要特點是使用了殘差網絡Residual,Darknet53中的殘差卷積就是首先進行一次卷積核大小為3X3、步長為2的卷積,該卷積會壓縮輸入進來的特征層的寬和高,此時我們可以獲得一個特征層,我們将該特征層命名為layer。之後我們再對該特征層進行一次1X1的卷積和一次3X3的卷積,并把這個結果加上layer,此時我們便構成了殘差結構。通過不斷的1X1卷積和3X3卷積以及殘差邊的疊加,我們便大幅度的加深了網絡。 殘差網絡的特點是容易優化,并且能夠通過增加相當的深度來提高準确率。其内部的殘差塊使用了跳躍連接配接,緩解了在深度神經網絡中增加深度帶來的梯度消失問題。

Darknet53的每一個卷積部分使用了特有的DarknetConv2D結構,每一次卷積的時候進行l2正則化,完成卷積後進行BatchNormalization标準化與LeakyReLU。普通的ReLU是将所有的負值都設為零,Leaky ReLU則是給所有負值賦予一個非零斜率。以數學的方式我們可以表示為:

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

2、提取多特征層進行目标檢測,一共提取三個特征層,它的shape分别為(13,13,75),(26,26,75),(52,52,75)最後一個次元為75是因為該圖是基于voc資料集的,它的類為20種,YOLO V3隻有針對每一個特征層存在3個先驗框,是以最後次元為3x25。

3、采用反卷積UmSampling2d設計,逆卷積相對于卷積在神經網絡結構的正向和反向傳播中做相反的運算,其可以更多更好的提取出特征。

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

Neck

FPN

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

Head

對圖像特征進行預測,生成邊界框和并預測類别。

Head 主要用于最終檢測部分,它在特征圖上應用錨點框,并生成帶有類機率、對象得分和包圍框的最終輸出向量。

VOC資料集

Conv——》

13 * 13 * (25x3)

26 * 26 * (25x3)

52 * 52 *( 25x3)

COCO資料集

Conv——》

13 * 13 * (85x3)

26 * 26 * (85x3)

52 * 52 * (85x3)

YOLO V3在3個尺度行進行檢測(預測的特征圖13×13, 26×26, 52×52)

YOLO V3設定的是每個網格單元預測3個box,是以每個box需要有(x, y, w, h, confidence)五個基本參數,然後還要有類别的機率(其中COCO資料集有80個類别、VOC資料集有20個類别)。

不同縮放尺度的 Head 被用來檢測不同大小的物體,每個 Head 一共 (80個類 + 1個機率 + 4個坐标)* 3 錨點框,一共 255 個 channels。

損失函數

YOLO V3 的損失函數

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

隻有正樣本(物體)才參與分類,xywh的loss計算

優缺點

優點:

1、速度能達到 30 FPS,一般它比 R-CNN 快 1000 倍、比 Fast R-CNN 快 100 倍。

缺點:

YOLO系列的普遍缺點:

1、識别物體位置精準性差。

2、召回率相比RCNN系列還是偏低。

YOLO V4

YOLO v4: Optimal Speed and Accuracy of Object Detection

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

創新點

v4保留Darknet作為backbone,然後通過大量的實驗研究了衆多普适性算法對網絡性能的影響,然後找到了它們最優的組合。

(1)提出了一個高效且強大的目标檢測模型。任何人可以使用一個1080Ti或者2080Ti的GPU就可以訓練出一個快速并且高精度的目标檢測器。

(2)在檢測器訓練的過程中,測試了目标檢測中最高水準的Bag-of-Freebies和Bat-of-Specials方法。

(3)改進了最高水準的算法,使得它們更加高效并且适合于在一個GPU上進行訓練,比如CBN, PAN, SAM等。

Bag of freebies

pixel-wise調整

幾何畸變:Random Scaling、Random Cropping、Random Filpping、Random Rotating

光照變化:brightness、contrast、hue、saturation、noise

遮擋:

Random Erase、CutOut、Hide-and-Seek、Grid Mask、

正則:Dropout、DropConnect、DropBlock

多張圖檔進行增強

Mixup、CutMix

GAN

Style Transfer GAN

樣本據分布不均勻

兩階段:Online Hard Example Mining、Hard Negative Example Mining

一階段:Focal Loss

類别關聯度難以描述

Lable Smoothing、知識蒸餾

BBox回歸

IOU loss、DIOU loss、GIOU loss、CIOU loss

常用的技巧方法

Bag of specials

Plugin Model

提高感受野:SPP、RFB、ASPP

注意力機制:SE、SAM、

特征融合子產品:FPN、SFAM、ASFF、BiFPN

激活函數:ReLU、ReLU6、Swish、Mish

post processing method:

NMS、soft NMS、DIOU MNS

V4 采用的方法

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

CutMix Mosaic資料增強

CutMix資料增強方式利用兩張圖檔進行拼接。

可參考部落格:https://blog.csdn.net/weixin_38715903/article/details/103999227

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

YOLO V4的mosaic資料增強參考了CutMix資料增強方式。

但是mosaic利用了四張圖檔,根據論文所說其擁有一個巨大的優點是豐富檢測物體的背景!且在BN計算的時候一下子會計算四張圖檔的資料!

1、每次随機讀取四張圖檔。

2、分别對四張圖檔進行翻轉、縮放、色域變化等,并且按照四個方向位置擺好。

3、進行圖檔的組合和框的組合

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

Dropblock

Dropout的主要問題就是随機drop特征,這一點在FC層是有效的,但在卷積層是無效的,因為卷積層的特征是空間相關的。當特征相關時,即使有dropout,資訊仍能傳送到下一層(去掉少量像素點并不妨礙我們了解圖檔含義),導緻過拟合。

在DropBlock中,特征在一個block中,例如一個feature map中的連續區域會一起被drop掉。當DropBlock抛棄掉相關區域的特征時,為了拟合資料網絡就不得不往别處看以尋找新的證據。

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

Class label smoothing 類标簽平滑

Class label smoothing(類标簽平滑)是一種正則化方法。如果神經網絡過度拟合和/或過度自信,我們都可以嘗試平滑标簽。也就是說在訓練時标簽可能存在錯誤,而我們可能“過分”相信訓練樣本的标簽,并且在某種程度上沒有審視了其他預測的複雜性。

是以為了避免過度相信,更合理的做法是對類标簽表示進行編碼,以便在一定程度上對不确定性進行評估。YOLO V4使用了類平滑,選擇模型的正确預測機率為0.9,例如[0,0,0,0.9,0…,0 ]。

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

從上圖看出,标簽平滑為最終的激活産生了更緊密的聚類和更大的類别間的分離,實作更好的泛化。

CIOU

參考部落格:目标檢測中的IoU、GIoU、DIoU與CIoU

具體公式在連結裡可以看到

IoU是比值的概念,對目标物體的scale是不敏感的。然而常用的BBox的回歸損失優化和IoU優化不是完全等價的,尋常的IoU無法直接優化沒有重疊的部分。

于是有人提出直接使用IOU作為回歸優化loss,CIOU是其中非常優秀的一種想法。

CIOU将目标與anchor之間的距離,重疊率、尺度以及懲罰項都考慮進去,使得目标框回歸變得更加穩定,不會像IoU和GIoU一樣出現訓練過程中發散等問題。而懲罰因子把預測框長寬比拟合目标框的長寬比考慮進去。

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

Self-Adversarial Training自對抗訓練

可參考部落格:對抗樣本和對抗訓練筆記------簡述

一種新的資料擴充技術,分兩階段:

第一階段,神經網絡先改變原始圖像而不是網絡權值,對自身執行對抗性攻擊,改變原始圖像,進而造成圖像上沒有目标的假象;

第二階段,訓練神經網絡對修改後的圖像進行正常的目标檢測。

最優超參數

概念可以參考部落格:最優超參數

在應用遺傳算法去選擇最優的超參數

可以參考我以前做過的類似的方法:基于遺傳算法的BP神經網絡的股票預測模型_matlab實作

SAM(Spatial Attention Module)改進

将SAM從空間上的attention修改為點上的attention,并将PAN的short-cut連接配接改為拼接,如下圖:

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

Cross mini -Batch Normalization CmBN

BN是對目前mini-batch進行歸一化,CBN是對目前以及目前往前數3個mini-batch的結果進行歸一化,而CmBN則是僅僅在這個Batch中進行累積。

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

網絡架構

Backbone

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

改進

a).主幹特征提取網絡:

DarkNet53 => CSPDarkNet53

b).激活函數:使用Mish激活函數

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

CSPnet

CSPnet結構并不算複雜,就是将原來的殘差塊的堆疊進行了一個拆分,拆成左右兩部分:

主幹部分繼續進行原來的殘差塊的堆疊;

另一部分則像一個殘差邊一樣,經過少量處理直接連接配接到最後。

是以可以認為CSP中存在一個大的殘差邊。

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

Neck

Spatial Pyramid Pooling SPP

可參考部落格:SPP(Spatial Pyramid Pooling)詳解

1、SPP結構參雜在對CSPdarknet53的最後一個特征層的卷積裡,在對CSPdarknet53的最後一個特征層進行三次DarknetConv2D_BN_Leaky卷積後,分别利用四個不同尺度的最大池化進行處理,最大池化的池化核大小分别為13x13、9x9、5x5、1x1(1x1即無處理)

其可以它能夠極大地增加感受野,分離出最顯著的上下文特征。

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

PANet

PANet 基于 Mask R-CNN 和 FPN 架構,同時加強了資訊傳播。

該網絡的特征提取器采用了一種新的增強自下向上路徑的 FPN 結構,改善了低層特征的傳播。

第三條通路的每個階段都将前一階段的特征作為輸入,并用 3*3 卷積層處理他們,輸出通過橫向連接配接被添加到自上而下通路的同一階段 feature map 中,這些特征圖為下一階段提供資訊。

使用自适應特征池化(Adaptive feature pooling)來恢複每個候選區域和所有特征層次之間被破壞的資訊路徑,聚合每個特征層次上的每個候選區域,避免被任意配置設定。

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

上圖為原始的PANet的結構,可以看出來其具有一個非常重要的特點就是特征的反複提取。在(a)裡面是傳統的特征金字塔結構,在完成特征金字塔從下到上的特征提取後,還需要實作(b)中從上到下的特征提取。

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:
YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

而在YOLO V4當中,其主要是在三個有效特征層上使用了PANet結構。

Head

同YOLO V3

損失函數

大量實驗組合

YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:
YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:
YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:
YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:
YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:
YOLO系列閱讀筆記V1 V2 V3 V4YOLO V1YOLO V2YOLO V3YOLO V4YOLO V5參考部落格連結:

優缺點

優點:

1、速度差不多與V3差别不大,采用各種調優手段使mAP提高。

YOLO V5

YOLO V5基本上在YOLO V3的結構上進行修改。

與YOLO V4類似的方法這裡不在贅述。

可以參考部落格:

Yolov5 系列1— Yolo發展史以及Yolov5模型詳解

一文讀懂YOLO V5 與 YOLO V4

Auto Learning Bounding Box Anchors-自适應錨定框

在YOLO V3和YOLO V4中是采用 kmean 和遺傳學習算法對自定義資料集進行分析,獲得适合自定義資料集中對象邊界框預測的預設錨定框。

在 YOLO V5中錨定框是基于訓練資料自動學習的。

網絡架構

Backbone

yolov4 和 yolov5 都使用 CSPDarknet 作為 backbone,從輸入圖像中提取豐富的資訊特征。

可以直接參考前面V4中提到的。

Neck

PaNet

可以直接參考前面V4中提到的。

Head

同YOLO V3 Head

優缺點

1、增加了正樣本:方法是領域的正樣本anchor比對政策

2、操參數優化政策

3、通過靈活的配置參數,提升整體性能

參考部落格連結:

https://blog.csdn.net/qq_36076110/article/details/105947444

https://blog.csdn.net/weixin_44791964/article/details/105310627

https://blog.csdn.net/weixin_44791964/article/details/102646387

https://zhuanlan.zhihu.com/p/161083602

https://blog.csdn.net/libo1004/article/details/110928070

https://blog.csdn.net/qq_29893385/article/details/81178261

繼續閱讀