自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

當(dāng)前大熱的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

新聞 前端
前段時(shí)間,突然發(fā)布的YOLOv4成了計(jì)算機(jī)視覺(jué)領(lǐng)域一大熱點(diǎn)新聞。這個(gè)目標(biāo)檢測(cè)任務(wù)的 SOTA 模型究竟有何創(chuàng)新?這篇解讀文章為你一一拆解。

 前段時(shí)間,突然發(fā)布的YOLOv4成了計(jì)算機(jī)視覺(jué)領(lǐng)域一大熱點(diǎn)新聞。這個(gè)目標(biāo)檢測(cè)任務(wù)的 SOTA 模型究竟有何創(chuàng)新?這篇解讀文章為你一一拆解。

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

目標(biāo)檢測(cè)在近幾年開(kāi)始發(fā)展成熟,但即便如此,競(jìng)爭(zhēng)依舊激烈。如下所示,YOLOv4 宣稱(chēng)已經(jīng)實(shí)現(xiàn)了當(dāng)前最前沿技術(shù)的準(zhǔn)確度,同時(shí)還能維持較高的處理幀率。使用 Tesla V100 GPU,在 MS COCO 數(shù)據(jù)集上以接近 65 FPS 的推理速度,YOLOv4 實(shí)現(xiàn)了 43.5% AP (65.7% AP₅₀)的準(zhǔn)確度。但對(duì)于目標(biāo)檢測(cè)而言,高準(zhǔn)確度早已不是唯一的目標(biāo)。我們還希望邊緣設(shè)備也能流暢地運(yùn)行這些模型。因此,如何使用低成本硬件實(shí)時(shí)地處理輸入視頻也成為了一個(gè)重要的研究方向。

YOLOv4 的開(kāi)發(fā)歷程很有意思,其中評(píng)估、修改和整合了很多有趣的新技術(shù)。而且其也優(yōu)化了計(jì)算效率,使檢測(cè)器在單個(gè) GPU 上也能很好地完成訓(xùn)練。

Bag of freebies (BoF) 與 Bag of specials (BoS)

為了提升準(zhǔn)確度,可以針對(duì)訓(xùn)練過(guò)程進(jìn)行一些優(yōu)化,比如數(shù)據(jù)增強(qiáng)、類(lèi)別不平衡、成本函數(shù)、軟標(biāo)注…… 這些改進(jìn)不會(huì)影響推理速度,可被稱(chēng)為「Bag of freebies」。另外還有一些改進(jìn)可稱(chēng)為「bag of specials」,僅需在推理時(shí)間方面做少許犧牲,就能獲得優(yōu)良的性能回報(bào)。這類(lèi)改進(jìn)包括增大感受野、使用注意力機(jī)制、集成跳過(guò)連接(skip-connection)或 FPN 等特性、使用非極大值抑制等后處理方法。本文將探討特征提取器和頸部的設(shè)計(jì)方式以及那些好用的 BoF 和 BoS 改進(jìn)策略。

骨干網(wǎng)絡(luò)

密集模塊與 DenseNet

為了提升準(zhǔn)確度,我們可通過(guò)提高網(wǎng)絡(luò)深度來(lái)擴(kuò)展感受野和增大模型復(fù)雜度。同時(shí),為了降低訓(xùn)練難度,還可應(yīng)用跳過(guò)連接。我們還可以進(jìn)一步延伸這一概念,即使用高度互連的層。

密集模塊(Dense Block)包含多個(gè)卷積層,其中每一層 H_i 都由批歸一化、ReLU 與之后的卷積構(gòu)成。H_i 的輸入不僅包含前一層的輸出,還包含之前所有層的輸出以及原始輸入,即 x_₀, x_₁, …, x_{i-1}。下圖中每個(gè) H_i 都輸出 4 個(gè)特征圖。因此,在每一層,特征圖的數(shù)量都增加 4 倍——增長(zhǎng)率。

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

然后,通過(guò)組合多個(gè)密集模塊與其間的過(guò)渡層(由卷積和池化構(gòu)成),可以構(gòu)建出 DenseNet。

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

下面給出了這種架構(gòu)設(shè)計(jì)的詳情。

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

交叉階段部分連接(CSP)

CSPNet 將密集模塊的輸入特征圖分為了兩部分。第一部分 x_₀’ 會(huì)繞過(guò)密集模塊,成為下個(gè)過(guò)渡層的輸入的一部分。第二部分 x_₀’’ 則會(huì)通過(guò)密集模塊,如下圖所示。

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

這種新設(shè)計(jì)通過(guò)將輸入分為兩部分而降低了計(jì)算復(fù)雜度——此時(shí)僅有一部分輸入會(huì)經(jīng)過(guò)密集模塊。

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

CSPDarknet53

YOLOv4 使用了上面的 CSP 與下面的 Darknet-53 作為特征提取的骨干。

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

相比于基于 ResNet 的設(shè)計(jì),CSPDarknet53 模型的目標(biāo)檢測(cè)準(zhǔn)確度更高,不過(guò) ResNet 的分類(lèi)性能更好一些。但是,借助后文將討論的 Mish 和其它技術(shù),CSPDarknet53 的分類(lèi)準(zhǔn)確度可以得到提升。因此,YOLOv4 最終選擇了 CSPDarknet53。

頸部(Neck)

目標(biāo)檢測(cè)器由用于特征提取的骨干部分(backbone)和用于目標(biāo)檢測(cè)的頭部(head,下圖最右邊的模塊)構(gòu)成。而為了檢測(cè)不同大小的目標(biāo),需要使用一種分層結(jié)構(gòu),使得頭部可探測(cè)不同空間分辨率的特征圖。

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

為了讓輸入頭部的信息更豐富,在輸入頭部前,會(huì)將來(lái)自自底向上和自上而下的數(shù)據(jù)流按逐元素的方式相加或相連。因此,頭部的輸入將包含來(lái)自自底向上數(shù)據(jù)流的豐富空間信息以及來(lái)自自上而下數(shù)據(jù)流的豐富語(yǔ)義信息。該系統(tǒng)的這一部分稱(chēng)為頸部(neck)。下面更詳細(xì)地談?wù)勥@一設(shè)計(jì)。

特征金字塔網(wǎng)絡(luò)(FPN)

YOLOv3 采用了與 FPN 類(lèi)似的方法來(lái)實(shí)現(xiàn)不同大小層次的目標(biāo)檢測(cè)預(yù)測(cè)。

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

在針對(duì)特定尺寸大小進(jìn)行預(yù)測(cè)時(shí),F(xiàn)PN 會(huì)對(duì)自上而下的數(shù)據(jù)流進(jìn)行上采樣(2 倍),并將其與自底向上的相鄰層相加(見(jiàn)下圖)。得到的結(jié)果會(huì)被傳遞給一個(gè) 3×3 的卷積核,以減少上采樣偽影以及為頭部創(chuàng)建下圖中的特征圖 P4。

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

SPP(空間金字塔池化層)

SPP 應(yīng)用了略有不同的策略來(lái)檢測(cè)不同尺寸大小的目標(biāo),即使用一個(gè)空間金字塔池化層替代了最后的池化層(在最后的卷積層之后)。其特征圖在空間上分成了 m×m 個(gè) bin,其中 m 可以分別為 1、2、4 等值。然后針對(duì)每個(gè)通道,為每個(gè) bin 應(yīng)用一次最大池化。這會(huì)形成一個(gè)長(zhǎng)度固定的表征,然后可以使用 FC 層對(duì)該表征進(jìn)行進(jìn)一步的分析。

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

許多基于 CNN 的模型都包含 FC 層,因此只能接受指定尺寸的輸入圖像。相對(duì)而言,SPP 可使用不同大小的圖像。然而,也還存在不包含 FC 層的技術(shù),比如全卷積網(wǎng)絡(luò)(FCN);這些技術(shù)可以接受不同尺寸的圖像。對(duì)于空間信息非常重要的圖像分割等任務(wù)而言,這類(lèi)設(shè)計(jì)尤為重要。因此,對(duì)于 YOLO,并不必需將 2D 特征圖轉(zhuǎn)化為固定大小的 1D 向量。

使用 SPP 的 YOLO

YOLO 中使用的 SPP 經(jīng)過(guò)修改,以保留輸出的空間尺寸大小。而且還在大小為 1×1、5×5、9×9、13×13 等的滑動(dòng)核(sliding kernel)應(yīng)用了最大池化。空間尺寸大小得以保留。然后將來(lái)自不同核大小的特征圖連接起來(lái)作為輸出。

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

下圖展示了 SPP 是如何整合進(jìn) YOLO 的。

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

路徑聚合網(wǎng)絡(luò)(PAN)

早期的深度學(xué)習(xí)的模型設(shè)計(jì)相對(duì)簡(jiǎn)單。每一層的輸入都來(lái)自其上一層。更前面的層會(huì)提取局部的紋理和圖案信息,并構(gòu)建出后續(xù)層所需的語(yǔ)義信息。但是,隨著網(wǎng)絡(luò)向右側(cè)推進(jìn),微調(diào)優(yōu)化預(yù)測(cè)結(jié)果時(shí)所需的局部信息可能會(huì)丟失。

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

在后來(lái)的深度學(xué)習(xí)開(kāi)發(fā)中,層之間的互連方式變得更加復(fù)雜。DenseNet 在這方面達(dá)到了極致。其中每一層都連接了其前面的所有層。

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

在 FPN 中,來(lái)自自底向上和自上而下數(shù)據(jù)流的鄰近層的信息會(huì)結(jié)合到一起。

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

層之間信息的流動(dòng)方式變成了模型設(shè)計(jì)中需要考慮的又一關(guān)鍵事項(xiàng)。

下圖是用于目標(biāo)檢測(cè)的路徑聚合網(wǎng)絡(luò)(PAN)。其中,自底向上的路徑得到增強(qiáng),使得低層信息更容易傳播到頂部。在 FPN 中,局部空間信息會(huì)向上傳播,如紅色箭頭所示。盡管圖中可能沒(méi)有展示清楚,但這條紅色路徑穿過(guò)了大約 100 多層。PAN 引入了一個(gè)捷徑路徑(綠色路徑),其僅需 10 層左右就能抵達(dá)頂部的 N₅ 層。這個(gè)短回路概念使得頂層也能獲取到細(xì)粒度的局部信息。

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

順帶一提,頸部設(shè)計(jì)可以進(jìn)行如下的可視化:

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

但是,YOLOv4 并沒(méi)有將鄰近層加到一起,而是將特征圖連接到一起。

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

在 FPN 中,不同尺寸大小的目標(biāo)是分開(kāi)獨(dú)立檢測(cè)的。這可能會(huì)導(dǎo)致出現(xiàn)重復(fù)的預(yù)測(cè)結(jié)果,而且無(wú)法利用來(lái)自其它特征圖的信息。PAN 最早使用了逐元素最大運(yùn)算將這些信息融合到一起(這里不再詳述相關(guān)細(xì)節(jié))。

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

空間注意力模塊(SAM)

注意力已經(jīng)在深度學(xué)習(xí)設(shè)計(jì)中得到了廣泛的應(yīng)用。SAM 會(huì)為輸入特征圖分別應(yīng)用最大池化和平均池化,從而得到兩個(gè)特征圖集合。其結(jié)果會(huì)被送入一個(gè)卷積層,之后再由一個(gè) sigmoid 函數(shù)創(chuàng)建出空間注意力。

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

這個(gè)空間注意力掩碼再被應(yīng)用于輸入特征,從而輸出經(jīng)過(guò)優(yōu)化的特征圖。

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

YOLOv4 使用了一種修改版的 SAM,其中沒(méi)有使用最大池化和平均池化。

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

YOLOv4 使用修改版的 SPP、PAN 和 SAM 逐步實(shí)現(xiàn) / 替換了 FPN 概念。

用于骨干部分的 Bag of freebies (BoF)

用于 YOLOv4 骨干部分的 BoF 特征包括:

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

DropBlock 正則化

類(lèi)別標(biāo)簽平滑化

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

Cutout 數(shù)據(jù)增強(qiáng)會(huì)移除圖像的部分區(qū)域(見(jiàn)下圖)。這會(huì)迫使模型在執(zhí)行分類(lèi)時(shí)不過(guò)于相信特定的特征。但是,如果圖像的某部分充滿了無(wú)用信息,則這種操作就浪費(fèi)了。CutMix 的做法則不同,其是將圖像的一部分剪切下來(lái)再粘貼到另一張圖像上。其基本真值標(biāo)簽會(huì)根據(jù)補(bǔ)丁的面積比例進(jìn)行調(diào)整,比如狗的部分占 0.6,貓的部分占 0.4。

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

從概念上講,CutMix 在目標(biāo)的可能組成成分方面有更寬廣的視角。裁減掉的部分會(huì)迫使模型學(xué)習(xí)使用不同的特征組合進(jìn)行分類(lèi)。這可避免信心過(guò)高。因?yàn)槭怯昧硪粡垐D像替代該區(qū)域,所以圖像中的信息量和訓(xùn)練效率都不會(huì)受到顯著的影響。

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

Mosaic 這種數(shù)據(jù)增強(qiáng)方法是將 4 張訓(xùn)練圖像組合成一張來(lái)進(jìn)行訓(xùn)練(而非 CutMix 中的 2 張)。這讓模型在非慣例的環(huán)境中能更好地執(zhí)行目標(biāo)檢測(cè)。此外,由于每個(gè) mini-batch 都包含圖像的較多變體(4×),因此在估計(jì)均值和方差時(shí),對(duì)較大 mini-batch 的需求會(huì)降低。

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

DropBlock 正則化

在全連接層中,我們可通過(guò)丟棄一些連接來(lái)迫使模型學(xué)習(xí)不同的特征,而不是過(guò)于依賴(lài)少量特征。但是,這可能不適用于卷積層。相鄰的位置可能高度相關(guān)。所以即使丟棄一些像素(如中部的圖所示),仍然可以檢測(cè)出空間信息。DropBlock 正則化基于類(lèi)似的概念,但適用于卷積層。

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

不過(guò) DropBlock 丟棄的不是各個(gè)像素,而是大小為 block_size × block_size 的一個(gè)像素塊。

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

類(lèi)別標(biāo)簽平滑化

每當(dāng)你覺(jué)得自己完全正確時(shí),你可能只是想錯(cuò)了。如果一個(gè)預(yù)測(cè)結(jié)果的置信度為 100%,可能只是說(shuō)明模型記憶了這個(gè)數(shù)據(jù),而非學(xué)習(xí)了什么東西。標(biāo)簽平滑化將預(yù)測(cè)結(jié)果的目標(biāo)上界調(diào)整至了一個(gè)更低的值,比如 0.9。然后在計(jì)算損失時(shí),模型會(huì)以這個(gè)值為目標(biāo),而不是 1.0。這一方法可緩解過(guò)擬合問(wèn)題。

p = tf.placeholder(tf.float32, shape=[None, 10])# Use 0.9 instead of 1.0.feed_dict = { p: [[0, 0, 0, 0.9, 0, 0, 0, 0, 0, 0]] # Image with label "3"}# logits_real_image is the logits calculated by# the discriminator for real images.d_real_loss = tf.nn.sigmoid_cross_entropy_with_logits( labels=p, logits=logits_real_image)

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

Mish 激活

交叉階段部分連接(CSP)

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

Mish 激活

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

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

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

我們還可以應(yīng)用強(qiáng)化學(xué)習(xí)來(lái)更高效地搜索解空間。

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

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

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

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

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

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

為 CSPDarknet53 和檢測(cè)器使用 Mish,YOLOv4 的兩個(gè)準(zhǔn)確度都獲得了提升。

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

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

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

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

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

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

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

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

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

第一層稱(chēng)為逐深度卷積,其通過(guò)為每個(gè)輸入通道應(yīng)用單個(gè)卷積過(guò)濾器來(lái)執(zhí)行輕量級(jí)的過(guò)濾。第二層是一個(gè) 1×1 卷積,稱(chēng)為逐點(diǎn)卷積,負(fù)責(zé)通過(guò)計(jì)算輸入通道的線性組合來(lái)構(gòu)建新特征。

假設(shè)輸入的維度為 hᵢ × wᵢ × dᵢ。則其會(huì)應(yīng)用 dᵢ 個(gè) k × k 的卷積過(guò)濾器——每個(gè)通道一個(gè)。然后其會(huì)為所有通道應(yīng)用 1×1 卷積過(guò)濾器,得到大小為 hᵢ × wᵢ × dⱼ 的輸出。因此,總計(jì)算復(fù)雜度為:

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

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

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

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

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

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

可以看到,低維表征首先被擴(kuò)展到了 t_k 個(gè)通道。然后,使用輕量的 3 × 3 逐深度卷積對(duì)其進(jìn)行過(guò)濾。在該模塊的最后,特征又會(huì)被約減回低維。當(dāng)其保持在高維空間中時(shí),就加入非線性運(yùn)算。

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

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

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

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

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

其中 wᵢ 的訓(xùn)練和學(xué)習(xí)方式與其它可訓(xùn)練參數(shù)一樣。

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

用于 YOLOv4 檢測(cè)器的 BoF 特征包括:

CIoU-loss

CmBN

DropBlock 正則化

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

自對(duì)抗訓(xùn)練

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

為單個(gè)基本真值使用多個(gè)錨

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

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

隨機(jī)訓(xùn)練形狀

CIoU-loss

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

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

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

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

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

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

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

其引入了一個(gè)新的目標(biāo)以減少兩個(gè)框的中心點(diǎn)之間的距離。

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

增大基本真值框與預(yù)測(cè)框之間的重疊面積;

最小化它們的中心點(diǎn)之間的距離;

維持框的長(zhǎng)寬比的一致性。

其最終定義為:

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

CmBN

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

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

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

自對(duì)抗訓(xùn)練(SAT)

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

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

邊界框 b 的計(jì)算方式為:

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

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

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

為單個(gè)基本真值使用多個(gè)錨點(diǎn)

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

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

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

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

這張圖展示了學(xué)習(xí)率衰減的方式(下圖中還應(yīng)用了學(xué)習(xí)率預(yù)熱)及其對(duì) mAP 的影響。可能看起來(lái)并不明顯,這種新的調(diào)度方法的進(jìn)展更為穩(wěn)定,而不是在停滯一段時(shí)間后又取得進(jìn)展。

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

余弦學(xué)習(xí)率 + 預(yù)熱

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

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

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

隨機(jī)訓(xùn)練形狀

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

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

用于 YOLOv4 檢測(cè)器的 BoS 特征包括:

Mish 激活

修改版 SPP 模塊

修改版 SAM 模塊

修改版 PAN 路徑聚合模塊

DIoU-NMS

DIoU-NMS

非極大值抑制(NMS)會(huì)過(guò)濾掉其它預(yù)測(cè)同一目標(biāo)的邊界框并保留置信度最高的邊界框。

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)

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

評(píng)估過(guò)的技術(shù)

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

當(dāng)前最佳的YOLOv4是如何煉成的?細(xì)數(shù)那些小細(xì)節(jié)
 

 

責(zé)任編輯:張燕妮 來(lái)源: 機(jī)器之心Pro
相關(guān)推薦

2020-08-12 11:05:32

Vue 源碼應(yīng)用

2022-05-15 08:13:50

Mysql數(shù)據(jù)庫(kù)Mycat

2020-09-09 07:55:51

TS開(kāi)源符號(hào)

2021-03-08 08:05:05

漏洞Exchange微軟

2013-05-29 09:59:43

Opera瀏覽器

2010-02-06 15:14:36

ibmdw架構(gòu)師

2010-03-24 15:40:39

網(wǎng)管運(yùn)維管理摩卡軟件

2013-12-19 16:43:02

2015-10-23 10:39:21

2013-02-21 10:44:03

云計(jì)算云平臺(tái)云服務(wù)提供商

2012-12-27 10:22:46

大數(shù)據(jù)

2015-04-13 17:39:11

移動(dòng)IM開(kāi)發(fā)

2020-08-04 13:20:58

無(wú)人駕駛人工智能傳感器

2020-08-03 07:57:43

人工智能無(wú)人駕駛技術(shù)

2013-06-21 10:45:41

Windows 8.1

2012-06-21 09:34:18

Windows Pho

2019-06-11 10:05:27

統(tǒng)計(jì)數(shù)據(jù)平均值欺騙

2011-11-25 09:48:04

天線無(wú)線

2013-08-19 16:17:48

CIO

2024-03-28 08:13:51

GPTsOpenAI人工智能
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)