【論文筆記】YOLOv4: Optimal Speed and Accuracy of Object Detection
論文地址:https://arxiv.org/abs/2004.10934v1
github地址:https://github.com/AlexeyAB/darknet
摘要:
有很多特徵可以提高卷積神經網路(CNN)的準確性。需要在大型資料集上對這些特徵的組合進行實際測試,並需要對結果進行理論證明來驗證這些特徵的有效性。 某些特徵僅在某些模型上執行,並且僅在某些問題上執行,或者僅在小型資料集上執行; 而某些特徵(例如批歸一化和殘差連線)適用於大多數模型,任務和資料集。 我們假設此類通用特徵包括加權殘差連線(WRC),跨階段部分連線(CSP),交叉小批量標準化(CmBN),自對抗訓練(SAT)和Mish啟用。 我們使用以下新特徵:WRC,CSP,CmBN,SAT,Mish啟用,馬賽克資料增強,CmBN,DropBlock正則化和CIoU丟失,並結合其中的一些特徵來實現最先進的結果:在MS COCO資料集上,用Tesla V100Tesla V100以65 FPS的實時速度獲得43.5%AP(65.7%AP50) 。
1.介紹:
大多數基於CNN的物體檢測器僅適用於推薦系統。 例如,通過慢速精確模型執行的城市攝像機搜尋免費停車位,而汽車碰撞警告與快速不精確模型有關。 提高實時物體檢測器的精度不僅可以將它們用於提示生成推薦系統,還可以用於獨立的過程管理和減少人工輸入。 常規圖形處理單元(GPU)上的實時物件檢測器允許以可承受的價格對其進行操作。 最精確的現代神經網路不能實時執行,需要使用大量GPU用大min-batch-size進行訓練,我們通過建立在常規GPU上實時執行的CNN來解決此類問題,也就是訓練只需要一個常規GPU。
這項工作的主要目標是在生產系統中設計一個快速執行的目標探測器,並對平行計算進行優化,而不是設計一個低計算量的理論指示器(BFLOP)。我們希望設計的檢測器可以很容易地訓練和使用。例如,任何使用傳統GPU進行訓練和測試的人都可以獲得實時、高質量、令人信服的物件檢測結果,如圖1所示的YOLOv4結果。
我們的主要貢獻如下:
- 我們開發了一個高效、強大的目標檢測模型。它使每個人都可以使用1080 Ti或2080 Ti GPU來訓練一個超級快速和準確的目標探測器。
- 我們驗證了在檢測器訓練的過程中最先進的 Bag-of Freebies 和Bag-of-Specials methods of object detection的影響。
- 我們修改了最先進的方法使得它們在單個GPU上訓練更有效和適合,例如CBN、PAN、SAM等等。
2.相關工作:
2.1 目標檢測模型
現代檢測器通常由兩個部分組成,一個是在ImageNet上預訓練的主幹,另一個是用來預測物體的類別和邊界框的頭部。對於那些執行在GPU平臺上的檢測器,它們的主幹可以是VGG[68]、ResNet[26]、ResNeXt[86]或DenseNet[30]。對於那些執行在CPU平臺上的檢測器,它們的主幹可以是SqueezeNet[31]、MobileNet[28,66,27,74]或ShuffleNet[97,53]。至於頭部,通常分為兩類:、一階段目標檢測器和二階段目標檢測器。最具代表性的二階段目標探測器是R-CNN[19]系列,包括fast R-CNN [18], faster R-CNN [64], R-FCN [9], Libra R-CNN[58]。也可以使兩級物件檢測器成為anchor-free物件檢測器,如RepPoints[87]。一階段目標探測器最具代表性的模型有YOLO[61, 62, 63]、SSD[50]、RetinaNet[45]。近年來,anchor-free一階段目標探測器得到了廣泛的應用。這類探測器有CenterNet[13]、CornerNet[37,38]、FCOS[78]等。近年來發展起來的目標探測器常常在主幹和頭部之間插入一些層,這些層通常用來收集不同階段的特徵圖。我們可以稱它為物體探測器的頸部。通常,一個頸部是由幾個自底向上的路徑和幾個自頂向下的路徑組成。具有該機制的網路包括特徵金字塔網路(Feature Pyramid Network, FPN)[44]、路徑匯聚網路(Path Aggregation Network, PAN)[49]、BiFPN[77]和NAS-FPN[17]。除了上述模型外,一些研究者還著重於直接構建一個新的主幹(DetNet [43], DetNAS[7])或一個新的整體模型(SpineNet [12], HitDetector[20])用於物件檢測。
綜上所述,一個普通的物體探測器是由幾個部分組成的:
2.2 Bag of freebies
通常,傳統的目標探測器是離線訓練的。因此,研究人員總是希望利用這一優勢,開發出更好的訓練方法,使目標探測器在不增加推理成本的情況下獲得更好的精度。我們稱這些方法為只改變訓練策略或只增加訓練成本的免費贈品。物件檢測方法中經常採用的、符合贈品包定義的是資料擴充。資料擴充的目的是增加輸入影象的可變性,使所設計的目標檢測模型對不同環境下獲得的影象具有更高的魯棒性。例如,光度畸變和幾何畸變是兩種常用的資料增強方法,它們對目標檢測任務有明顯的好處。在處理光度失真時,我們調整影象的亮度、對比度、色調、飽和度和噪聲。對於幾何畸變,我們添加了隨機縮放、剪下、翻轉和旋轉。
上述資料增強方法均為畫素級調整,調整區域內的所有原始畫素資訊均保留。此外,一些從事資料擴充的研究人員把重點放在模擬物體遮擋問題上。在影象分類和目標檢測方面取得了良好的效果。例如,random wipe[100]和CutOut[11]可以隨機選擇影象中的矩形區域,並填充一個隨機的或互補的0值。對於hide-and-seek[69]和grid mask[6],它們隨機或均勻地選擇影象中的多個矩形區域,並將其全部替換為零。如果將類似的概念應用於feature map,則有DropOut[71]、DropConnect[80]和DropBlock[16]方法。此外,一些研究者提出了將多幅影象結合在一起進行資料擴充的方法。例如,MixUp[92]使用兩幅影象以不同的係數比率進行相乘和疊加,然後利用這些疊加比率調整標籤。CutMix[91]是將裁剪後的影象覆蓋到其他影象的矩形區域,並根據混合區域的大小調整標籤。除了上述方法外,style transfer GAN[15]也被用於資料擴充,這樣的使用可以有效的減少CNN學習到的紋理偏差。
與上述各種方法不同,其他一些免費贈品方法致力於解決資料集中的語義分佈可能存在偏差的問題。在處理語義分佈偏差問題時,一個非常重要的問題是存在著不同類之間的資料不平衡問題,這一問題通常通過兩階段物件檢測器中的hard example mining[72]或online hard example mining[67]來解決。但the example mining不適用於單級目標探測器,因為這種探測器屬於稠密預測結構。因此,Lin等人提出了focal loss來處理各類之間存在的資料不平衡問題。另一個非常重要的問題是,很難用一個one-hot hard representation來表達不同類別之間關聯程度的關係。這種表示法常用於執行標記。文獻[73]提出的label smoothing是將硬標籤轉換為軟標籤進行訓練,使模型更加穩健。為了獲得更好的軟標籤,Islam等人在[33]中引入了knowledge distillation的概念來設計標籤細化網路。
最後一袋免費贈品是Bounding Box Regression的目標函式。傳統的目標檢測器通常使用均方誤差(Mean Square Error, MSE)直接對BBox的中心點座標和高度、寬度進行迴歸,即, {xcenter, ycenter, w, h},或左上點和右下點,即, {xtop lef t, ytop lef t, xbottom right, ybottom right}。對於基於anchor的方法,是對相應的偏移量進行估計,{xcenter offset, ycenter offset, woffset, hoffset} and {xtop left offset, ytop left offset, xbottom right offset, ybottom right offset}。但是,直接估計BBox中每個點的座標值,就是把這些點當作自變數,而實際上並不考慮物件本身的完整性。為了更好地處理這個問題,一些研究者最近提出了IoU損失[90],將預測的BBox區域的覆蓋範圍和ground truth BBox區域考慮在內。IoU的損失計算過程通過執行帶有ground truth的IoU,觸發BBox的四個座標點的計算,然後將生成的結果連線成一個完整的程式碼。由於IoU是尺度不變的表示,它可以解決傳統方法在計算{x, y, w, h}的l1或l2損耗時,損耗會隨著尺度的增大而增大的問題。最近,一些研究人員繼續改善IoU損失。例如GIoU loss[65],除了覆蓋區域外,還包括了物體的形狀和方向。他們提出尋找能夠同時覆蓋預測的BBox和ground truth BBox的最小面積BBox,用這個BBox作為分母來代替IoU損失中原來使用的分母。對於DIoU loss[99],它額外考慮了物體中心的距離,而CIoU loss[99],同時考慮了重疊區域、中心點之間的距離和長寬比。在BBox迴歸問題上,CIoU具有較好的收斂速度和精度。
2.3 Bag of specials
對於那些僅增加少量推理成本,卻能顯著提高目標檢測精度的外掛模組和後處理方法,我們稱之為特價包。這些外掛模組一般用於增強模型中的某些屬性,如擴大接受域、引入注意機制、增強特徵整合能力等,後處理是篩選模型預測結果的一種方法。
可以用來增強感受野的常用模組有SPP[25]、ASPP[5]和RFB[47]。SPP模組起源於空間金字塔匹配(SPM) [39], SPMs原始方法是將feature map分割成幾個相等的d×d塊,其中d可以是{1,2,3,…,}從而形成空間金字塔,然後提取bag-of-word特徵。SPP將SPM整合到CNN中,使用max-pooling操作,而不是bag-of-word操作。由於He等人提出的SPP模組會輸出一維特徵向量,因此在全卷積網路(FCN)中應用是不可行的。因此,在YOLOv3[63]的設計中,Redmon和Farhadi將SPP模組改進為最大池化輸出與核大小k×k級聯,其中k = {1,5,9,13}, stride = 1。在本設計中,較大的k×k的max pooling有效地增加了骨幹特徵的接受域。在新增SPP模組的改進版本後,YOLOv3-608在MS COCO物件檢測任務上在AP50提升了了2.7%,增加了0.5%的額外計算量。ASPP[5]模組與改進後的SPP模組在運算上的區別主要體現在原始的k×k核大小,stride為1的最大池化大小到幾個3×3核大小,擴充套件比為k,擴展卷積運算的stride為1。RFB模組是利用k×k kernel的幾個展開卷積,展開比等於k, stride等於1,得到比ASPP更全面的空間覆蓋。RFB[47]只需額外花費7%的推理時間,就可以將MS COCO上SSD的AP50增加5.7%。(這裡ASPP和SPP翻譯不太好,需要了解的看論文原文)。
在目標檢測中經常使用的注意模組主要分為兩種:通道式注意和點態注意,這兩種注意模型的代表分別是擠壓-激勵(squeeze -and-激勵,SE)[29]和空間注意模組(Spatial attention module, SAM)[85]。儘管SE模組可以改善ResNet50 ImageNet影象分類任務中1%精度,代價只會增加2%的計算工作。但是在GPU通常會增加推理時間約10%,所以它更適合用於移動裝置。但是對於SAM,它只需要額外支付0.1%的計算量,它可以提高ResNet50-SE在ImageNet影象分類任務上的0.5% top-1準確率。最重要的是,它完全不影響GPU上的推理速度。
在特徵整合方面,早期的實踐是使用跳躍連線[51]或hyper-column[22]將低階物理特徵整合到高階語義特徵。隨著FPN等多尺度預測方法的流行,人們提出了許多融合不同特徵金字塔的輕量級模型。這類模組包括SFAM[98]、ASFF[48]和BiFPN[77]。SFAM的主要思想是利用SE模組對多尺度的拼接特徵圖進行通道級配重權。對於ASFF,它使用softmax作為點向水平重加權,然後新增不同尺度的特徵對映。在BiFPN中,提出了多輸入加權剩餘連線來執行按比例加權的水平重加權,然後加入不同比例的特徵對映。
在深度學習的研究中,一些人把重點放在尋找良好的啟用功能上。一個好的啟用函式可以使梯度更有效地傳播,同時也不會造成過多的計算開銷。2010年,Nair和Hinton[56]提出ReLU,從本質上解決了傳統tanh和sigmoid啟用函式中經常遇到的梯度消失問題。隨後,LReLU[54]、PReLU[24]、ReLU6[28]、標度指數線性單元(SELU)[35]、Swish[59]、hard-Swish[27]、Mish[55]等也被用於解決梯度消失問題。LReLU和PReLU的主要目的是解決輸出小於0時ReLU的梯度為零的問題。對於ReLU6和hard-Swish,它們是專門為量化網路設計的。為了實現神經網路的自歸一化,提出了SELU啟用函式。需要注意的一點是,Swish和Mish都是連續可微的啟用函式。
基於深度挖掘的物件檢測中常用的後處理方法是NMS,它可以過濾那些對同一物件預測較差的bbox,只保留響應較高的候選bbox。NMS試圖改進的方法與優化目標函式的方法是一致的。NMS提出的原始方法沒有考慮上下文資訊,所以Girshick等人[19]在R-CNN中加入了分類置信度評分作為參考,按照置信度評分的順序,從高到低依次進行貪婪NMS。對於soft NMS[1],考慮了在IoU評分的貪心NMS中,物件的遮擋可能會導致信心評分下降的問題。DIoU NMS[99]開發人員的思路是在軟NMS的基礎上,將中心點距離資訊新增到BBox篩選過程中。值得一提的是,由於以上的後處理方法都不直接引用捕獲的影象特徵,因此在後續的無錨方法開發中不再需要後處理。
3、方法論
其基本目標是在生產系統中提高神經網路的執行速度和平行計算的優化速度,而不是低計算量理論指標(BFLOP)。我們提出了實時神經網路的兩種選擇:
- 對於GPU,我們在卷積層中使用少量的組(1 - 8):CSPResNeXt50 / CSPDarknet53
- 對於VPU,我們使用grouped-convolution,但是我們不使用(SE)塊,具體來說,這包括以下模型:EfficientNet-lite / MixNet [76] / GhostNet [21] / MobileNetV3
3.1 選擇的技術
我們的目標是在輸入網路解析度、卷積層數、引數數(filter size2 * filters * channel / groups)和層輸出數(filter)之間找到最優的平衡。例如,我們的大量研究表明,在ILSVRC2012 (ImageNet)資料集[10]上的物件分類方面,CSPResNext50要比CSPDarknet53好得多。然而,相反地,CSPDarknet53在檢測MS COCO資料集[46]上的物件方面優於CSPResNext50。
下一個目標是選擇另外的模組來增加感受野,並從不同主幹級別中為檢測器級別,例如FPN、PAN、ASFF、BiFPN等選擇引數聚合的最佳方法。
對分類最優的參考模型不一定對檢測器最優。與分類不同,檢測器需要以下特性:
- 更大的網路輸入,用於檢測小目標
- 更多的層-以獲得更大的感受野來覆蓋增大的輸入影象
- 更多的引數-為了增強從單張影象中檢測出不同大小的多個物件的能力
假設我們可以選擇一個接受域較大的模型(包含較多的3×3 convolutional layers)和較多的parameter作為主幹。表1顯示了CSPResNeXt50、CSPDarknet53和Effi- cientNet B3的資訊。CSPResNext50只包含16個3×3卷積層,一個425 ×425的接受域和20.6 M的引數,而CSPDarknet53包含29個3×3卷積層,一個725×725的接受域和27.6 M的引數。這一理論證明,以及我們的大量實驗,表明CSPDarknet53神經網路在兩者中是作為探測器主幹的最佳模型。
不同大小的感受野對檢測效果的影響如下所示:
- 達到物件的大小 -允許看到整個物件
- 達到網路的大小-允許觀測到物件的上下文資訊
- 超越網路大小-增加影象點和最終啟用之間的連線數量
我們在CSPDarknet53上添加了SPP塊,因為它顯著地增加了接受域,分離出最重要的上下文特徵,並且幾乎不會導致網路執行速度的降低。我們使用PANet作為從不同的骨組織水平對不同的檢測器水平進行引數聚合的方法,而不是YOLOv3中使用的fpn。
最後,我們選擇CSPDarknet53主幹、SPP新增模組、PANet路徑聚集頸和YOLOv3(基於錨的)頭作為YOLOv4的架構。
在未來,我們計劃大幅擴充套件探測器的免費贈品包(BoF)的內容,理論上可以解決一些問題,提高探測精度,並以實驗的方式依次檢查每種特性的影響。
我們不使用跨gpu批處理標準化(CGBNor SyncBN)或昂貴的專用裝置。這使得任何人都可以在傳統的圖形處理器(如GTX 1080Ti或RTX2080Ti)上重現我們的最新成果。
總結:3.1節的核心
- 選擇CSPDarknet53主幹
- 使用SPP模組來增大感受野
- 使用PANet中的路徑聚合模組
- 使用YOLOV3中的頭部
3.2 選擇BoF和BoS
卷積神經網路可使用的技術:
對於訓練啟用函式,由於PReLU和SELU更難訓練,而ReLU6是專門為量化網路設計的,因此我們將上述啟用函式從候選列表中刪除。在reqularization方法上,發表DropBlock的人詳細的將他們的方法與其他方法進行了比較,他們的regularization方法取得了很大的成果。因此,我們毫不猶豫的選擇了DropBlock作為我們的regularization方法。在歸一化方法的選擇上,由於我們關注的是隻使用一個GPU的訓練策略,所以沒有考慮syncBN。
總結:3.2節核心
- 不考慮PReLU、SELU、RELU6啟用函式
- 使用DropBlock正則化方法
- 不適用syncBN
3.3 另外的改善
為了讓設計的檢測器更適合在單個GPU上進行訓練,進行了如下改善:
- 提出了新的資料增強方法:Mosaic, and Self-Adversarial Training (SAT)
- 使用遺傳演算法來選擇超引數
- 修改了一些現有的方法,使我們的設計適合於有效的訓練和檢測-修改的SAM,修改的PAN,和交叉小批量標準化(CmBN)
Mosaic:混合四張訓練影象,所以四個不同的上下文資訊被混合,而CutMix只混合了2種。這允許檢測正常上下文之外的物件。此外,BN在每一層從4個不同的影象計算啟用統計量。這大大減少了對large mini-batch-size需求。
自對抗訓練(SAT)也代表了一種新的資料擴充技術,它分前後兩個階段進行操作。在第一階段,神經網路改變原始影象而不是網路權值。通過這種方式,神經網路對自己執行一種對抗性攻擊,改變原始影象,製造影象上沒有期望物件的假象。第二階段訓練神經網路對修改後的影象進行正常的目標檢測。
CmBN表示CBN的修改版本,如圖4所示,定義為跨微批量標準化(CmBN)。這僅收集單個批中的小批之間的統計資訊。
我們將SAM從空間上的注意修改為點注意,並將PAN的快捷連線改為拼接,分別如圖5和圖6所示。
3.4 YOLOV4
直接直接放英文好理解:
4. 實驗
我們在ImageNet (ILSVRC 2012 val)資料集上測試了不同的訓練改進技術對分類器精度的影響,然後在MS COCO (test-dev 2017)資料集上測試了檢測器的精度。
4.1 實驗設定
還是英文比較方便:
4.1 不同特徵對分類器訓練的影響
使用CutMix+Mosaic+Label Smoothing+Mish的效果最好。
4.3 不同特徵對檢測器訓練的影響
首先是表格中的縮寫的含義:
使用S+M+IT+GA+OA+GIOU效果最好。
使用CSPResNeXt50-PANet-SPP-SAM效果最好。
4.4 不同主幹和預訓練權重對檢測器訓練的影響
在分類上表現好的模型在檢測上表現不總是最好的。
首先,雖然不同特徵訓練的CSPResNeXt- 50模型的分類精度要高於CSPDarknet53模型,但CSPDarknet53模型在目標檢測方面具有更高的精度。
其次,在CSPResNeXt50分類器訓練中使用BoF和Mish可以提高分類精度,但是在檢測器訓練中進一步使用這些預訓練權重會降低檢測器的精度。然而,在CSPDarknet53分類器訓練中使用BoF和Mish可以提高分類器和使用該分類器預訓練權重的檢測器的準確性。最終的結果是CSPDarknet53基幹比CSPResNeXt50更適合於探測器。我們觀察到,由於各種改進,CSPDarknet53模型顯示出了更大的提高探測器精度的能力。
4.5 不同Mini-batch size對檢測器訓練的影響
最後,我們對不同小批量模型訓練得到的結果進行了分析,結果如表7所示。從表7的結果可以看出,加入BoF和BoS訓練策略後,小批量的尺寸對檢測器的效能幾乎沒有影響。這一結果表明,在引入BoF和BoS之後,不再需要使用昂貴的gpu進行培訓。換句話說,任何人都只能使用傳統的GPU來訓練一個優秀的檢測器。
最後是與最先進的檢測器進行對比:
簡單的翻譯了下,很多內容也不是很理解,如有錯誤,歡迎指