日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 目标检测 >内容正文

目标检测

深度学习目标检测之 YOLO v4

發(fā)布時間:2023/12/20 目标检测 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习目标检测之 YOLO v4 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
  • 論文原文:https://arxiv.org/abs/2004.10934
  • 代碼
    • 原版c++: https://github.com/AlexeyAB/darknet
    • keras:https://github.com/Ma-Dan/keras-yolo4
    • pytorch:https://github.com/Tianxiaomo/pytorch-YOLOv4

前言

2020年YOLO系列的作者Redmon在推特上發(fā)表聲明,出于道德方面的考慮,從此退出CV界。本以為YOLOv3已經(jīng)是YOLO系列的終局之戰(zhàn)。沒想到,俄羅斯的程序員 Alexey Bochkovskiy 憑借自己的摸索復(fù)現(xiàn)了 YOLO 系列全部模型,并總結(jié)了最接近幾年目標檢測的各種套路推出了 YOLO v4,然后與Redmon取得聯(lián)系,正式將他們的研究命名為YOLO v4。

簡單來說,就是說這個YOLO v4算法是在原有YOLO目標檢測架構(gòu)的基礎(chǔ)上,采用了近些年CNN領(lǐng)域中最優(yōu)秀的優(yōu)化策略,從數(shù)據(jù)處理、主干網(wǎng)絡(luò)、網(wǎng)絡(luò)訓(xùn)練、激活函數(shù)、損失函數(shù)等各個方面都有著不同程度的優(yōu)化,雖沒有理論上的創(chuàng)新,但是會受到許許多多的工程師的歡迎,各種優(yōu)化算法的嘗試。文章如同于目標檢測的trick綜述,效果達到了實現(xiàn)FPS與Precision平衡的目標檢測 new baseline。更有意思的是作者提出了 backbone,neck,head 的目標檢測通用框架套路。

backbone, neck, head 其實非常的形象。它表示組成一個“人”的三個部分。從下到上就是 backbone, neck, head 。

  • backbone:各類卷積網(wǎng)絡(luò),目的是對原始圖像做初步的特征提取。
  • neck:各類結(jié)構(gòu),目的是從結(jié)構(gòu)上做“特征的融合”。主要為解決小目標檢測,重疊目標檢測等問題。
  • head:gd 編碼,回歸和解析。

0 摘要

目前有很多可以提高CNN準確性的算法。這些算法的組合在龐大數(shù)據(jù)集上進行測試、對實驗結(jié)果進行理論驗證都是非常必要的。有些算法只在特定的模型上有效果,并且只對特定的問題有效,或者只對小規(guī)模的數(shù)據(jù)集有效;然而有些算法,比如 batch-normalization(批量歸一化) 和 residual-connections(殘差連接),對大多數(shù)的模型、任務(wù)和數(shù)據(jù)集都適用。我們認為這樣通用的算法包括:Weighted-Residual-Connections(WRC,加權(quán)殘差連接), Cross-Stage-Partial-connections(CSP,跨階段部分連接), Cross mini-Batch Normalization(CmBN,交叉小批量標準化), Self-adversarial-training(SAT,自對抗訓(xùn)練)以及Mish-activation(Mish激活)。我們使用了新的算法:WRC, CSP, CmBN, SAT, Mish activation, Mosaic data augmentation(馬賽克數(shù)據(jù)增強), CmBN, Dropblock regularization 和CIoU loss以及它們的組合,獲得了最優(yōu)的效果:在MS COCO數(shù)據(jù)集上的AP值為43.5%(65.7% AP50),在Tesla V100上的實時推理速度為65FPS。開源代碼鏈接:https://github.com/AlexeyAB/darknet。

從摘要中我們基本上可以看出:v4實際上就是保留Darknet作為backbone,然后通過大量的實驗研究了眾多普適性算法對網(wǎng)絡(luò)性能的影響,然后找到了它們最優(yōu)的組合。

先放網(wǎng)絡(luò)架構(gòu)(圖不記得從哪里保存下來的了)

YOLOv4 = CSPDarknet53(主干) + SPP附加模塊(頸) + PANet路徑聚合(頸) + YOLOv3(頭部)

當輸入是416x416時,特征結(jié)構(gòu)如下

當輸入是608x608時,特征結(jié)構(gòu)如下:

1 介紹

大部分基于CNN的目標檢測器主要只適用于推薦系統(tǒng)。舉例來說,通過城市相機尋找免費停車位置的系統(tǒng)使用著慢速但是高精度的模型,然而汽車碰撞警告卻使用著快速但是低精度的模型。提高實時目標檢測器的精度不經(jīng)能夠應(yīng)用在推薦系統(tǒng)上,而且還能用于獨立的流程管理以及降低人員數(shù)量上。目前大部分高精度的神經(jīng)網(wǎng)絡(luò)不僅不能實時運行,并且需要較大的mini-batch-size在多個GPUs上進行訓(xùn)練。我們構(gòu)建了僅在一塊GPU上就可以實時運行的CNN解決了這個問題,并且它只需要在一塊GPU上進行訓(xùn)練

我們工作的主要目標就是設(shè)計一個僅在單個計算系統(tǒng)(比如單個GPU)上就可以快速運行的目標檢測器并且對并行計算進行優(yōu)化,并非減低計量計算量理論指標(BFLOP)。我們希望這個檢測器能夠輕松的訓(xùn)練和使用。具體來說就是任何一個人僅僅使用一個GPU進行訓(xùn)練和測試就可以得到實時的,高精度的以及令人信服的目標檢測結(jié)果,正如在圖片1中所示的YOLOv4的結(jié)果。我們的貢獻總結(jié)如下:

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

(2)我們在檢測器訓(xùn)練的過程中,測試了目標檢測中最高水準的Bag-of-Freebies和Bat-of-Specials方法

(3)我們改進了最高水準的算法,使得它們更加高效并且適合于在一個GPU上進行訓(xùn)練,比如CBN[89]、PAN[49]、SAM[85]等。

2 相關(guān)工作(Related work)

2.1 目標檢測模型(Object detection models)

檢測器通常由兩部分組成:backbone和head。前者在 ImageNet 上進行預(yù)訓(xùn)練,后者用來預(yù)測類別信息和目標物體的邊界框。在GPU平臺上運行的檢測器,它們的backbone可能是VGG [68],ResNet [26],ResNeXt [86]或DenseNet [30]。在CPU平臺上運行的檢測器,它們的backbone可能是[31],MobileNet [28、66、27、74]或ShuffleNet [97、53]。對于head部分,通常分為兩類:one-stage和two-stage的目標檢測器。Two-stage的目標檢測器的代表是R-CNN [19]系列,包括:faster R-CNN [64],R-FCN [9]和Libra R-CNN [ 58]. 還有基于anchor-free的Two-stage的目標檢測器,比如RepPoints[87]。One-stage目標檢測器的代表模型是YOLO [61、62、63],SSD [50]和RetinaNet [45]。在最近幾年,出現(xiàn)了基于anchor-free的one-stage的算法,比如CenterNet [13],CornerNet [37、38],FCOS [78]等等。在最近幾年,目標檢測器在backbone和head之間會插入一些網(wǎng)絡(luò)層,這些網(wǎng)絡(luò)層通常用來收集不同的特征圖。我們將其稱之為目標檢測器的neck。通常,一個neck由多個bottom-up路徑和top-down路徑組成。使用這種機制的網(wǎng)絡(luò)包括Feature Pyramid Network(FPN,特征金字塔網(wǎng)絡(luò))[44],Path Aggregation Network(PAN,路徑聚集網(wǎng)絡(luò))[49],BiFPN[77]和NAS-FPN[17]。

除了上面的這些模型,一些學者將重點放在為目標檢測器構(gòu)建新的backbone(DetNet [43],DetNAS [7])或者是一整個新的模型(SpineNet [12],HitDe-tector [20])。


綜上所述,一個普通的目標檢測器由下面四個部分組成:

  • 輸入:圖像,斑塊,圖像金字塔

  • 骨架:VGG16 [68],ResNet-50 [26],SpineNet [12],EfficientNet-B0 / B7 [75],CSPResNeXt50 [81],CSPDarknet53 [81]

  • 頸部:

    • 其他塊:SPP [25],ASPP [5],RFB [47],SAM [85]
    • 路徑聚合塊:FPN [44],PAN [49],NAS-FPN [17] ],Fully-connected FPN,BiFPN [77],ASFF [48],SFAM [98]
  • Heads :

    • Dense Prediction (密集預(yù)測)(一階段):

      • RPN[64],SSD [50],YOLO [61], RetinaNet [45](基于錨)
      • CornerNet[37],CenterNet [13],MatrixNet [60],FCOS [78](無錨)
    • Sparse Prediction (稀疏預(yù)測)(兩階段):

      • Faster R-CNN [64],R-FCN [9],Mask R-CNN [23](基于錨)
      • RepPoints[87](無錨)

2.2 Bag of freebies

通常來說,目標檢測器都是進行離線訓(xùn)練的(訓(xùn)練的時候?qū)PU數(shù)量和規(guī)格不限制)。因此,研究者總是喜歡揚長避短,使用最好的訓(xùn)練手段,因此可以在不增加推理成本的情況下,獲得最好的檢測精度。我們將只改變訓(xùn)練策略或者只增加訓(xùn)練成本的方法稱之為"bag of freebies"。在目標檢測中經(jīng)常使用并且滿足bag of freebies的定義的算法稱是①數(shù)據(jù)增廣。數(shù)據(jù)增廣的目的是增加輸入圖片的可變性,因此目標檢測模型對從不同場景下獲取的圖片有著更高的魯棒性。舉例來說,photometric distoitions(光度失真)和geometric distortions(幾何失真)是用來數(shù)據(jù)增強方法的兩個常用的手段。在處理photometric distortion中,我們會調(diào)整圖像的亮度,對比度,色調(diào),飽和度以及噪聲。對于geometric distortion,我們會隨機增加尺度變化,裁剪,翻轉(zhuǎn)以及旋轉(zhuǎn)。

上面提及的數(shù)據(jù)增廣的手段都是像素級別的調(diào)整,它保留了調(diào)整區(qū)域的所有原始像素信息。此外,一些研究者將數(shù)據(jù)增廣的重點放在了②模擬目標物體遮擋問題上。他們在圖像分類和目標檢測上已經(jīng)取得了不錯的結(jié)果。具體來說,random erase[100]和CutOut [11]可以隨機選擇圖像上的矩形區(qū)域,然后進行隨機融合或者使用零像素值來進行融合。對于hide-and-seek[69]和grid mask[6],他們隨機地或者均勻地在一幅圖像中選擇多個矩形區(qū)域,并且使用零來代替矩形區(qū)域中的像素值。如果將相似的概念用來特征圖中,出現(xiàn)了DropOut [71],DropConnect [80]和DropBlock [16]方法。此外,一些研究者提出一起使用多張圖像進行數(shù)據(jù)增強的方法。舉例來說,MixUp [92]使用兩張圖片進行相乘并且使用不同的系數(shù)比進行疊加,然后使用它們的疊加比來調(diào)整標簽。對于CutMix [91],它將裁剪的圖片覆蓋到其他圖片的矩形區(qū)域,然后根據(jù)混合區(qū)域的大小調(diào)整標簽。除了上面提及的方法,style transfer GAN[15]也用來數(shù)據(jù)增廣,CNN可以學習如何有效的減少紋理偏差。

一些和上面所提及的不同的方法用來解決數(shù)據(jù)集中的語義分布可能存在偏差的問題。處理語義分布偏差的問題,一個非常重要的問題就是在不同類別之間存在數(shù)據(jù)不平衡,并且這個問題在two-stage目標檢測器中,通常使用hard negative example mining[72]或者online hard example mining[67]來解決。但是example mining 方法并不適用于one-stage的目標檢測器,因為這種類型的檢測器屬于dense prediction架構(gòu)。因此focal loss[45] 算法用來解決不同類別之間數(shù)據(jù)不均衡的問題。③另外一個非常重要的問題就是使用one-hot很難描述不同類別之間關(guān)聯(lián)度的關(guān)系。Label smothing[73]提出在訓(xùn)練的時候,將hard label轉(zhuǎn)換成soft label,這個方法可以使得模型更加的魯棒性。為了得到一個最好的soft label, Islam[33]引入了知識蒸餾的概念來設(shè)計標簽細化網(wǎng)絡(luò)。

最后一個bag of freebies是④設(shè)計邊界框回歸的目標函數(shù)。傳統(tǒng)的目標檢測器通常使用均方根誤差(MSE)在Bbox的中心坐標以及寬高上進行直接的回歸預(yù)測,即 {xcenter,ycenter,w,h}\{x_{center},y_{center},w,h\}{xcenter?ycenter?wh} ,或者左上角和右下角的兩個點,即 {xtop_left,ytop_left,xbottom_right,ybottom_right}\{x_{top\_left},y_{top\_left},x_{bottom\_right},y_{bottom\_right}\}{xtop_left?ytop_left?xbottom_right?ybottom_right?} 進行回歸。對于anchor-based方法,去預(yù)測相應(yīng)的offset,比如 {xcenter_Offset,ycenter_Offset,wOffset,hoffset}\{x_{center\_Offset},y_{center\_Offset},w_{Offset},h_{offset}\}{xcenter_Offset?ycenter_Offset?wOffset?hoffset?}{xtop_left_offset,ytop_left_offset,xbottom_right_offset,ybottom_right_offset}\{x_{top\_left\_offset},y_{top\_left\_offset},x_{bottom\_right\_offset},y_{bottom\_right\_offset}\}{xtop_left_offset?ytop_left_offset?xbottom_right_offset?ybottom_right_offset?}但是,預(yù)測Bbox每個點的坐標值是將這些點作為獨立的變量,但是實際上并沒有將目標物體當成一個整體進行預(yù)測。為了更好的解決這個問題,一些研究者最近提出了IoU loss[[90],它能夠?qū)box區(qū)域和ground truth的BBox區(qū)域的作為整體進行考慮。IoU損失函數(shù)需要計算BBox四個坐標點以及ground truth的IoU。因為IoU具有尺度不變性,它可以解決傳統(tǒng)算法比如 l1,l2l_1,l_2l1?,l2? 范數(shù)計算{x,y,w,h}\{x,y,w,h\}{xywh} 存在的問題,這個損失函數(shù)會隨著尺度的變化而發(fā)生變化。最近,一些研究者繼續(xù)提高IoU損失函數(shù)的性能。舉例來說,除了覆蓋范圍,GIoU[65]還包括目標物體的形狀和坐標。他們提出尋找同時包括預(yù)測的BBox和ground truth的BBox的封閉區(qū)域BBox,然后使用這個BBox作為分母去代替原來Iou損失函數(shù)中的分母。DIoU loss[99]額外考慮了目標物體的中心距離,CIoU [99]另一方面同時將覆蓋區(qū)域,中心點距離和縱橫比考慮在內(nèi)。CIoU在BBox回歸問題上可以獲得最好的收斂速度和準確率。

2.3 Bag of specials

對于那些插件模塊后處理方法,它們僅僅稍微的增加了推理成本,但是可以極大地提高目標檢測的準確度,我們將其稱之為“bag of specials”。一般來說,這些插件模塊用來提高一個模型中特定的屬性,比如增加感受野,引入注意力機制或者提高特征整合的能力等等;后處理方法是用來抑制模型預(yù)測結(jié)果的一種方法。

可以用來提升感受野的常規(guī)的方法是SPP [25],ASPP [5]和RFB [47]。SPP模型來源于空間金字塔匹配(SPM)[39],而且SPMs原始的方法將特征圖劃分成很多d*d個相等的塊,其中d可以是{1,2,3,…},因此可以形成空間金字塔,然后提取bag-of-word的特征。SPP將SPM應(yīng)用在CNN中,然后使用max-pooling代替bag-of-word運算。因為SPP輸出的是一維的特征向量,因此它不能應(yīng)用在全卷積網(wǎng)絡(luò)(FCN)中。在YOLOv3中,Redmon和Farhadi改進了SPP模塊,將max-pooling輸出和內(nèi)核尺寸k*k連接起來,其中k={1,5,8,13},stride=1。基于這個設(shè)計,一個相對較大的k*k的max-pooling有效地提高了backbone特征的感受野。在添加了改進后的SPP模型之后,YOLO-v3-608在COCO數(shù)據(jù)集上,雖然增加了0.5%的額外計算量,但是提高了2.7%的AP50。ASPP模塊和改進的SPP模塊的區(qū)別主要在:原始的k*k過濾器尺寸,從stride=1到3*3內(nèi)核尺寸的max-pooling,在stride=1的碰撞卷積運算中膨脹比為k。RFB模塊使用一些k*k的內(nèi)核,膨脹比為k,步長為1的碰撞卷積,它比ASPP獲得了更全面的空間覆蓋率。RFB在MS COCO數(shù)據(jù)集上僅僅增加了7%的額外推理時間,但是得到了5.7%的AP50提升。

目標檢測上經(jīng)常使用的注意力模塊主要分成channel-wise注意力模塊和point-wise注意力模塊,這兩個注意力模塊主要的代表分別是Squeeze-and-Excitation(SE)[29]和Spatial Attention Module(SAM)[85]。盡管SE模塊在ImageNet圖像分類工作上僅僅增加了2%的計算量而提高了1%的top-1準確率,但是在GPU上提高了10%的推理時間,因此SE模塊更適合在移動設(shè)備上使用。但是對于SAM模塊來說,在ImageNet圖像分類任務(wù)中,它僅僅需要0.1%的額外計算量卻能夠提升ResNet-SE 0.5%的top-1準確率。它在GPU上并沒有有效地影響推理速度。

關(guān)于特征融合,早期的是使用skip connection[51]或者是hyper-column[22]將低級的特征和高級的語義特征進行融合。因為多尺度預(yù)測方法比如FPN逐漸受到追捧,因此提出了很多將不同特征金字塔融合的輕量級模型。這類別的模型包括SfAM[98]、ASFF[48]和BiFPN[77]。SFAM的主要思想是在多尺度連接特征圖上使用channel-wise級別的調(diào)整。對于ASFF,它使用softmax作為point-wise級別的調(diào)整,然后將不同尺度的特征圖加在一起。在BiFPN中,提出使用多輸入權(quán)重殘差連接去執(zhí)行scale-wise級別的調(diào)整,然后將不同尺度的特征圖加在一起。

在深度學習的研究中,一些人重點關(guān)心去尋找一個優(yōu)秀的激活函數(shù)。一個優(yōu)秀的激活函數(shù)可以讓梯度更有效的進行傳播,與此同時它不會增加額外的計算量。在2010年,Nair和Hinton[56]提出了ReLU激活函數(shù)充分地解決了梯度消失的問題,這個問題在傳統(tǒng)的tanh和sigmoid激活函數(shù)中會經(jīng)常遇到。隨后,LReLU [54],PReLU [24],ReLU6 [28],比例指數(shù)線性單位(SELU)[35],Swish [59],hard-Swish [27]和Mish [55]等等相繼提出,它們也用來解決梯度消失的問題。LReLU和PReLU主要用來解決當輸出小于零的時候,ReLU的梯度為零的問題。ReLU6和hard-Swish主要為量化網(wǎng)絡(luò)而設(shè)計。對于神經(jīng)網(wǎng)絡(luò)的自歸一化,提出SELU激活函數(shù)去實現(xiàn)這個目的。需要注意的是Swish和Mish都是連續(xù)可導(dǎo)的激活函數(shù)。

在基于深度學習的目標檢測中使用的后處理方法是NMS,它可以用來過濾那些預(yù)測統(tǒng)一物體、但是效果不好的BBoxes,然后僅僅保留較好的BBoxes。優(yōu)化NMS和優(yōu)化目標方程的方法異曲同工。NMS提出的最初的方法并沒有將上下文信息考慮在內(nèi),因此Girshick[19]在R-CNN中添加了分類置信度作為參考,然后根據(jù)置信度得分的順序,由高到低執(zhí)行g(shù)reedy NMS。對于soft NMS來說,它考慮了這樣一個問題:在greedy NMS使用IoU的時候,目標遮擋可能會造成置信度得分的退化。在soft NMS基礎(chǔ)上,DIoU NMS將重心坐標的距離信息添加到Bbox的篩選處理中了。值得一提的是,上面提到的后處理方法中都不直接引用捕獲的圖像特征,后續(xù)的anchor-free方法開發(fā)中不再需要后處理。

3 方法

我們工作基本的目標就是在生產(chǎn)系統(tǒng)和優(yōu)化并行預(yù)算中加快神經(jīng)網(wǎng)絡(luò)的速度,而非降低計算量理論指標(BFLOP)。我們提供了兩個實時神經(jīng)網(wǎng)絡(luò)的選擇:

  • GPU 在卷積層中,我們使用少量的組(1-8): CSPResNeXt50 / CSPDarknet53
  • VPU 我們使用分組卷積,但是我們不使用Squeeze-and-excitement(SE)模塊,具體包括以下模型:EfficientNet-lite / MixNet / GhostNet / MobileNetV3

3.1 網(wǎng)絡(luò)架構(gòu)的選擇

我們的目標是尋找 輸入網(wǎng)絡(luò)的分辨率、卷積層的個數(shù)、參數(shù)的數(shù)量 (filter_size2?filters?channel/groups)(filter\_size^2*filters*channel/groups)(filter_size2?filters?channel/groups)以及輸出層的個數(shù)(filters)之間的最優(yōu)的平衡。舉例來說,大量的研究表明:在ILSVRC2012(ImageNet)的目標檢測上,CSPResNext50比CSPDarket53的效果更好,但是在MS COCO的目標檢測中,兩個的效果恰好相反。

下一個目標就是選擇額外的模塊去增加感受野以及為不同檢測器不同的backbone選擇參數(shù)聚合的最佳方法。比如:FPN, PAN, ASFF, BiFPN。

在分類任務(wù)上最優(yōu)的模型在檢測上未必就是最優(yōu)的。和分類任務(wù)相比,檢測器需要以下要求:

  • 更好的輸入尺寸(分辨率)- 為了檢測多個小物體
  • 更多網(wǎng)路層 - 為了獲得更大的感受野去覆蓋不斷增大的輸入尺寸
  • 更多的參數(shù) - 提高模型的能力從而能夠在一張圖片上檢測到不同尺寸的多個物體。

假設(shè)來說,我們可以認為具有更大感受野(有大量的3*3的卷積層)和具有大量參數(shù)的模型應(yīng)當作為檢測器的backbone。表格1展示了CSPResNetXt50, CSPDarkent53以及EfficientNet B3的相關(guān)信息。CSPResNetXt50僅僅只有16個3*3的卷積層,一個425*425的感受野和20.6M個參數(shù),然而CSPDarkent53有29個3*3的卷積層,725*725的感受野和27.6M個參數(shù)。從理論證明和大量的實驗表明在這兩個模型中,CSPDarkent53是作為檢測器的backbone最優(yōu)的選擇

不同尺寸的感受野的影響總結(jié)如下:

  • 等于目標物體的大小時:能夠看到整個物體
  • 等于網(wǎng)絡(luò)的尺寸:能夠看到目標物體周圍的上下文信息
  • 大于網(wǎng)絡(luò)的尺寸:增加圖像點和最終激活之間連接的數(shù)量

我們將SPP模塊添加到CSPDarknet53中,因為它極大提高了感受野,能夠分離出最重要的上下文特征而且沒有降低網(wǎng)絡(luò)運行的速度。我們使用PANet作為不同檢測器不同backbone訓(xùn)練階段聚集參數(shù)的方法,而非YOLOv3的FPN模塊。

最后,我們選擇CSPDarknet53作為backbone, SPP作為附加的模塊,PANet 作為neck,使用YOLOv3作為YOLOv4架構(gòu)的head。

未來,我們計劃擴展檢測器的Bag of freebies,它們在理論上可以解決某些問題并且能夠提高檢測器的精度,后續(xù)會以實驗的形式探究每個算法對檢測器的影響。

我們沒有使用Cross-GPU Batch Normalization(CGBN 或者 SyncBN) 或者昂貴的定制設(shè)備。這能夠使得任何人在一個GPU上就可以得到最先進的結(jié)果,比如在GTX 1080Ti或者RTX 2080Ti。

3.2 BoF 和 BoS的選擇

為了提高目標檢測的訓(xùn)練,CNN通常使用下面一些技巧:

  • 激活:ReLU,leaky-ReLU,parameter-ReLU,ReLU6,SELU,Swish或Mish
  • 邊界框回歸損失:MSE,IoU,GIoU,CIoU,DIoU
  • 數(shù)據(jù)增強:CutOut,MixUp,CutMix
  • 正則化方法:DropOut, DropPath [36],Spatial DropOut [79]或DropBlock
  • 通過均值和方差對網(wǎng)絡(luò)激活進行歸一化:Batch Normalization (BN) [32],Cross-GPU Batch Normalization (CGBN or SyncBN)[93], Filter Response Normalization (FRN) [70], orCross-Iteration Batch Normalization (CBN) [89]
  • 跨連接:Residual connections, Weightedresidual connections, Multi-input weighted residualconnections, or Cross stage partial connections (CSP)

對于訓(xùn)練激活函數(shù),因為PReLU和SELU難以訓(xùn)練,并且RELU6是專門為量化網(wǎng)絡(luò)設(shè)計的,我們因此不考慮這這三個激活函數(shù)。在正則化方法中,提出DropBlok的學者將其算法和其他算法進行了比較,然后DropBolck效果更好。因此我們毫不猶豫的選擇DropBlock作為我們的正則化方法。在歸一化方法的選擇中,因為我們關(guān)注在一塊GPU上的訓(xùn)練策略,因此我們不考慮syncBN。

3.3 額外的改進

為了讓檢測器更適合在單個GPU上進行訓(xùn)練,我們做了以下額外的設(shè)計和改進:

  • 我們提出了數(shù)據(jù)增廣的新的方法:Mosaic和Self-Adversarial Training(SAT)

  • 在應(yīng)用遺傳算法去選擇最優(yōu)的超參數(shù)

  • 我們改進了一些現(xiàn)有的算法,讓我們的設(shè)計更適合高效的訓(xùn)練和檢測 - 改進SAM, 改進PAN以及Cross mini-Batch Normalization(CmBN)


Mosaic是一種新型的數(shù)據(jù)增廣的算法,它混合了四張訓(xùn)練圖片。因此有四種不同的上下文進行融合,然而CutMix僅僅將兩張圖片進行融合。此外,batch normalization在每個網(wǎng)絡(luò)層中計算四張不同圖片的激活統(tǒng)計。這極大減少了一個大的mini-batch尺寸的需求。

自適應(yīng)對抗訓(xùn)練(SAT)也表示了一個新的數(shù)據(jù)增廣的技巧,它在前后兩階段上進行操作。在第一階段,神經(jīng)網(wǎng)絡(luò)代替原始的圖片而非網(wǎng)絡(luò)的權(quán)重。用這種方式,神經(jīng)網(wǎng)絡(luò)自己進行對抗訓(xùn)練,代替原始的圖片去創(chuàng)建圖片中此處沒有期望物體的描述。在第二階段,神經(jīng)網(wǎng)絡(luò)使用常規(guī)的方法進行訓(xùn)練,在修改之后的圖片上進檢測物體。

正如圖4中顯示,CmBN(Cross mini-Batch Normalization)代表CBN改進的版本。它只收集了一個批次中的mini-batches之間的統(tǒng)計數(shù)據(jù)。

我們將SAM的spatial-wise注意力變成了point-wise注意力機制,然后將PAN中的shortcut連接變成了concatenation連接,正如圖5和圖6所表示的那樣。

3.4 YOLOv4

在這個部分,我們會詳細介紹YOLOv4的細節(jié):

YOLOv4網(wǎng)絡(luò)架構(gòu)的細節(jié)

網(wǎng)絡(luò)組成

Backbone

Neck

Head

采用模塊

CSPDarknet53

SPP, PAN

YOLOv3

BoF

CutMix and Mosaic data augmentation

DropBlock regularization

Class label smoothing

?

CIoU-loss

CmBN

DropBlock regularization

Mosaic data augmentation

Self-Adversarial Training

Eliminate grid sensitivity

Using multiple anchors for a single ground truth

Cosine annealing scheduler

Optimal hyperparameters

Random training shapes

BoS

Mish activation

Cross-stage partial connections(CSP)

Multi-input weighted residual connections (MiWRC)

?

Mish activation

SPP-block

SAM-block

PAN path-aggregation block

DIoU-NMS

模塊作用

在ImageNet上進行預(yù)訓(xùn)練

融合不同位置上的特征圖

進行預(yù)測

4 實驗

我們測試了不同訓(xùn)練提升技巧在ImageNet(ILSVRC2012 val)數(shù)據(jù)集上的精度影響,然后又驗證了檢測器在MS COCO(test-val 2017)數(shù)據(jù)集的準確率。

4.1 實驗參數(shù)配置

在ImageNet圖像分類實驗中,默認的超參數(shù)如下:訓(xùn)練步長為8,000,000;batch size和mini-batch size分別為128和32;polynominal decay learning rate scheduling strategy初始的學習率為0.1;warm-up步長為1000;momentum和weight decay分別設(shè)置為0.9和0.005。所有的BoS實驗使用相同的、默認的超參數(shù),在BoF實驗中,我們增加了一半的訓(xùn)練步長。在BoF實驗中,我們驗證了MixUp, CutMix, Mosaic, Bluring數(shù)據(jù)增加一節(jié)label smoothing regularization方法。在BoS實驗中,我們比較了LReLU,Swish和Mish激活函數(shù)的影響。所有的實驗都在1080Ti或者2080Ti GPU上進行訓(xùn)練。

在MS COCO目標檢測實驗中,默認的超參數(shù)如下:訓(xùn)練步長為500,500;the step decay learning rate scheduling strategy初始化學習率為0.01在步長為400,000和450,000的時候乘以0.1;momentum和weight decay分別設(shè)置為0.9和0.0005。所有的架構(gòu)在一塊GPU進行多尺度訓(xùn)練,它的batch size為64,然而它的mini-batch為8還是4取決于網(wǎng)絡(luò)架構(gòu)和GPU的內(nèi)存限制。除了對尋找最優(yōu)的超參數(shù)使用遺傳算法之外,其他所有的實驗都使用默認的設(shè)置。遺傳算法和GIoU使用YOLOv3-SPP進行訓(xùn)練,并且為5k個min-val進行300個epochs。對我們采用搜索的學習率為0.00261,momentum為0.949,IoU閾值為設(shè)置為0.213,遺傳算法實驗的損失標準化為0.07。我們還驗證了大量的BoF算法,包括grid sensitivity elimination, mosaic數(shù)據(jù)增廣,IoU閾值化,遺傳算法,class label smoothing, cross mini-batch normalization,self-adversarial training,cosine anneling scheduler, dynamic mini-batch size, DropBlock, Optimized Anchors, 不同的IoU損失函數(shù)。我們也在不同BoS算法上進行了實驗,包括Mish,SPP,SAM,RFB,BiFBN以及Gaussiian YOLO。所有的實驗我們僅僅使用一個GPU進行訓(xùn)練,因此比如syncBN的優(yōu)化多個GPU的技巧我們并沒有使用。

4.2 不同算法在分類器訓(xùn)練上的影響

首先,我們研究了不同算法在分類器訓(xùn)練上的影響;具體來說,Class label smoothing(類標簽平滑)的影響,不同數(shù)據(jù)增廣技巧,bilateral blurring(雙邊模糊),MixUp, CutMix和Mosaic(馬賽克)的印象在圖7中顯示,以及不同激活函數(shù)的影響,比如Leaky-ReLU(默認的),Swish和Mish。

在表2中所示,在我們的實驗中,通過引入一些算法,分類器的準確率得到了提升,這些算法包括:CutMix和Mosaic數(shù)據(jù)增廣,Class label smoothing和Mish激活函數(shù)。結(jié)果,我們的用于分類器訓(xùn)練的BoF-backbone(Bag of Freebies)包括:Cutmix 和Mosaic數(shù)據(jù)增廣算法以及Class labelsmoothing。正如表2和表3所示,我們將Mish激活函數(shù)作為補充的選項。

4.3 不同算法在檢測器訓(xùn)練上的影響

進一步的研究關(guān)注不同Bag-of-Freebies(BoF-detector)在檢測器訓(xùn)練準確度的影響,正如表4所示。通過研究能夠提高檢測器準確度的算法,我們極大地擴展了BoF的算法選項,而且并沒有影響FPS:

  • S:消除柵格的敏感度 這個方程在YOLOv3中用于評估目標物體的坐標,自重cx和cy通常是整數(shù),因此,當bx的值非常接近cx或者cx+1的時候,tx的絕對值會非常大。我們通過給sigmoid函數(shù)乘以一個大于1的因子來解決這個問題,因此,這樣就消除了柵格對不可檢測物體的影響。
  • M:Mosaic數(shù)據(jù)增廣 - 在訓(xùn)練過程中,使用四張圖片而非一張進行增廣處理
  • IT:IoU****閾值 - 為一個ground truth的IoU使用多個anchors,ground truth IoU(truth, anchor) > IoU 閾值
  • GA:遺傳算法 - 在前10%的訓(xùn)練時間內(nèi)使用遺傳算法選擇最優(yōu)的超參數(shù)
  • LS:C****lass label smoothing - 為sigmoid激活函數(shù)使用class label smoothing。
  • CBN:CmBN - 在整個批次中通過使用Cross mini-Batch Normalization收集統(tǒng)計數(shù)據(jù),而非在單獨的mini-batch中收集統(tǒng)計數(shù)據(jù)。
  • CA:Cosine annealing scheduler - 在sinusoid訓(xùn)練中改變學習率
  • DM:動態(tài)的mini-batch尺寸 - 在低分辨率的訓(xùn)練過程中,通過隨機訓(xùn)練形狀自動的改提高mini-batch的尺寸。
  • OA: 優(yōu)化Anchors - 使用優(yōu)化的anchors進行訓(xùn)練,網(wǎng)絡(luò)的分辨率為512*512
  • GIoU, CIoU, DIoU, MSE - 為邊界框回歸使用不同的損失函數(shù)。

下一步的研究關(guān)心在檢測器訓(xùn)練準確度上,不同Bag-of-Specials(BoS-detector)的影響,包括PAN, RFB, SAM, Gaussian YOLO(G),以及ASFF,正如表5所示。在我們的實驗中,當使用SPP, PAN和SAM的時候,檢測器得到了最好的性能。


4.4 不同backbones和預(yù)訓(xùn)練權(quán)重在檢測器訓(xùn)練中的影響

下一步我們研究不同backbones模型在檢測器準確率上的影響,正如表6所示。我們注意到擁有最佳分類準確率的模型,檢測器的準確度未必是最佳的。

首先,盡管使用不同算法訓(xùn)練得到的CSPResNeXt-50模型的分類精度比CSPDarknet53模型的要高,但是CSPDarknet53模型的檢測精度更高。

再者,CSPResNeXt-50分類器訓(xùn)練使用BoF和Mish提高了它的分類準確率,但是檢測器訓(xùn)練使用的預(yù)訓(xùn)練權(quán)重的進一步使用減少了檢測器的精度。但是,CSPDarknet53分類器訓(xùn)練使用BoF和Mish提高了分類器和檢測器的準確率,它使用分類器預(yù)訓(xùn)練權(quán)重。這表示CSPDarknet53比CSPResNeXt-50更適合作為檢測器。

我們觀察到,由于各種改進,CSPDarknet53模型顯示出了更大的提高的檢測器精度的能力

4.5 不同mini-batch尺寸在檢測器訓(xùn)練上的影響

最后,我們分析了不同mini-batch尺寸的訓(xùn)練的模型的結(jié)果,并且結(jié)果在表7中顯示出來。從表7中我們發(fā)現(xiàn)在添加了BoF和BoS訓(xùn)練策略之后,mini-batch尺寸幾乎對檢測器的性能沒有影響。結(jié)果顯示在引入了BoF和BoS之后,就不需要使用昂貴的GPUs進行訓(xùn)練。換句話說,任何人可以僅僅使用一個GPU去訓(xùn)練一個優(yōu)秀的檢測器。

5 結(jié)果

使用最先進的目標檢測器得到的對比結(jié)果在圖8中顯示(具體請看原文)。我們的YOLOv4坐落在帕累托最優(yōu)曲線上,而且在精度和速度上都優(yōu)于目前最快的和最準確的檢測器。

6 結(jié)論

我們提出了一個最先進的目標檢測器,它比所有檢測器都要快而且更準確。這個檢測器可以僅在一塊8-16GB的GPU上進行訓(xùn)練,這使得它可以廣泛的使用。One-stage的anchor-based的檢測器的原始概念證明是可行的。我們已經(jīng)驗證了大量的特征,并且其用于提高分類器和檢測器的精度。這些算法可以作為未來研究和發(fā)展的最佳實踐。

總結(jié)

以上是生活随笔為你收集整理的深度学习目标检测之 YOLO v4的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。