博客專欄

EEPW首頁 > 博客 > YOLOv4詳細分析 | 細數(shù)當前最佳檢測框架小細節(jié)(2)

YOLOv4詳細分析 | 細數(shù)當前最佳檢測框架小細節(jié)(2)

發(fā)布人:CV研究院 時間:2020-12-30 來源:工程師 發(fā)布文章

用于骨干部分的 Bag of Specials(BoS)

·  Mish 激活

·  交叉階段部分連接(CSP)

·  多輸入加權(quán)的殘差連接(MiWRC)

Mish 激活

假設(shè)激活函數(shù)的形式為:

24.png

其中一元或二元算子有很多不同的候選函數(shù),比如余弦函數(shù)。在選用這些函數(shù)時,我們可以隨機猜測,然后基于不同的任務(wù)(比如分類)和數(shù)據(jù)集來評估對應模型的表現(xiàn)。最終,我們可以選出能讓模型表現(xiàn)最好的激活函數(shù)。

我們還可以應用強化學習來更高效地搜索解空間。

23.png

使用此方法并進行實驗,結(jié)果發(fā)現(xiàn)了下面這個新激活函數(shù) Swish,其表現(xiàn)優(yōu)于 ReLU 以及其它許多激活函數(shù)。

22.png

具有不同 β 值的 Swish 激活函數(shù)

Mish 是另一個與 ReLU 和 Swish 很相似的激活函數(shù)。Mish 的論文(arXiv:1908.08681)宣稱使用 Mish 的深度網(wǎng)絡(luò)在許多不同數(shù)據(jù)集上的表現(xiàn)都更優(yōu)。

21.png

為 CSPDarknet53 和檢測器使用 Mish,YOLOv4 的兩個準確度都獲得了提升。

多輸入加權(quán)的殘差連接(MiWRC)

過去幾年里,研究者很關(guān)注應該向網(wǎng)絡(luò)層輸入哪些特征圖。有時候,我們會突破僅使用之前一層的傳統(tǒng)方法。

現(xiàn)在,更重要的是層的連接方式,尤其是目標檢測器中層的連接方式。前面已經(jīng)討論過 FPN 和 PAN 示例。下圖中的 d 展示了另一種頸部設(shè)計 BiFPN,其論文(arXiv:1911.09070)宣稱 BiFPN 在準確度與效率的權(quán)衡方面表現(xiàn)更好。

20.png

YOLOv4 比較了其與 EfficientDet 的表現(xiàn),而后者被認為是目前最先進的技術(shù)之一。我們來看看這種技術(shù)。如下所示,EfficientDet 以 EfficientNet 作骨干,以 BiFPN 為頸部。

19.png

為便參照,下面給出了基于 MBConv 層構(gòu)建的 EfficientNet 的架構(gòu),這些層由反向殘差模塊組成。

18.png

正如其論文(arXiv:1801.04381)中提到的那樣,這種反向殘差模塊的構(gòu)成方式為:

第一層稱為逐深度卷積,其通過為每個輸入通道應用單個卷積過濾器來執(zhí)行輕量級的過濾。第二層是一個 1×1 卷積,稱為逐點卷積,負責通過計算輸入通道的線性組合來構(gòu)建新特征。

假設(shè)輸入的維度為 h? × w? × d?。則其會應用 d? 個 k × k 的卷積過濾器——每個通道一個。然后其會為所有通道應用 1×1 卷積過濾器,得到大小為 h? × w? × d? 的輸出。因此,總計算復雜度為:

17.jpg

其關(guān)鍵優(yōu)勢是所需的計算量比傳統(tǒng)卷積層要少得多。

在許多機器學習和深度學習問題中,我們都要學習輸入的低維表征。我們會通過創(chuàng)建「信息」瓶頸來提取數(shù)據(jù)的核心信息。這會迫使我們發(fā)現(xiàn)最重要的信息,這正是學習的核心原理。遵循這一原理,反向殘差模塊以低維表征為輸入,然后使用卷積(線性運算)和非線性運算對其進行操作。但是,ReLU 等非線性部分面臨著一大問題:非線性運算會不成比例地拉伸或壓縮某些區(qū)域。在發(fā)生這樣的壓縮時,輸入可能會映射到同樣的區(qū)域 / 點。舉個例子,ReLU 可能會將通道折疊進這片低維空間中,從而導致信息不可避免地丟失。正如其論文中寫道:

移除窄小層中的非線性特性是很重要的,這樣才能維持表征能力。

為了解決這一問題,我們可對維度(通道的數(shù)量)進行臨時的擴展。我們希望當我們的通道數(shù)量較多時,在經(jīng)過非線性運算之后,信息仍可能保存于某些通道之中。下面給出了反向殘差模塊的一些細節(jié):

16.png

可以看到,低維表征首先被擴展到了 t_k 個通道。然后,使用輕量的 3 × 3 逐深度卷積對其進行過濾。在該模塊的最后,特征又會被約減回低維。當其保持在高維空間中時,就加入非線性運算。

15.png

該模塊的起始處和終點之間添加了一個殘差連接。下面左圖是傳統(tǒng)的殘差模塊,右圖是這里描述的反向殘差模塊。

14.png

理解 EfficientDet 的核心概念是很有趣的。但 EfficientDet 在 YOLOv4 上的主要貢獻是多輸入加權(quán)的殘差連接。在 EfficientDet 論文中,可以觀察到不同分辨率下不同的輸入特征,它們對輸出特征的貢獻也不相等。但在之前的討論中,我們無差別地添加了這些特征。在 EfficientDet 中,在構(gòu)建輸出時,輸入特征的加權(quán)是各不相同的:

13.jpg

其中 w? 的訓練和學習方式與其它可訓練參數(shù)一樣。

用于檢測器的 Bag of freebies (BoF)

用于 YOLOv4 檢測器的 BoF 特征包括:

  • CIoU-loss

  • CmBN

  • DropBlock 正則化

  • Mosaic 數(shù)據(jù)增強

  • 自對抗訓練

  • 消除網(wǎng)格敏感度

  • 為單個基本真值使用多個錨

  • 余弦退火調(diào)度器

  • 最優(yōu)超參數(shù)

  • 隨機訓練形狀

CIoU-loss

損失函數(shù)能為我們提供如何調(diào)整權(quán)重以降低成本的信號。所以在預測結(jié)果錯誤時,我們期望其能為我們提供前進的方向。但在使用 IoU 且基本真值框與預測結(jié)果不重疊時,這卻無法實現(xiàn)。假設(shè)有兩個預測結(jié)果與基本真值都不重疊,則 IoU 損失函數(shù)無法確定哪個結(jié)果更好——即便其中一個結(jié)果可能與基本真值更接近。

12.jpg

Generalized IoU(GIoU)通過將該損失優(yōu)化為以下形式而解決了這一問題:

11.jpg

但這個損失函數(shù)通常會首先擴展其預測邊界框,直到其與基本真值區(qū)域有重疊。然后它會縮小以增大 IoU。相比于理論上的迭代次數(shù)需求,這個過程實際需要更多迭代次數(shù)。

首先,引入 Distance-IoU Loss(DIoU):

10.jpg

其引入了一個新的目標以減少兩個框的中心點之間的距離。

最后,引入 Complete IoU Loss(CIoU)以便:

  • 增大基本真值框與預測框之間的重疊面積;

  • 最小化它們的中心點之間的距離;

  • 維持框的長寬比的一致性。

其最終定義為:

9.jpg

CmBN

原始的批歸一化會收集小批量數(shù)據(jù)內(nèi)樣本的均值和方差,以白化(whiten)層輸入。但是,如果小批量數(shù)據(jù)規(guī)模很小,則這些估計結(jié)果將具有很高的噪聲。一種解決方案是在許多小批量數(shù)據(jù)上估計它們。但是,由于每次迭代中權(quán)重都會變化,因此在這些權(quán)重下收集的統(tǒng)計數(shù)據(jù)可能會在新的權(quán)重下變得不準確。單純地求平均可能出錯。幸運的是,權(quán)重的改變是逐漸發(fā)生的。交叉迭代批歸一化(CBM)使用了以下的調(diào)整來基于 k 個之前的迭代估計這些統(tǒng)計數(shù)據(jù)。

8.jpg7.png

CmBN 是一個經(jīng)過修改的選項,其僅收集單個批次內(nèi)小批量數(shù)據(jù)之間的統(tǒng)計數(shù)據(jù)。

自對抗訓練(SAT)

SAT 是一種數(shù)據(jù)增強技術(shù)。其首先會在訓練樣本上執(zhí)行一次前向通過。使用傳統(tǒng)方法時,我們會在反向傳播過程中調(diào)整模型的權(quán)重來提升檢測器檢測圖像中目標的能力。但這里所采樣的方向卻相反。它會修改圖像,使其能在最大程度上降低檢測器的性能,即創(chuàng)建以當前模型為目標的對抗攻擊——即使新圖像可能在人眼看來與原來的一樣。接下來,使用這張新圖像與原始的邊界框和類別標簽來訓練該模型。這有助于提升模型的泛化能力并降低過擬合。

消除網(wǎng)格敏感度

邊界框 b 的計算方式為:

6.png

對于 b?=c? 和 b?=c?+1 的情況,我們需要 t? 分別具有很大的負值和正值。但我們可以將 σ 與一個比例因子(>1.0)相乘,從而更輕松地實現(xiàn)這一目標。以下是對源代碼的修改:

5.png

為單個基本真值使用多個錨點

如果 IoU(ground truth, anchor) > IoU threshold,則為單個基本真值使用多個錨點。(注:作者沒有更多地說明該方法在 YOLOv4 中的作用。)

余弦退火調(diào)度器

余弦調(diào)度會根據(jù)一個余弦函數(shù)來調(diào)整學習率。首先,較大的學習率會以較慢的速度減小。然后在中途時,學習的減小速度會變快,最后學習率的減小速度又會變得很慢。

4.png

這張圖展示了學習率衰減的方式(下圖中還應用了學習率預熱)及其對 mAP 的影響??赡芸雌饋聿⒉幻黠@,這種新的調(diào)度方法的進展更為穩(wěn)定,而不是在停滯一段時間后又取得進展。

3.png

余弦學習率 + 預熱

使用遺傳算法(進化算法)的超參數(shù)選擇

進化算法是一種有根據(jù)的猜測方法。其遵循「適者生存」的概念。舉個例子,如果我們隨機選擇 100 組超參數(shù)。然后使用它們訓練 100 個模型。之后,我們從中選出表現(xiàn)最好的 10 個模型。對于每個被選中的模型,都根據(jù)原始版本創(chuàng)建 10 個超參數(shù)略有不同的變體版本。再使用這些新的超參數(shù)重新訓練模型,再次選出其中表現(xiàn)最好的。隨著我們不斷迭代,我們應該可以找到超參數(shù)的最佳集合。另外,我們也可以一開始使用默認超參數(shù),然后再執(zhí)行突變。正如其論文(arXiv: 2004.10934)中寫道:

遺傳算法使用 YOLOv3-SPP,根據(jù) GIoU 損失進行訓練,并為 min-val 5k 數(shù)據(jù)集搜索 300 epoch。我們?yōu)檫z傳算法實驗采用了搜索得到的學習率 0.00261、動量 0.949、用于分配基本真值的 IoU 閾值 0.213 以及損失歸一化算子 0.07。

隨機訓練形狀

許多單階段目標檢測器都是用固定的輸入圖像形狀進行訓練的。為了提升泛化能力,我們可以使用不同的圖像大小訓練模型。(YOLO 中的多尺度訓練。)

用于檢測器的 Bag of Specials(BoS)

用于 YOLOv4 檢測器的 BoS 特征包括:

  • Mish 激活

  • 修改版 SPP 模塊

  • 修改版 SAM 模塊

  • 修改版 PAN 路徑聚合模塊

  • DIoU-NMS

DIoU-NMS

非極大值抑制(NMS)會過濾掉其它預測同一目標的邊界框并保留置信度最高的邊界框。

2.png

DIoU(前面討論過)用作 NMS 的一個因子。該方法在抑制冗余的邊界框時會使用 IoU 和兩個邊界框的中心點之間的距離。這能使得模型能更加穩(wěn)健地應對有遮擋的情況。

評估過的技術(shù)

盡管本文介紹的都是已被整合進 YOLOv4 中的技術(shù),但 YOLOv4 也投入了很大努力來評估其它技術(shù)。最后,展示一下 YOLOv4 考慮過的技術(shù)列表:

1.png

原文鏈接:https://medium.com/@jonathan_hui/yolov4-c9901eaa8e61

/End.

*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。



關(guān)鍵詞:

相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉