国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

這篇具有很好參考價值的文章主要介紹了三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

YOLO的每個版本都是基于前一版本進(jìn)行更新,故需要先理解初始版本。

前言:評價指標(biāo)

(1)指標(biāo):IOU

三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

(2)指標(biāo):Precision(精度)、Recall(召回率)

三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

(3)指標(biāo):AP + mAP

mAP是綜合衡量Precision與Recall的一種指標(biāo)值,理論上mAP的最優(yōu)值=1。

舉例理解:在所有預(yù)測圖片中,取某一個類別的P-R曲線圖

  • P-R曲線圖:以Recall為橫軸,Precision為縱軸,并將Precision[0, 1]范圍內(nèi)的每個點(diǎn)對應(yīng)recall的值連接起來形成一條折線。如左圖的藍(lán)色曲線
    曲線特點(diǎn):隨著recall值增加,precision值會逐漸降低,最終在某個值附近上下波動。
  • AP(Average Precison)
    (1)以y = precision為平行線,從上向下,取P-R曲線圖在每個y值對應(yīng)的最大值,然后連接形成階梯狀曲線。如左圖的紅色曲線
    (2)階梯曲線與 x 軸圍成的面積之和就是AP值(A1+A2+A3+A4=AP),如右圖的四個長方形。其中:1/2/3/4表示在四個不同的準(zhǔn)確度下。
  • mAP(mean Average Precision): 對所有類別對應(yīng)的AP值進(jìn)行求和取均值,就得到整個數(shù)據(jù)集上的mAP。

三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

一、開山之作:yolov1

論文地址:You Only Look Once: Unified, Real-Time Object Detection
官方代碼:https://github.com/pjreddie/darknet

(1.1)簡介

yolov之前,雙階段(two-stage)的R-CNN系列算法在目標(biāo)檢測領(lǐng)域獨(dú)占鰲頭。先利用RPN(Region Proposal CNN)基于候選框提取的CNN網(wǎng)絡(luò)生成感興趣區(qū)域,再對該區(qū)域進(jìn)行分類與位置回歸。

  • 優(yōu)缺點(diǎn):提升了精度,但限制了檢測速度。

2016年,單階段(one-stage)的YOLO(You Only Look Once) 初出茅廬。利用CNN卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行特征提取,并識別種類和位置。

  • 優(yōu)缺點(diǎn):檢測速度很快,但精度明顯下降。

三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7
三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7
備注FPS是指視頻每秒傳輸?shù)膸瑪?shù)。例如:FPS=45 表示為45幀/秒。幀數(shù)愈多,所顯示的動作就會越流暢。

?? yolo核心思想:把目標(biāo)檢測轉(zhuǎn)變成一個回歸問題。將整個圖像作為網(wǎng)絡(luò)的輸入,僅僅經(jīng)過一個神經(jīng)網(wǎng)絡(luò),得到邊界框的位置及其所屬的類別。

(1.2)網(wǎng)絡(luò)模型

輸入圖像尺寸:448×448(固定值,與全連接層的輸出大小有關(guān)),經(jīng)過24個卷積與2個全連接層后,最后輸出的特征圖為7x7x30。

  • 3x3的卷積后接1x1卷積,既降低了計(jì)算量,也提升了模型的非線性能力。
  • 除最后一層使用線性激活函數(shù)外,其余層都使用Leaky ReLU激活函數(shù)。
  • 在訓(xùn)練中使用Dropout數(shù)據(jù)增強(qiáng)的方法來防止過擬合。

訓(xùn)練時的圖像尺寸:224×224;測試時的圖像尺寸:448×448。 原因:224×224×3 相比448×448×3相差四倍,其像素點(diǎn)大幅度降低,減少對計(jì)算機(jī)的性能要求。
三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

1.2.1、最大創(chuàng)新:7x7x30特征圖

在整張圖中,共預(yù)測7x7x2=98個邊框,每個邊框的大小與位置都不相同。

  • 分類類別:由于PASCAL VOC數(shù)據(jù)集共有20個物體類別,因此預(yù)測的每個邊框都會分別得到20個類別的概率值。
  • 置信度(confidence):表示當(dāng)前網(wǎng)格是否包含目標(biāo)物體(前景、背景),占比越多值越大。兩個邊框得到2(1 + 1)個置信度預(yù)測值。
  • 邊框位置(x, y, w, h):每個邊框需要預(yù)測四個值:中心坐標(biāo)(x,y)、寬w、高h(yuǎn)。兩個邊框得到8(4 + 4)個預(yù)測值。

將輸入圖像劃分為7x7的網(wǎng)格,每個網(wǎng)格預(yù)測2個邊框(bounding box),每個邊框得到五個值(x,y,w,h,confidence)。論文采用20分類,故最后得到通道數(shù)為2*5+20=30,代表每個網(wǎng)格預(yù)測30個特征值。

三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

1.2.2、連續(xù)使用兩個全連接層的作用

第一個全連接層作用:將卷積得到的分布式特征映射到樣本標(biāo)記空間。即把該輸入圖像的所有卷積特征整合到一起。
第二個全連接層作用:將所有神經(jīng)元得到的卷積特征進(jìn)行維度轉(zhuǎn)換,最后得到與目標(biāo)檢測網(wǎng)絡(luò)輸出維度相同的維度。
三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7
【小問題思考】兩個全連接層連用 1x1卷積作用

(1.3)損失函數(shù)(位置誤差 + 置信度誤差obj + 置信度誤差noobj + 分類誤差)

通過卷積神經(jīng)網(wǎng)絡(luò)得到每個邊框的預(yù)測值后,需要確定每個邊框?qū)?yīng)的是前景框(真實(shí)物體)還是背景框(無關(guān)物體),即區(qū)分正樣本、負(fù)樣本。

  • 正樣本:將與真實(shí)物體對應(yīng)IoU最大值的邊框設(shè)為正樣本,每個邊框的置信度都為1。
  • 負(fù)樣本:其余邊框?yàn)樨?fù)樣本,置信度全為0。備注:負(fù)樣本沒有類別損失與邊框位置損失,只有置信度損失。

三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7
損失函數(shù)由 4 個部分組成,均使用均方差損失。參數(shù)如下:共有 S2 個區(qū)域(7x7=49),B表示每個網(wǎng)格有2個邊框,obj表示對應(yīng)真實(shí)物體,noobj表示沒有對應(yīng)真實(shí)物體。

  • 采用NMS非極大值抑制,提取每個網(wǎng)格預(yù)測的兩個邊框中,IoU最大的邊框
    • (1)位置誤差:計(jì)算邊框的預(yù)測值與真實(shí)值的位置誤差。
      前一個部分計(jì)算正樣中心點(diǎn)坐標(biāo)的損失,前一個部分計(jì)算正樣本寬和高的損失。
      其中:λcoord用于調(diào)整位置誤差的權(quán)重。由于不同物體的尺寸大小對寬高差值影響極大,因此對w和h進(jìn)行平方根處理,降低對物體尺度的敏感度,強(qiáng)化小物體的損失權(quán)重。
    • (2)置信度誤差(obj):前景誤差:計(jì)算邊框與正樣本的誤差。
      若邊框的IoU大于置信度閾值,則該邊界框?qū)儆谇熬?/font>。若存在多個滿足要求的邊框,則進(jìn)行非極大值抑制。我們希望前景框的誤差趨近于1。
    • (3)置信度誤差(noobj):背景誤差:計(jì)算邊框與負(fù)樣本的誤差。
      若邊框的IoU小于置信度閾值或IoU=0,則該邊界框?qū)儆诒尘?/font>。我們希望背景框的誤差趨近于0。
      其中:λnoobj用于調(diào)整負(fù)樣本置信度損失的權(quán)重(默認(rèn)為0.5)。由于背景框的數(shù)量遠(yuǎn)遠(yuǎn)大于前景框,故對背景框誤差設(shè)置閾值(如:0.1),降低背景框誤差對損失函數(shù)的影響。
    • (4)分類誤差:計(jì)算每個邊框得到的20個分類概率值與正樣本的誤差。

(1.4)NMS非極大值抑制

非極大值抑制可以用來修正多重檢測目標(biāo),能增加2~3%的mAP。
即在檢測結(jié)果中,若存在多個檢測框的IoU大于置信度閾值,則通過NMS只提取其中最大IoU值對應(yīng)的一個框。如下圖:五個框中只取最大值(置信度=0.98)的預(yù)測框。
三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

(1.5)性能表現(xiàn)

優(yōu)點(diǎn)

  • (1)YOLO檢測速度非??臁?
    • 標(biāo)準(zhǔn)版本:可以每秒處理 45 幀圖像;
    • 極速版本:可以每秒處理 150 幀圖像,完全滿足視頻的實(shí)時檢測要求;
    • 欠實(shí)時系統(tǒng):在保證準(zhǔn)確率的情況下,速度也快于其他方法。
  • (2)YOLO 實(shí)時檢測的平均精度是其他實(shí)時監(jiān)測系統(tǒng)的兩倍。
  • (3)遷移能力強(qiáng),能運(yùn)用到其他的新的領(lǐng)域(比如:藝術(shù)品目標(biāo)檢測)。

缺點(diǎn)

  • (1)對于小目標(biāo)以及重疊目標(biāo),檢測效果不好
  • (2)由于沒有類似于Anchor的先驗(yàn)框,對于新目標(biāo)或?qū)捀弑壤怀R姷哪繕?biāo),檢測效果不好
  • (2)在損失函數(shù)中,大目標(biāo)的損失比小目標(biāo)大,大目標(biāo)與小目標(biāo)的位置誤差的損失權(quán)重相同,導(dǎo)致目標(biāo)定位不準(zhǔn)確。

二、更快更強(qiáng):yolov2

論文地址:YOLO9000: Better, Faster, Stronger
官方代碼:http://pjreddie.com/darknet/yolo/

2017年,提出了yolov2和yolo9000,yolo9000能夠?qū)崟r檢測超過9000種物體,主要檢測網(wǎng)絡(luò)還是yolov2。

  • yolov2的核心:主要解決yolov1召回率偏低以及定位精度不足的問題,但整體網(wǎng)絡(luò)架構(gòu)沒有改變。
  • yolov2的特點(diǎn):相比其它檢測器,速度更快、精度更高、可以適應(yīng)多種尺寸的輸入圖像。

主要區(qū)別:
(1)yolov1是利用全連接層直接預(yù)測Bounding Box的坐標(biāo)。yolov2借鑒了Faster R-CNN的思想,引入Anchor機(jī)制,并利用K-means聚類的方法在訓(xùn)練集中聚類計(jì)算出更好的Anchor模板,大大提高了算法的召回率;
(2)同時結(jié)合圖像細(xì)粒度特征,將淺層特征與深層特征相連,有助于對小尺寸目標(biāo)的檢測。

(2.1)性能表現(xiàn)

yolov2相比v1提出了很多改進(jìn)措施,隨著添加每一步改進(jìn),mAP值持續(xù)上升。三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

(2.2)網(wǎng)絡(luò)模型(Darknet-19)

Darknet-19采用了19個卷積層,5個池化層。

  • (1)取消yolov1的兩個全連接層。
    yolov1基于全連接層直接預(yù)測 Bounding Boxes 的坐標(biāo)值。
    yolov2采用 Faster R-CNN 的方法,只用卷積層與 RPN(Region Proposal Network )來預(yù)測 Anchor Box 偏移量與置信度,而不是直接預(yù)測坐標(biāo)值
  • (2)添加了五個最大池化層(2的5次方)。
    最終輸出圖像尺寸:由輸入圖像(h,w)轉(zhuǎn)換為(h / 32,w / 32)。
  • (3)輸入圖像尺寸:由 yolov1 的 448×448 變?yōu)?yolov2 的 416×416。
    備注:(416/32=13、448/32=14)。因?yàn)槲覀兿M詈蟮玫降氖瞧鏀?shù)值,有實(shí)際的中心點(diǎn)。最終網(wǎng)格尺寸為13×13,與yolov1的7×7相比,可以預(yù)測更多的先驗(yàn)框。
  • (4)基于VGG的思想,大部分的卷積核都是3×3,一方面權(quán)重參數(shù)少,一方面感受野比較大;且采用降維的思想,將1×1的卷積核置于3×3之間,在保持整體網(wǎng)絡(luò)結(jié)構(gòu)的同時減少權(quán)重參數(shù)。并且每次池化后,下一層卷積核的通道數(shù) = 池化輸出的通道 × 2。
  • (5)在網(wǎng)絡(luò)模型的最后,增加了一個全局平均池化層。
    三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

Darknet-19 與 yolov1、VGG16網(wǎng)絡(luò)的性能對比

  • (1)VGG-16: 大多數(shù)檢測網(wǎng)絡(luò)框架都是以VGG-16作為基礎(chǔ)特征提取器。準(zhǔn)確率高,但計(jì)算復(fù)雜度大,所以速度相對較慢。因此,YOLOv2的網(wǎng)絡(luò)結(jié)構(gòu)基于該方面進(jìn)行改進(jìn)。
  • (2)yolov1: 基于GoogLeNet的自定義網(wǎng)絡(luò),比VGG-16的速度快,但是精度稍不如VGG-16。
  • (3)Darknet-19
    • 速度方面:處理一張圖片僅需要55.8億次運(yùn)算,相比于VGG的306.9億次,速度快了近6倍。
    • 精度方面:在ImageNet上的測試精度為:top1準(zhǔn)確率為72.9%,top5準(zhǔn)確率為91.2%。

(2.3)改進(jìn)之處

(2.3.1)加入批標(biāo)準(zhǔn)化(Batch Normalization,BN)

最終約提升2%的mAP。
具體操作在每一個卷積層后面都加入BN,對數(shù)據(jù)進(jìn)行預(yù)處理操作(如:統(tǒng)一格式、均衡化、去噪等)。
優(yōu)點(diǎn):解決梯度消失和爆炸問題,起到一定的正則化效果(yolov2不再使用dropout),獲得更好的收斂速度。

(2.3.2)使用高分辨率圖像,微調(diào)分類模型。

最終約提升4%的mAP。
背景:yolov1訓(xùn)練時的分辨率:224×224;測試時:448×448。
具體操作:yolov2保持yolov1的操作不變,但在原訓(xùn)練的基礎(chǔ)上又加上了(10個epoch)的448×448高分辨率樣本進(jìn)行微調(diào),使網(wǎng)絡(luò)特征逐漸適應(yīng) 448×448 的分辨率;然后再使用 448×448 的樣本進(jìn)行測試,緩解了分辨率突然切換造成的影響。

(2.3.3)聚類提取先驗(yàn)框(Anchor Box)

最終約提升7%的recall達(dá)到88%,但降低了0.3%的mAP。
(1)?? yolov1邊界框都是手工設(shè)定的,通過直接對邊界框的(x,y,w,h)位置進(jìn)行預(yù)測,方法簡單但訓(xùn)練困難,很難收斂。
(2)?? Faster R-CNN共有9種先驗(yàn)框:分三個不同的scale(大中?。?,每個scale的(h,w)比例分為:1:1、1:2、2:1。
三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7
(3)?? yolov2引入Anchor先驗(yàn)框機(jī)制 。但由于Faster R-CNN中先驗(yàn)框的大小和比例是按經(jīng)驗(yàn)設(shè)定的,不具有很好的代表性。故yolov2對訓(xùn)練集中所有標(biāo)注的邊界框先進(jìn)行聚類分析(比如:5類),然后獲取每一類的中心值即實(shí)際的(w,h)比值作為先驗(yàn)框。該值與真實(shí)值更接近,使得網(wǎng)絡(luò)在訓(xùn)練時更容易收斂。

備注1:yolov1將圖像劃分為7×7個網(wǎng)格,每個網(wǎng)格grid只預(yù)測2個邊界框,共7×7×2=98個。
備注2:yolov2將圖像劃分為13×13個網(wǎng)格,每個網(wǎng)格grid只預(yù)測5個邊界框,共13×13×5=845個。其中:在Faster R-CNN的9種先驗(yàn)框基礎(chǔ)上,將所有的邊界框13×13×9=1521進(jìn)行K-means聚類,最終選擇最優(yōu)聚類參數(shù):k = 5。

基于自定義距離公式的K-means聚類方法
傳統(tǒng)K-means聚類方法使用標(biāo)準(zhǔn)的歐氏距離,將導(dǎo)致大的box會比小的box產(chǎn)生更多的誤差。而yolo的目的是使得先驗(yàn)框與真實(shí)框有更大的IOU值,故自定義距離公式

距離公式:計(jì)算每一個類別的中心值對應(yīng)的先驗(yàn)框centroids與真實(shí)框box的距離。
如下圖:IOU=(先驗(yàn)框與真實(shí)框的交集)除以(先驗(yàn)框與真實(shí)框的并集)。IOU越大,越相關(guān),則距離越小;反之亦然。備注:數(shù)據(jù)均已采用批標(biāo)準(zhǔn)化處理。
三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7
左圖: x軸表示Clusters聚類個數(shù)(K) 、y軸表示IOU均值、紫色與黑色分別表示兩個不同的數(shù)據(jù)集(形狀相似)。
結(jié)論:在綜合考慮精確度和運(yùn)算速度后,yolov2最終取k=5個先驗(yàn)框。
右圖:k=5個先驗(yàn)框的圖形化顯示。

(2.3.4)相對偏移量計(jì)算 —— 在當(dāng)前網(wǎng)格中進(jìn)行相對位置的微調(diào)

yolov1:在當(dāng)前先驗(yàn)框中,進(jìn)行相對位置的微調(diào)。

  • 詳細(xì)過程:已知先驗(yàn)框位置為(x, y, w, h),現(xiàn)在得到的預(yù)測邊界框的偏移量為(tx, ty, tw, th),即系統(tǒng)判定需要在先驗(yàn)框位置的基礎(chǔ)上進(jìn)行相對位置的偏移,進(jìn)而可以得到更真實(shí)的位置。故需要將預(yù)測的偏移量加到先驗(yàn)框中(x+tx, y+ty, w+tw, h+th)。
  • 問題:由于模型剛開始訓(xùn)練時,網(wǎng)絡(luò)參數(shù)都是隨機(jī)初始化,雖然進(jìn)行了批標(biāo)準(zhǔn)化但是參數(shù)的基數(shù)比較大,將導(dǎo)致預(yù)測的邊界框加上偏移量之后到處亂飄。

yolov2:在當(dāng)前網(wǎng)格中,進(jìn)行相對位置的微調(diào)。
圖中參數(shù)的詳細(xì)說明如下:
(1)(Cx, Cy):表示當(dāng)前網(wǎng)格的左上角位置坐標(biāo)。
(2)(tx, ty, tw, th):表示預(yù)測結(jié)果在當(dāng)前網(wǎng)格相對位置的偏移量。
(3) σ(tx):表示對漂移量 tx 取sigmoid函數(shù),得到(0~1)之間的值。即把預(yù)測邊框的藍(lán)色中心點(diǎn)約束在藍(lán)色背景的網(wǎng)格內(nèi)。約束邊框位置使得模型更容易學(xué)習(xí),且預(yù)測更為穩(wěn)定。
(4)e的tw次方:由于預(yù)測結(jié)果取的log()對數(shù)值,故計(jì)算位置時需要反log進(jìn)行還原。
(5)(bx, by, bw, bh):表示當(dāng)前預(yù)測結(jié)果在特征圖位置(即預(yù)處理后得到的13×13網(wǎng)格)。
三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

(2.3.5)Fine-Grained Features(細(xì)粒度特性)—— 提高對小目標(biāo)的檢測能力

背景Faster R-CNN共有9種先驗(yàn)框:分三個不同的scale(大中小),每個scale的(h,w)比例分為:1:1、1:2、2:1。
其中:小中大三種尺度的特征圖 -> 對應(yīng)大中小三種尺度的感受野 -> 對應(yīng)大中小三種尺度的先驗(yàn)框。
三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7
缺點(diǎn):感受野越大,其在原圖像中對應(yīng)的特征圖越大,導(dǎo)致其對小尺度目標(biāo)不敏感。

解決方法:對不同層的特征進(jìn)行融合。

具體操作添加一個passthrough Layer,提高對小目標(biāo)的檢測能力。
(1)將高分辨率的淺層特征(26×26×512)進(jìn)行拆分;
(2)疊加到低分辨率的深層特征(13×13×1024)中;
(3)然后進(jìn)行特征融合(13×13×3072);
(4)最后再檢測。
備注:在yolov1中,F(xiàn)C起到全局特征融合的作用。

三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

(2.3.6)Multi-Scale多尺度檢測(yolov2版) —— 尺度變換

背景:由于實(shí)際檢測數(shù)據(jù)的輸入圖像尺寸都不相同,若都裁剪為相同大小,最后檢測結(jié)果將有所下降。
限制

  • yolov2只有卷積層,故對輸入圖像尺寸沒有限制。但有范圍限制[320, 608]
  • yolov1有全連接層,故輸入圖像尺寸固定

具體操作訓(xùn)練模型每經(jīng)過一定次數(shù)的迭代之后,可以進(jìn)行輸入圖像尺度變換。如:每迭代100次,輸入圖像尺寸大小增加10%。

  • 備注1:輸入圖像尺寸必須可以被32整除。
  • 備注2:圖像尺寸越大,耗時越長。

三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

三、巔峰之作:yolov3

論文地址:YOLOv3: An Incremental Improvement
官網(wǎng)代碼:https://github.com/yjh0410/yolov2-yolov3_PyTorch

yolov3主要針對小目標(biāo)檢測的不足之處做出改進(jìn)。

(3.1)性能表現(xiàn)

由圖可得:yolov3的檢測速度和mAP值都強(qiáng)高于其他方法。
參數(shù)解讀:
(1)x軸表示預(yù)測一張圖片所需要的時間;
(2)y軸為mAP;
(3)原點(diǎn)的x軸坐標(biāo)為50
三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

(3.2)網(wǎng)絡(luò)模型(Darknet-53)

下面分兩個部分詳解:
(1)詳解Darknet-53網(wǎng)絡(luò)架構(gòu);
(2)Darknet-53在yolov3中的實(shí)際應(yīng)用,并詳解yolov3模型中的所有網(wǎng)絡(luò)層。

  • Darknet-53網(wǎng)絡(luò)架構(gòu);
    (1)由53個卷積層構(gòu)成,包括1×1和3×3的卷積層,卷積省時省力速度快效果好,對于分析物體特征最為有效。每個卷積層之后包含一個批量歸一化層和一個Leaky ReLU,加入這兩個部分的目的是為了防止過擬合。
    (2)沒有全連接層。可以輸入任意尺寸的圖像
    (3)沒有池化層。通過控制卷積層conv的步長stride達(dá)到下采樣的效果。具體操作:需要下采樣時stride=2;否則stride=1;
    (4)除此之外,Darknet-53中還使用了類似ResNet結(jié)構(gòu)。
    三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7
  • Darknet-53網(wǎng)絡(luò)架構(gòu)在yolov3中的實(shí)際應(yīng)用,并詳解yolov3模型中的所有網(wǎng)絡(luò)層。
    三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7
    (1)DBL由一個卷積層、一個批量歸一化層和一個Leaky ReLU組成的基本卷積單元。在Darknet-53中,共有53個這樣的DBL,所以稱其為Darknet-53。
    (2)res unit(殘差單元):輸入圖像經(jīng)過兩個DBL后,再與原輸入進(jìn)行特征add,得到與原圖像大小維度相同的圖像。
    殘差單元的目的:使得網(wǎng)絡(luò)可以提取到更深層的特征,同時避免出現(xiàn)梯度消失或爆炸。殘差網(wǎng)絡(luò)的特點(diǎn):至少不比原來差。
    (3)res(n):表示n個res unit。計(jì)算公式:resn = Zero Padding + DBL + n × res unit 。
    (4)y1、y2、y3: 分別表示yolov3的三種不同尺度輸出(分別對應(yīng):大中小感受野)。
    (5)concat1(拼接)(大中小感受野)將大感受野的特征圖像進(jìn)行上采樣,得到與中感受野的特征圖像相同大小,然后進(jìn)行維度拼接,達(dá)到多尺度特征融合的目的。為了加強(qiáng)算法對小目標(biāo)檢測的精確度。
    (6)concat2(拼接): (大中小感受野)將中感受野的特征圖像進(jìn)行上采樣,得到與小感受野的特征圖像相同大小,然后進(jìn)行維度拼接,達(dá)到多尺度特征融合的目的。 為了加強(qiáng)算法對小目標(biāo)檢測的精確度
    三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

(3.3)改進(jìn)之處

(3.3.1)Multi-Scale多尺度檢測(yolov3版) —— 上采樣+維度拼接

圖像分辨率大小直接反映像素?cái)?shù)量。分辨率越高,像素?cái)?shù)量越多,對細(xì)節(jié)表現(xiàn)越豐富。

  • 前提:在目標(biāo)檢測中,語義信息主要用于區(qū)分前景(目標(biāo))和背景(非目標(biāo))。故不需要太多的信息,且分辨率大反而會降低語義信息。
  • 具體操作:在網(wǎng)絡(luò)預(yù)測的最后某些層進(jìn)行上采樣+維度拼接操作。提高對小目標(biāo)的檢測效果
    (詳細(xì)請看yolov3網(wǎng)絡(luò)架構(gòu))

(3.3.2)多標(biāo)簽分類:softmax()改成logistic()

yolov2的單標(biāo)簽分類:softmax()改進(jìn)為yolov3的多標(biāo)簽分類:logistic()。
具體形式logistic()通過對每個類別都進(jìn)行二分類,以實(shí)現(xiàn)多標(biāo)簽分類。使用sigmoid函數(shù)將特征圖的預(yù)測結(jié)果約束在[0, 1]之間,若有一個或多個值大于設(shè)定閾值,就認(rèn)定該目標(biāo)框所對應(yīng)的目標(biāo)屬于該類別。多個值稱為多標(biāo)簽對象。(如:一個人有woman、person、地球人等多個標(biāo)簽)
三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

四、大神接棒:yolov4

論文地址:YOLOv4: Optimal Speed and Accuracy of Object Detection
官網(wǎng)代碼:https://github.com/AlexeyAB/darknet

yolov3發(fā)布至今,衍生了各式各樣能夠提高檢測精度的技巧(tricks)。
核心思想yolov4篩選了其中一些tricks,并加以組合,以及適當(dāng)創(chuàng)新,形成了yolov4算法,并實(shí)現(xiàn)了速度和精度的完美平衡。
備注:雖然有許多技巧可以提高卷積神經(jīng)網(wǎng)絡(luò)CNN的準(zhǔn)確性,但是某些技巧僅適合在某些模型上運(yùn)行,或者僅在某些問題上運(yùn)行,或者僅在小型數(shù)據(jù)集上運(yùn)行。
主要調(diào)優(yōu)手段加權(quán)殘差連接(WRC)、跨階段部分連接(CSP)跨小批量標(biāo)準(zhǔn)化(CmBN)、自對抗訓(xùn)練(SAT)Mish激活、馬賽克數(shù)據(jù)增強(qiáng)、CmBNDropBlock正則化、CIoU Loss等等。

(4.1)性能表現(xiàn)

經(jīng)過一系列的堆料,最終實(shí)現(xiàn)了目前最優(yōu)的實(shí)驗(yàn)結(jié)果:43.5%的AP(在Tesla V100上,MS COCO數(shù)據(jù)集的實(shí)時速度約為65FPS)。
三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

(4.2)網(wǎng)絡(luò)模型(CSPDarknet53)

  • CSPDarknet53網(wǎng)絡(luò)在yolov4中的實(shí)際應(yīng)用。

三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

yolov4的CSPDarknet53yolov3的Darknet-53相比,主要區(qū)別:

  • (1)將原來的Darknet53與CSPNet進(jìn)行結(jié)合,形成Backbone網(wǎng)絡(luò)。

  • (2)采用SPPNet適應(yīng)不同尺寸的輸入圖像大小,且可以增大感受野;

  • (3)采用SAM引入空間注意力機(jī)制;

  • (4)采用PANet充分利用了特征融合;

  • (5)激活函數(shù)由MIsh替換Leaky ReLU; 在yolov3中,每個卷積層之后包含一個批歸一化層和一個Leaky ReLU。而在yolov4的主干網(wǎng)絡(luò)CSPDarknet53中,使用Mish替換原來的Leaky ReLU。

  • CSPDarknet53網(wǎng)絡(luò)架構(gòu)

三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

(4.2.1)跨階段部分網(wǎng)絡(luò)(Cross Stage Partial Networks,CSPNet)

  • 背景: 2019年,Chien-Yao Wang等人提出CSPNet,主要用來解決網(wǎng)絡(luò)優(yōu)化中的重復(fù)梯度信息問題,在ImageNet dataset和MS COCO數(shù)據(jù)集上有很好的測試效果。
  • 特點(diǎn):易于實(shí)現(xiàn),在ResNet、ResNeXt和DenseNet網(wǎng)絡(luò)結(jié)構(gòu)上都能通用。
  • 目的: 實(shí)現(xiàn)更豐富的梯度組合,同時減少計(jì)算量。

具體方式: 將基本層的特征圖分成兩部分:11、主干部分繼續(xù)堆疊原來的殘差塊;22、支路部分則相當(dāng)于一個殘差邊,經(jīng)過少量處理直接連接到最后。
三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

(4.2.2)空間金字塔池化網(wǎng)絡(luò)(Spatial Pyramid Pooling Network,SPPNet)

論文地址:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

yolov1背景:yolov1訓(xùn)練時的分辨率:224×224;測試時:448×448。
yolov2背景:yolov2保持yolov1的操作不變,但在原訓(xùn)練的基礎(chǔ)上又加上了(10個epoch)的448×448高分辨率樣本進(jìn)行微調(diào),使網(wǎng)絡(luò)特征逐漸適應(yīng) 448×448 的分辨率;然后再使用 448×448 的樣本進(jìn)行測試,緩解了分辨率突然切換造成的影響。

目的通過最大池化將不同尺寸的輸入圖像變得尺寸一致,使得輸入圖像不再限制于固定尺寸。
優(yōu)點(diǎn):增大感受野。

下圖是經(jīng)典的空間金字塔池化層(SPP)。三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

(4.2.3)空間注意力機(jī)制(Spatial Attention Module,SAM)

具體方式: yolov4采用改進(jìn)的SAM方法
優(yōu)化歷程: CBAM(Convolutional Block AM) -> SAM(Spatial Attention Module) -> 改進(jìn)的SAM
優(yōu)化原因:
(1)CBAM計(jì)算比較復(fù)雜且耗時,而yolo的出發(fā)點(diǎn)是速度,故只計(jì)算空間位置的注意力機(jī)制。
(2)常規(guī)的SAM最大池化層和平均池化層分別作用于輸入的feature map,得到兩組shape相同的feature map,再將結(jié)果輸入到一個卷積層。過程過于復(fù)雜,yolo采取直接卷積進(jìn)行簡化。

  • CBAM與SAM的區(qū)別
  • CBAM:特征圖注意力機(jī)制(Channel Attention Module)在Channel維度上,對每一個特征圖(channel)加一個權(quán)重,然后通過sigmoid得到對應(yīng)的概率值,最后乘上輸入圖像,相當(dāng)于對輸入圖像的特征圖進(jìn)行加權(quán),即注意力。??如:32×32×256,對256個通道進(jìn)行加權(quán)。
  • SAM:空間注意力機(jī)制(Spatial Attention Module)在Spatial維度上,對每一個空間位置(Spatial)加一個權(quán)重,然后通過sigmoid得到對應(yīng)的概率值,最后乘上輸入圖像,相當(dāng)于對輸入圖像的所有位置特征進(jìn)行加權(quán),即注意力。??如:32×32×256,對任意空間位置進(jìn)行加權(quán)。

三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

  • SAM與改進(jìn)的SAM的區(qū)別

三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

(4.2.4)路徑聚合網(wǎng)絡(luò)(Path Aggregation Network,PANet)

論文地址(FPNet):Feature Pyramid Networks for Object Detection
論文地址(PANet):Path Aggregation Network for Instance Segmentation

背景: PANet發(fā)表于CVPR2018,其是COCO2017實(shí)例分割比賽的冠軍,也是目標(biāo)檢測比賽的第二名。
具體方式: yolov4采用改進(jìn)的PANet方法
優(yōu)化歷程: FPNet(Feature Pyramid Networks) -> PANet(Path Aggregation Network) -> 改進(jìn)的PAN
優(yōu)化原因:

  • (1)FPNet網(wǎng)絡(luò)采取自上而下的方式,將高層特征逐層與中高層、中層、中底層、低層特征進(jìn)行融合。缺點(diǎn)是無法自下而上融合,而PANet的優(yōu)化了該部分不足,詳見示意圖的(b)部分。
  • (2)PANet采用特征相加的融合方式,而yolo采用特征拼接的融合方式。加法可以得到一個加強(qiáng)版的特征圖,但特征權(quán)重不大于1,而拼接可能得到大于1的特征圖。

FPNet示意圖
三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

PANet示意圖三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7
圖中分為四個部分:

  • (a)FPNet:通過 融合高層特征 來提升目標(biāo)檢測的效果。
  • (b)Bottom-up Path Augmentation:通過 融合低層特征(邊緣形狀等)來提升目標(biāo)檢測的效果。
  • (c)Adaptive Feature Pooling:采用 拼接特征融合。詳見下圖:拼接相比加法,特征更明顯,可以提高檢測效果。
  • (d)Fully-connected Fusion

三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

(4.2.5)Mish激活函數(shù)

論文地址:Mish: A Self Regularized Non-Monotonic Activation Function

  • 特點(diǎn):Mish在負(fù)值的時候并不是完全截?cái)?,允許比較小的負(fù)梯度流入。
  • 結(jié)論:網(wǎng)絡(luò)層數(shù)越多,ReLU激活函數(shù)精度迅速下降,而Mish激活函數(shù)在訓(xùn)練穩(wěn)定性、平均準(zhǔn)確率(1%-2.8%)、峰值準(zhǔn)確率(1.2% - 3.6%)等方面都有全面的提高。
    22個激活函數(shù)

三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

(4.3)改進(jìn)之處

BackBone訓(xùn)練策略:數(shù)據(jù)增強(qiáng)、自對抗訓(xùn)練、DropBlock正則化、類標(biāo)簽平滑、CIoU損失函數(shù)、DIoU-NMS等。

(4.3.1)Mosaic數(shù)據(jù)增強(qiáng) + CutMix數(shù)據(jù)增強(qiáng)

CutMix論文: https://arxiv.org/pdf/1905.04899v2.pdf

最大特點(diǎn):使得yolov4只通過單CPU就能完成訓(xùn)練,不用再擔(dān)心設(shè)備問題。
具體方式基于CutMix方法對所有圖像進(jìn)行處理,然后基于Mosaic方法隨機(jī)取四張圖像拼接為一張圖像。CutMix方法的詳細(xì)過程如下:
三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7
由圖可得(左):CutMix表現(xiàn)最優(yōu)。

  • (1)ResNet-50:采用常規(guī)的數(shù)據(jù)增強(qiáng)方法。如:調(diào)整亮度、飽和度、對比度;隨機(jī)縮放、旋轉(zhuǎn)、翻轉(zhuǎn)等。
  • (2)Mixup:將貓狗兩張圖像進(jìn)行圖像融合,其中狗和貓的權(quán)重參數(shù)都為0.5,故標(biāo)簽概率值都為0.5。
  • (3)Cutout:隨機(jī)刪除/遮擋一個區(qū)域。
  • (4)CutMix隨機(jī)刪除/遮擋一個區(qū)域,并將圖像A的一部分(patch)粘貼到圖像B上,分類概率按A與B的patch面積比例進(jìn)行分配。如:將狗頭替換為貓頭,其中狗和貓的權(quán)重參數(shù)分別為0.6、0.4,故標(biāo)簽softmax的概率值分別為0.6、0.4。

備注1:softmax能夠得到當(dāng)前輸入屬于各個類別的概率。
備注2:標(biāo)簽(分類結(jié)果)會根據(jù)A與B的patch面積比例進(jìn)行分配,且采用加權(quán)求和的方式計(jì)算損失。
三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

數(shù)據(jù)增強(qiáng)的其余方法擴(kuò)展:三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

(4.3.2)自對抗訓(xùn)練(Self-Adversarial Training,SAT)

  • 在第一階段:在原始圖像的基礎(chǔ)上,添加噪音并設(shè)置權(quán)重閾值,讓神經(jīng)網(wǎng)絡(luò)對自身進(jìn)行對抗性攻擊訓(xùn)練。如下圖:

三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

  • 在第二階段:用正常的方法訓(xùn)練神經(jīng)網(wǎng)絡(luò)去檢測目標(biāo)。
    備注:詳細(xì)可參考對抗攻擊的快速梯度符號法(FGSM)。

(4.3.3)改進(jìn)的Dropout(DropBlock)

  • b圖Dropout是隨機(jī)刪除一些神經(jīng)元(如:a圖的紅點(diǎn)),但對于整張圖來說,效果并不明顯。比如:眼睛被刪除,我們?nèi)匀豢梢酝ㄟ^眼睛的周邊特征(眼角、眼圈等)去近似識別。
  • c圖DropBlock是隨機(jī)刪除一大塊神經(jīng)元。 如:將狗頭的左耳全部刪除。

三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

(4.3.4)標(biāo)簽平滑(Label Smoothing)

標(biāo)簽值絕對化:只有0和1兩個值。

  • 問題:該現(xiàn)象將導(dǎo)致神經(jīng)網(wǎng)絡(luò)在訓(xùn)練過程中,自我良好,從而過擬合。
  • 具體方式將絕對化標(biāo)簽值進(jìn)行平滑,將[0,1]變換為[0.05,0.95]。即分類結(jié)果具有一定的模糊化,使得網(wǎng)絡(luò)的抗過擬合能力增強(qiáng)。

三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7
左圖(使用前):分類結(jié)果相對不錯,但各類別之間存在一定的誤差;
右圖(使用后):分類結(jié)果比較好,簇內(nèi)距離變小,簇間距離變大。三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

(4.3.5)CIoU損失函數(shù)

效果:采用CIoU Loss損失函數(shù),使得預(yù)測框回歸的速度和精度更高一些。
Loss優(yōu)化過程經(jīng)典IOU損失 -> GIOU損失(Generalized IOU) -> DIOU損失(Distance IOU) -> CIOU損失
優(yōu)缺點(diǎn)

  • IoU_Loss考慮檢測框和目標(biāo)框重疊面積。
  • GIoU_Loss:在IOU的基礎(chǔ)上,解決邊界框不重合時的問題。
  • DIoU_Loss:在IOU和GIOU的基礎(chǔ)上,考慮邊界框中心點(diǎn)距離的信息。
  • CIoU_Loss:在DIOU的基礎(chǔ)上,考慮邊界框長寬比的尺度信息。

三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7
三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7
三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

(4.3.6)DIoU-NMS

  • 在實(shí)際應(yīng)用場景中,當(dāng)兩個不同物體重疊時,由于IOU值比較大,經(jīng)過NMS處理后可能只剩下一個檢測框,進(jìn)而導(dǎo)致漏檢。
  • 而DIOU-NMS 不僅考慮IOU,還考慮兩個框中心點(diǎn)之間的距離。若兩個框之間IOU比較大,且兩個框的距離也比較大時,則認(rèn)為是兩個物體框。

在檢測結(jié)果中,若存在多個檢測框的IOU大于置信度閾值,方法如下:
(1)NMS非極大值抑制:只取IoU最大值對應(yīng)的框。
(2)DIoU-NMS:計(jì)算高置信度候選框(M)與其余所有框(Bi)的中心點(diǎn)距離。若距離較大,則提取多個目標(biāo)框優(yōu)點(diǎn):對重疊目標(biāo)的識別效果更好。

三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7
其中:s(i)是分類置信度,ε為NMS閾值,M為最高置信度的框。
b, b(gt)分別表示預(yù)測框和真實(shí)框的中心點(diǎn);
ρ表示計(jì)算兩個中心點(diǎn)的歐式距離。
c表示能夠同時包含預(yù)測框和真實(shí)框的最小外接矩形的對角線長度。

(3)SOFT-NMS:對于不滿足要求,且與最大置信度對應(yīng)的檢測框高度重疊的檢測框,不直接刪除,而采取降低置信度的方式。優(yōu)點(diǎn):召回率更高
三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

五、橫空出世:YOLOv5

論文下載:yolov5沒有論文
官網(wǎng)代碼:https://github.com/ultralytics/yolov5

  • 2020 年 2 月YOLO之父Joseph Redmon宣布退出計(jì)算機(jī)視覺研究領(lǐng)域。
  • 2020 年 4 月 23 日YOLOv4發(fā)布。
  • 2020 年 6 月 10 日YOLOv5發(fā)布。

版本特點(diǎn)
(1)v4與v5兩個版本的改進(jìn)都屬于多種技術(shù)堆積版本,且兩個版本差異不大。
(2)一直在更新中,且更新較快(平均2~3個月一次)。

備注:v5對應(yīng)的GitHub上有詳細(xì)的項(xiàng)目說明。
備注:由于v5項(xiàng)目的訓(xùn)練數(shù)據(jù)集過于龐大,故可以選擇自己的數(shù)據(jù)集 or 小樣本數(shù)據(jù)集學(xué)習(xí)。
Roboflow:開源自動駕駛數(shù)據(jù)集。該數(shù)據(jù)集已經(jīng)畫好邊界框;下載格式:YOLO v5 PyTorch。

(5.1)性能表現(xiàn)

yolov5是在COCO數(shù)據(jù)集上預(yù)訓(xùn)練的系列模型,包含5個模型:YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l、YOLO5x。
不同的變體模型使得YOLOv5能很好的在精度和速度中權(quán)衡,方便用戶選擇。三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7
三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

(5.2)網(wǎng)絡(luò)模型(YOLOv5s)

三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7
模塊1(CBL-CBL):由Conv + BN + Leaky_relu組成
模塊2(Res unit):借鑒ResNet網(wǎng)絡(luò)中的殘差結(jié)構(gòu),用來構(gòu)建深層網(wǎng)絡(luò),CBM是殘差模塊中的子模塊
模塊3(CSP1_X):借鑒CSPNet網(wǎng)絡(luò)結(jié)構(gòu),該模塊由一個CBL + Res unint + 卷積層,最后Concat組成
模塊4(CSP2_X):借鑒CSPNet網(wǎng)絡(luò)結(jié)構(gòu),該模塊由兩個CBL + Res unint + 卷積層,最后Concat組成。
模塊5(Focus結(jié)構(gòu)):首先將多個slice結(jié)果進(jìn)行拼接Concat,然后將其送入CBL模塊中。
模塊6(SPP):采用1×1、5×5、9×9和13×13的最大池化方式,進(jìn)行多尺度特征融合。

(5.2.1)Backbone(特征提取模塊)

三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7
由下向上:

  • Backbone(骨干網(wǎng)絡(luò))用于提取圖像特征的網(wǎng)絡(luò) 。采用通用模型resnet、VGG等。
    • 使用方式:將通用模型作為backbone時,直接加載預(yù)訓(xùn)練模型的參數(shù),再拼接上自定義網(wǎng)絡(luò)。
    • 訓(xùn)練方法:對遷移后的預(yù)訓(xùn)練模型進(jìn)行微調(diào),使其更適合我們自己的任務(wù)。
  • Neck(脖子)用于更好的使用backbone提取的特征。
  • Bottleneck(瓶頸)輸出維度比輸入維度小(如:身體到脖子,由寬到細(xì))。
    • 常用參數(shù):bottle_num=256,表示網(wǎng)絡(luò)的輸出維度是256,但輸入維度可能是1024。
  • Head(頭部)獲取模型的輸出特征,并進(jìn)行預(yù)測

Backbone結(jié)構(gòu)主要分成三類:
(1)CNNs結(jié)構(gòu)包括:非輕量化CNNs + 輕量化CNNs。
(2)Transformer結(jié)構(gòu)
(3)CNNs+Transformer結(jié)構(gòu)
三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

深度學(xué)習(xí)框架-Backbone匯總(超詳細(xì)講解)
?? 一、(非輕量化CNNs)Backbone結(jié)構(gòu)

  1. LeNet5:(1998)
  2. AlexNet:(2012)
  3. VGG:(2014)
  4. GoogLeNet(InceptionNet)系列:Inception-v1(GoogleNet): (2015)、Inception-v2 (2015,BN-inception)、Inception-v3 (2015)、Inception-v4: (2017)、Inception-resnet-v2: (2017)
  5. Resnet: (2016)
  6. ResNet變種:ResNeXt (2016)、ResNeSt(2020)、Res2Net(2019)、DenseNet (2017)
  7. DPNet:(2017)
  8. NasNet:(2018)
  9. SENet及其變體SKNet:SENet(2017)、SKNet(2019)
  10. EfficientNet 系列:EfficientNet-V1(2019)、EfficientNet-V2(2021)
  11. Darknet系列:Darknet-19 (2016, YOLO v2 的 backbone)、Darknet-53 (2018, YOLOv3的 backbone)
  12. DLA (2018, Deep Layer Aggregation)

?? 二、(輕量化CNNs)Backbone結(jié)構(gòu)

  1. SqueezeNet:(2016)
  2. MobileNet-v1:(2017)
  3. XCeption:(2017, 極致的 Inception)
  4. MobileNet V2:(2018)
  5. ShuffleNet-v1:(2018)
  6. ShuffleNet-v2:(2018)
  7. MnasNet:(2019)
  8. MobileNet V3 (2019)
  9. CondenseNet(2017)
  10. ESPNet系列:ESPNet (2018)、ESPNetv2 (2018)
  11. ChannelNets
  12. PeleeNet
  13. IGC系列:IGCV1、IGCV2、IGCV3
  14. FBNet系列:FBNet、FBNetV2、FBNetV3
  15. GhostNet
  16. WeightNet
  17. MicroNet

?? 三、 ViT(Vision Transformer )Backbone結(jié)構(gòu)

  1. ViT-H/14 和 ViT-L/16(2020)(Vision Transformer,ViT)
  2. Swin Transformer(2021)
  3. PVT(2021, Pyramid Vision Transformer)
  4. MPViT (CVPR 2022,Multi-path Vision Transformer, 多路徑 Vision Transformer)
  5. EdgeViTs (CVPR 2022,輕量級視覺Transformer)

?? 四、(CNNs+Transformer / Attention)Backbone結(jié)構(gòu)

  1. CoAtNet(2021)
  2. BoTNet(2021)

(5.2.1)EfficientNet

EfficientNet網(wǎng)絡(luò)詳解

(5.3)改進(jìn)之處

深入淺出Yolo系列之Yolov5核心基礎(chǔ)知識完整講解

六、曇花一現(xiàn):YOLOv6

手把手教你運(yùn)行YOLOv6(超詳細(xì))

yolov6與v7相差不到十天,區(qū)別不大。

七、誰與爭鋒:YOLOv7

論文下載:YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object
detectors
代碼地址:https://gitcode.net/mirrors/WongKinYiu/yolov7

在項(xiàng)目實(shí)戰(zhàn)中,只研究yolov5或yolov7對應(yīng)的項(xiàng)目即可,yolov3不要再研究了。因?yàn)楝F(xiàn)在的torch版本是高版本,而v3當(dāng)時是低版本。

(7.1)性能表現(xiàn)

三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7
三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

(7.2)網(wǎng)絡(luò)模型

三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

(7.3)改進(jìn)之處

(7.3.1)RepVGG(最大改進(jìn))

  • 背景

    • 2014年:牛津大學(xué)著名研究組VGG (Visual Geometry Group), 提出VGGNet。
    • 2021年:清華大學(xué)、曠視科技以及香港科技大學(xué)等機(jī)構(gòu),基于VGG網(wǎng)絡(luò)提出了RepVGG網(wǎng)絡(luò)
  • 效果
    RepVGG無論是在精度還是速度上都已經(jīng)超過了 ResNet、EffcientNet 以及 ResNeXt 等網(wǎng)絡(luò)。

三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

核心:結(jié)構(gòu)重參數(shù)化

RepVGG采用結(jié)構(gòu)重參數(shù)化(structural re-parameterization)的方法,詳細(xì)過程如下:
(1)訓(xùn)練時,使用ResNet-style的多分支模型(特點(diǎn):增加模型的表征能力)
(2)測試時,轉(zhuǎn)化成VGG-style的單線路模型(特點(diǎn):速度更快、更省內(nèi)存并且更加的靈活)

備注:訓(xùn)練與測試的網(wǎng)絡(luò)結(jié)構(gòu)是可以不一樣的。

核心操作在測試時,將訓(xùn)練時的多分支模型進(jìn)行合并得到一條單線路模型。即對1 x 1卷積 + BN(批標(biāo)準(zhǔn)化)與3 x 3卷積進(jìn)行合并。RepVGG網(wǎng)絡(luò):結(jié)構(gòu)重參數(shù)化 - 詳細(xì)過程
詳細(xì)如下:

  • (1)將1x1卷積轉(zhuǎn)換成3x3卷積
  • (2)將BN和3x3卷積進(jìn)行融合,轉(zhuǎn)換成3x3卷積
  • (3)多分支融合

備注1:yolo的核心是檢測速度快,而不是檢測精度高。
備注2在yolo六個版本的優(yōu)化后,網(wǎng)絡(luò)層只留下了3 x 3卷積、1 x 1卷積和BN(每一個網(wǎng)絡(luò)層之后都進(jìn)行批標(biāo)準(zhǔn)化)。
備注3:VGG在2014年告訴我們,3 x 3卷積是計(jì)算速度最快的,優(yōu)化最好的。
三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7
備注4:黃色模塊是激活函數(shù)ReLU,藍(lán)色模塊是卷積層。
備注5:單支路模型可以節(jié)約內(nèi)存。

1、將1x1卷積轉(zhuǎn)換成3x3卷積

具體過程
(1)取1x1卷積(卷積核:1個參數(shù)),設(shè)置padding=1(即在其周圍填補(bǔ)一圈全為零的元素)
(2)設(shè)置原始輸入的padding=1
(3)輸入與卷積核進(jìn)行卷積操作,得到3x3的卷積層。。

注意:原始輸入和1x1卷積都需要設(shè)置padding=1。
三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

2、將BN和3x3卷積進(jìn)行融合,轉(zhuǎn)換成3x3卷積

通俗來講:將BN公式拆解為 一元二次方程(y1 = k1* x1 + b1);然后與損失函數(shù)(y2 = k2* x2 + b2)進(jìn)行合并得到新的方程(y3 = k3* x3 + b3)。
三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7
三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

3、多分支融合

具體過程(1)將1x1卷積 + BN全部轉(zhuǎn)換為3x3卷積,然后與3x3卷積進(jìn)行合并,得到一個3x3卷積。
三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

(7.3.2)正樣本分配策略

主要目的:為了得到更多的正樣本。

  • 備注1:正樣本(anchor)即先驗(yàn)框;負(fù)樣本即背景;真實(shí)框(Ground Truth,GT)即檢測目標(biāo)
  • 備注2:先驗(yàn)框在不同的yolo目標(biāo)檢測模型中,又有不同的叫法。如:anchor(錨框)、bounding box(邊界框)。叫法不同,但都是同一個概念。

具體計(jì)算過程分兩個步驟:

  • 步驟一(提取anchor)

(1)計(jì)算anchor的中心點(diǎn)位置
(2)中心點(diǎn)位置在當(dāng)前網(wǎng)格進(jìn)行上、下、左、右四個方向偏移,偏移大小為0.5。
(3)取當(dāng)前網(wǎng)格 + 四個方向的中心點(diǎn)所對應(yīng)的兩個網(wǎng)格。共三個網(wǎng)格作為正樣本(一個黑色點(diǎn) + 兩個藍(lán)色點(diǎn))

備注:對漂移量取sigmoid函數(shù),得到(0 ~ 1)之間的值。
三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

  • 步驟二(篩選anchor)

篩選條件一:GT和anchor的長款比范圍:[0.25,4] 。
篩選條件二:GT和anchor的IOU要大于自定義閾值。
篩選條件三:GT和anchor的類別預(yù)測損失要大于自定義閾值。

計(jì)算過程:三個條件分別篩選出滿足要求的anchor,然后基于權(quán)重計(jì)算損失Loss,并進(jìn)行損失TOPK排序,最終只提取滿足要求的K個anchor。
備注:Loss = (權(quán)重系數(shù)1 * 條件一) + (權(quán)重系數(shù)2 * 條件二) + (權(quán)重系數(shù)3 * 條件三)

三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

舉例:以下是具體過程(篩選anchor)中,條件二的損失計(jì)算。

三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7
三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

  • 備注1:計(jì)算GT對應(yīng)的anchor數(shù)量(損失計(jì)算得到的結(jié)果):向下取整。
  • 備注2:若一個GT同時和多個anchor高度匹配,則按照損失計(jì)算原則,只能匹配損失最小對應(yīng)的一個anchor。

(7.3.3)相對偏移量計(jì)算(yolov5/v7版)

三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7
三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7

(7.3.4)輔助頭(auxiliary head)+主頭(lead head)

詳細(xì)請看v7論文三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7
圖5:輔助頭用粗線,主頭用細(xì)線。與常規(guī)模型(a)相比,模型(b)具有輔助頭。與通常的獨(dú)立標(biāo)簽分配器(c)不同,我們提出主頭引導(dǎo)標(biāo)簽分配器(d)以及由粗至細(xì)的主頭引導(dǎo)標(biāo)簽分配器(e)

  • 計(jì)算:通過主頭的預(yù)測值和真實(shí)值進(jìn)行標(biāo)簽分配器優(yōu)化,然后同時得到主頭和輔助頭的訓(xùn)練標(biāo)簽。
  • 備注:詳細(xì)的從粗到細(xì)的實(shí)現(xiàn)方法和約束設(shè)計(jì)細(xì)節(jié)將在附錄中詳細(xì)闡述。

參考文獻(xiàn)

1.YOLO學(xué)習(xí):召回率Recall、精確率Precision、IoU、Map
2.YOLOv1到Y(jié)OLOv3的演變過程及每個算法詳解
3.YOLO系列總結(jié):YOLOv1, YOLOv2, YOLOv3, YOLOv4, YOLOv5, YOLOX
4.YOLO系列詳解:YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5
5.YOLO系列算法精講:從yolov1至yolov5的進(jìn)階之路(2萬字超全整理)
6.深入淺出Yolo系列:Yolov3、Yolov4、Yolov5、YoloX(超多-免費(fèi)數(shù)據(jù)集)
7.深度學(xué)習(xí)框架-Backbone匯總(超詳細(xì)講解)
8.深入淺出Yolo系列之Yolov5核心基礎(chǔ)知識完整講解
9.YOLOv7 RepVGG網(wǎng)絡(luò):結(jié)構(gòu)重參數(shù)化 - 詳細(xì)過程
10.目標(biāo)檢測算法——YOLOV7——詳解


實(shí)戰(zhàn)一:目標(biāo)檢測:教你利用yolov5訓(xùn)練自己的目標(biāo)檢測模型
實(shí)戰(zhàn)二:認(rèn)真總結(jié)6000字Yolov5保姆級教程(2022.06.28全新版本v6.1)
實(shí)戰(zhàn)三:利用yolov5實(shí)現(xiàn)口罩佩戴檢測算法(非常詳細(xì))
實(shí)戰(zhàn)四:YOLOv7(目標(biāo)檢測)入門教程詳解—檢測,推理,訓(xùn)練
?? roboflow官網(wǎng):開源自動駕駛數(shù)據(jù)集(Computer Vision Datasets)??文章來源地址http://www.zghlxwxcb.cn/news/detail-414320.html

到了這里,關(guān)于三萬字硬核詳解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 2萬字硬核spark源碼精講手冊

    2萬字硬核spark源碼精講手冊

    大家好,我是老兵。 本期為大家?guī)韘park源碼精講系列,我將結(jié)合自身的理解深入淺出的剖析spark內(nèi)核。全文內(nèi)容很肝,希望能夠給大家提供幫助。 本文整體基于Spark2.4.1代碼講解,首先需要準(zhǔn)備編譯環(huán)境。 1)編譯環(huán)境 1)scala2.11+ jdk1.8+ maven3.5+ Git2.0 + Spark2.4.1 2)windows環(huán)境(

    2023年04月24日
    瀏覽(47)
  • yolov1詳解

    yolov1詳解

    YOLOv1是單階段目標(biāo)檢測方法,不需要像Faster RCNN這種兩階段目標(biāo)檢測方法一樣,需要生成先驗(yàn)框。Yolo算法采用一個單獨(dú)的CNN模型實(shí)現(xiàn)end-to-end的目標(biāo)檢測。 整個YOLO目標(biāo)檢測pipeline如上圖所示:首先將輸入圖片resize到448x448,然后送入CNN網(wǎng)絡(luò),最后處理網(wǎng)絡(luò)預(yù)測結(jié)果得到檢測的目

    2024年02月06日
    瀏覽(19)
  • YOLOv3詳解

    YOLOv3詳解

    yolo 算法是一種 one-stage 的目標(biāo)檢測算法,與 two-stage 目標(biāo)檢測算法最大區(qū)別在于運(yùn)算速度上, YOLO 系列算法將圖片劃分成若干個網(wǎng)格,再基于anchor機(jī)制生成先驗(yàn)框,只用一步就生成檢測框,這種方法大大提升了算法的預(yù)測速度,今天我們主要學(xué)習(xí)的是 YOLOv3 算法的主要實(shí)現(xiàn)過

    2024年02月04日
    瀏覽(19)
  • 【目標(biāo)檢測】YOLO系列——YOLOv1詳解

    【目標(biāo)檢測】YOLO系列——YOLOv1詳解

    本篇是關(guān)于目標(biāo)檢測算法YOLOv1的學(xué)習(xí)筆記。網(wǎng)上的博客大多是摘抄翻譯論文中的重點(diǎn)內(nèi)容加上自己的理解,或者是梳理論文的大致思路,在沒看過原文的情況下可能總會有些看不懂的地方。所以強(qiáng)烈建議博客搭配原文食用。 原文鏈接:You Only Look Once: Unified, Real-Time Object Dete

    2024年02月05日
    瀏覽(19)
  • YOLO學(xué)習(xí)筆記(2):YOLOV1算法詳解

    YOLO學(xué)習(xí)筆記(2):YOLOV1算法詳解

    SAY YOU ONLY LOOK ONCE AGAIN!!! SAY YOU ONLY LOOK ONCE AGAIN!!! SAY YOU ONLY LOOK ONCE AGAIN!!! 本文章主要參考up主同濟(jì)子豪兄的視頻的基礎(chǔ)上整理的筆記,建議讀者務(wù)必觀看原視頻,受益匪淺 注:在文章中大量使用,所以注解較為全面,可以在閱讀文章前只大致瀏覽,在正文部分不斷回顧

    2024年04月22日
    瀏覽(16)
  • 【YOLO系列】YOLOv4論文超詳細(xì)解讀2(網(wǎng)絡(luò)詳解)

    【YOLO系列】YOLOv4論文超詳細(xì)解讀2(網(wǎng)絡(luò)詳解)

    ?上一篇我們一起讀了YOLOv4的論文《YOLOv4:Optimal Speed and Accuracy of Object Detection》(直通車→【YOLO系列】YOLOv4論文超詳細(xì)解讀1(翻譯 +學(xué)習(xí)筆記)),有了初步的印象,論文里面涉及到很多tricks,上一篇介紹的比較簡略,我們這篇來詳細(xì)介紹一下。 一、YOLOv4的簡介 ?二、YO

    2024年02月02日
    瀏覽(22)
  • 計(jì)算機(jī)視覺的應(yīng)用14-目標(biāo)檢測經(jīng)典算法之YOLOv1-YOLOv5的模型架構(gòu)與改進(jìn)過程詳解,便于記憶

    計(jì)算機(jī)視覺的應(yīng)用14-目標(biāo)檢測經(jīng)典算法之YOLOv1-YOLOv5的模型架構(gòu)與改進(jìn)過程詳解,便于記憶

    大家好,我是微學(xué)AI,今天給大家介紹一下計(jì)算機(jī)視覺的應(yīng)用14-目標(biāo)檢測經(jīng)典算法之YOLOv1-YOLOv5的模型架構(gòu)與改進(jìn)過程詳解,便于記憶。YOLO(You Only Look Once)是一種目標(biāo)檢測深度學(xué)習(xí)模型。想象一下,傳統(tǒng)的目標(biāo)檢測方法就像偵探一樣,需要仔細(xì)觀察整個場景,逐個研究每個細(xì)

    2024年02月07日
    瀏覽(27)
  • yolov4/yolov4-tiny保姆級訓(xùn)練教學(xué)

    yolov4/yolov4-tiny保姆級訓(xùn)練教學(xué)

    目錄 一、pytorch環(huán)境搭建 1.創(chuàng)建新環(huán)境 2.激活環(huán)境 3.按照版本下載 二、labelimg的安裝 三、數(shù)據(jù)處理部分 ? ? ? ? ?1、rename數(shù)據(jù)文件 2、數(shù)據(jù)加強(qiáng) ?四、yolov4訓(xùn)練過程 五、租用GPU 在安裝anaconda的前提下 在編譯器pycharm的終端 conda?create?-n?pytorch1.6_cuda10.2?python=3.7 //創(chuàng)從大python

    2023年04月08日
    瀏覽(32)
  • windows平臺使用CMake工具對darknet的編譯以及安裝過程+yolov3+圖像檢測+攝像頭檢測+視頻檢測+手機(jī)作為攝像頭進(jìn)行檢測(詳解)

    windows平臺使用CMake工具對darknet的編譯以及安裝過程+yolov3+圖像檢測+攝像頭檢測+視頻檢測+手機(jī)作為攝像頭進(jìn)行檢測(詳解)

    目錄 1.編譯和安裝教程 (1)安裝visual studio 2022 (2)CMake下載及安裝 (3)下載darknet.zip文件 (4)安裝OpenCV? (5)修改Makefile文件 (6)修改CMakeLists.txt文件 (7)使用CMake工具 2.yolov3進(jìn)行測試 (1)單張圖像進(jìn)行檢測? (2)開啟攝像頭進(jìn)行檢測 (3) 視頻檢測 (4)使用手機(jī)攝

    2024年02月05日
    瀏覽(59)
  • yoloV2細(xì)節(jié)改進(jìn)

    yoloV2細(xì)節(jié)改進(jìn)

    使用dropout,殺死部分神經(jīng)元,使得神經(jīng)沒那么復(fù)雜,防止過擬合 V2 舍棄Dropout,卷積后全部加入Batch Normalization Batch Normalization 歸一化,讓網(wǎng)絡(luò)收斂,學(xué)習(xí)速度更快 conv-BN, 已是目前網(wǎng)絡(luò)的標(biāo)配。 使用更大的分辨率(V1訓(xùn)練時使用224) 7.為啥是416 416,不是448 448,需要經(jīng)過5次降

    2024年02月03日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包