博客專欄

EEPW首頁 > 博客 > 角網(wǎng)絡(luò)——目標(biāo)檢測(文后有paper地址及源碼)

角網(wǎng)絡(luò)——目標(biāo)檢測(文后有paper地址及源碼)

發(fā)布人:CV研究院 時間:2021-11-10 來源:工程師 發(fā)布文章

1.jpg

今天分享的技術(shù)提出了一種新目標(biāo)檢測方法,用單個卷積網(wǎng)絡(luò)將目標(biāo)邊界框檢測為一對關(guān)鍵點(即邊界框的左上角和右下角)。通過將目標(biāo)檢測為成對關(guān)鍵點,消除現(xiàn)有的one stage檢測器設(shè)計中對一組anchors的需要。除此之外,還引入了corner pooling,一種新型的池化層,可以幫助網(wǎng)絡(luò)更好的定位邊界框的角點。最終CornerNet在MS COCO上實現(xiàn)了42.1%的AP,優(yōu)于所有現(xiàn)有的one stage檢測器。

背景

基于卷積神經(jīng)網(wǎng)絡(luò)的目標(biāo)檢測器已經(jīng)在各種具有挑戰(zhàn)性的基準(zhǔn)測試數(shù)據(jù)集中有了最新成果?,F(xiàn)有技術(shù)方法的一個共同組成部分是anchor boxes,包含各種尺寸和寬高比的邊界檢測框,目標(biāo)檢測的候選框。Anchor boxes廣泛用于one stage檢測器中,它可以獲得與two stage檢測器相當(dāng)?shù)臋z測結(jié)果,同時效率更高。 

One stage檢測器將anchor boxes密集分布在圖像上,通過對anchor boxes進(jìn)行評分,并通過回歸來改進(jìn)其坐標(biāo)來生成最終的邊界框預(yù)測。但anchor boxes的使用有兩個缺點。 

通常需要一組非常多的anchor boxes,比如在DSSD中超過4萬個,在RetinaNet中超過10多萬個, 這是因為訓(xùn)練器被訓(xùn)練以分類每個anchor boxes是否與ground truth充分重疊,并且需要大量anchor boxes以確保與大多數(shù)ground truth充分重疊。結(jié)果,只有一小部分anchor boxes與ground truth重疊; 這在正負(fù)樣本之間造成了巨大的不平衡,減慢了訓(xùn)練速度;

Anchor boxes的使用引入了許多超參數(shù)和設(shè)計選擇。這些選擇主要是通過ad-hoc啟發(fā)式方法進(jìn)行的,并且當(dāng)與多尺度架構(gòu)相結(jié)合時可能會變得更加復(fù)雜,其中單個網(wǎng)絡(luò)在多個分辨率下進(jìn)行單獨預(yù)測,每個尺度使用不同的特征和它自己的一組anchor boxes。

新技術(shù)亮點

今天要分享的CornerNet,這是一種新的one stage目標(biāo)檢測方法,可以消除anchor boxes。,將一個目標(biāo)物體檢測為一對關(guān)鍵點(即:邊界框的左上角和右下角),使用單個卷積網(wǎng)絡(luò)來預(yù)測同一物體類別的所有實例的左上角的熱圖,所有右下角的熱圖,以及每個檢測到的角點的嵌入向量。 

嵌入用于對屬于同一目標(biāo)的一對角點進(jìn)行分組——訓(xùn)練網(wǎng)絡(luò)以預(yù)測它們的類似嵌入。我們的方法極大地簡化了網(wǎng)絡(luò)的輸出,并且無需設(shè)計anchor boxes。新方法受到Newell等人在多人姿態(tài)估計上下文中關(guān)聯(lián)嵌入的啟發(fā),下圖說明了新方法的整體流程:

2.jpg

CornerNet的另一個新穎組件是corner pooling,一種新的池化層方式,可幫助卷積網(wǎng)絡(luò)更好的定位邊界框的角點。邊界框的一角通常在目標(biāo)之外,參考圓形的情況以及下圖的例子。

3.jpg

如上圖這種情況,角點不能根據(jù)當(dāng)前的信息進(jìn)行定位。相反,為了確定像素位置是否有左上角,需要水平地向右看目標(biāo)的最上面邊界,垂直地向底部看物體的最左邊邊界。 

這就激發(fā)了新方法的corner pooling layer:它包含兩個特征圖;在每個像素位置,它最大池化從第一個特征映射到右側(cè)的所有特征向量,最大池化從第二個特征映射下面的所有特征向量,然后將兩個池化結(jié)果一起添加,如下圖所示:

4.jpg

動機

假設(shè)了兩個原因,為什么檢測角點會比檢測邊界框中心或proposals好?

邊界框的中心可能更難以定位,因為它取決于目標(biāo)的所有4個邊,而定位角取決于2邊,因此更容易,甚至更多的corner pooling,它編碼一些明確的關(guān)于角點定義的先驗信息;

角點提供了一種更有效的方式來密集地離散邊界框的空間,只需要用O(wh)角點來表示O(w^2*h^2)可能的anchor boxes。

新方法證明了CornerNet對MS COCO數(shù)據(jù)集的有效性。CornerNet實現(xiàn)了42.1%的AP,優(yōu)于所有現(xiàn)有的one-stage檢測器。此外,通過ablation studies,發(fā)現(xiàn)Corner pooling對于CornerNet的卓越性能起到至關(guān)重要的作用。

相關(guān)技術(shù)

Two-stage目標(biāo)檢測器

Two-stage目標(biāo)檢測由R-CNN首次引入并推廣。Two-stage檢測器生成一組稀疏的感興趣區(qū)域(RoIs),并通過網(wǎng)絡(luò)對每個區(qū)域進(jìn)行分類。R-CNN使用低層次視覺算法生成(RoIs),然后從圖像中提取每個區(qū)域,由ConvNet獨立處理,這將導(dǎo)致大量計算冗余。

后來SPP-Net和Fast R-CNN改進(jìn)了R-CNN,設(shè)計了一個特殊的池化層(金字塔池化),將每個區(qū)域從feature map中池化。然而,兩者仍然依賴于單獨的proposals算法,不能進(jìn)行端到端訓(xùn)練。

Faster-RCNN通過引入?yún)^(qū)域生成網(wǎng)絡(luò)(RPN)來去除低層次的proposals算法,RPN從一組預(yù)先確定的候選框中生成proposals。這不僅使檢測器更加高效,通過RPN與檢測網(wǎng)絡(luò)的聯(lián)合訓(xùn)練,可實現(xiàn)端到端訓(xùn)練。

R-FCN將全連接子檢測網(wǎng)絡(luò)替換為完全卷積子檢測網(wǎng)絡(luò),進(jìn)一步提高了Faster R-CNN的檢測效率。其他的工作主要集中在結(jié)合子類別信息,用更多的上下文信息在多個尺度上生成目標(biāo)的proposals,選擇更好的特征,提高速度,并行處理和更好的訓(xùn)練過程。

One-stage目標(biāo)檢測器

YOLO和SSD推廣了one-stage方法,該方法消除了RoI池化步驟,并在單個網(wǎng)絡(luò)中檢測目標(biāo)。

One-stage檢測器通常比two-stage檢測器計算效率更高,同時在不同的具有挑戰(zhàn)性的基準(zhǔn)上保持著具有競爭性的性能。SSD算法將anchor boxes密集地放置在多個尺度的feature maps之上,直接對每個anchor boxes進(jìn)行分類和細(xì)化。YOLO直接從圖像中預(yù)測邊界框坐標(biāo),后來在YOLO V2中,通過使用anchor boxes進(jìn)行了改進(jìn)。

DSSD和RON采用了類似沙漏的網(wǎng)絡(luò),使它們能夠通過跳躍連接將低級和高級特性結(jié)合起來,從而更準(zhǔn)確地預(yù)測邊界框。

在RetinaNet出現(xiàn)之前,這些one-stage檢測器的檢測精度仍然落后于two-stage檢測器。在RetinaNet中,作者認(rèn)為密集的anchor boxes在訓(xùn)練中造成了正樣本和負(fù)樣本之間的巨大不平衡。這種不平衡導(dǎo)致訓(xùn)練效率低下,從而導(dǎo)致結(jié)果不佳,他們提出了一種新的loss——Focal Loss,來動態(tài)調(diào)整每個anchor boxes的權(quán)重,并說明了他們的one-stage檢測器檢測性能優(yōu)于two-stage檢測器。

RefineDet建議對anchor boxes進(jìn)行過濾,以減少負(fù)樣本的數(shù)量,并對anchor boxes進(jìn)行粗略的調(diào)整。

DeNet是一種two-stage檢測器,不使用anchor boxes就能生成RoIs。它首先確定每個位置屬于邊界框的左上角、右上角、左下角或右下角的可能性。然后,它通過列舉所有可能的角點組合來生成RoI,并遵循標(biāo)準(zhǔn)的two-stage方法對每個RoI進(jìn)行分類。

新提出的方法和DeNet很不一樣。首先,DeNet不識別兩個角是否來自同一目標(biāo),并依賴子檢測網(wǎng)絡(luò)來拒絕糟糕的RoI。相比之下,新方法是一種one-stage方法,使用單個卷積網(wǎng)絡(luò)來檢測和分組角點。其次,DeNet在人工確定的位置上的區(qū)域提取特征進(jìn)行分類,而新方法不需要任何特征選擇步驟。然后,引入corner pooling,一種新型的用于增強角點檢測的layer。

新方法受到Newell等人在多人姿態(tài)估計上下文中關(guān)聯(lián)嵌入的啟發(fā)。Newell等人提出了一種在單個網(wǎng)絡(luò)中檢測和分組人類關(guān)節(jié)的方法。在他們的方法中,每個檢測到的人類關(guān)節(jié)都有一個嵌入向量。這些關(guān)節(jié)是根據(jù)它們嵌入的距離來分組的。

本次新技術(shù)是第一個將目標(biāo)檢測任務(wù)定義為同時檢測和分組角點的任務(wù),另一個新穎之處在于corner pooling layer,它有助于更好定位角點,還對沙漏結(jié)構(gòu)進(jìn)行了顯著地修改,并添加了新的focal loss的變體,以幫助更好地訓(xùn)練網(wǎng)絡(luò)。

新算法框架愛

下圖提供了CornerNet的概述。使用沙漏網(wǎng)絡(luò)作為CornerNet的骨干網(wǎng)絡(luò)。沙漏網(wǎng)絡(luò)之后是兩個預(yù)測模塊:一個模塊用于左上角,另一個模塊用于右下角。每個模塊都有自己的corner pooling模塊,在預(yù)測熱圖、嵌入和偏移之前,池化來自沙漏網(wǎng)絡(luò)的特征。與許多其他物體探測器不同,不使用不同尺度的特征來檢測不同大小的物體,只將兩個模塊應(yīng)用于沙漏網(wǎng)絡(luò)的輸出。

5.jpg

檢測角點

預(yù)測兩組熱圖,一組用于左上角,另一組用于右下角。每組熱圖具有C個通道,其中C是分類的數(shù)量,并且大小為H×W。沒有背景通道。每個通道都是一個二進(jìn)制掩碼,用于表示該類的角點位置。

6.jpg

上圖,用于訓(xùn)練的“Ground-truth”熱圖。在正位置半徑范圍內(nèi)(橙色圓圈)的方框(綠色虛線矩形)仍然與地ground-truth(紅色實心矩形)有很大的重疊。

分組角點

圖像中可能出現(xiàn)多個目標(biāo),因此可能檢測到多個左上角和右下角。需要確定左上角和右下角的一對角點是否來自同一個目標(biāo)邊界框,新方法受到Newell等人提出的用于多人姿態(tài)估計任務(wù)的關(guān)聯(lián)嵌入方法的啟發(fā)。Newell等人檢測所有人類關(guān)節(jié),并為每個檢測到的關(guān)節(jié)生成嵌入,他們根據(jù)嵌入之間的距離將節(jié)點進(jìn)行分組。

關(guān)聯(lián)嵌入的思想也適用于今天說的的任務(wù),網(wǎng)絡(luò)預(yù)測每個檢測到的角點的嵌入向量,使得如果左上角和右下角屬于同一個邊界框,則它們的嵌入之間的距離應(yīng)該小。然后,可以根據(jù)左上角和右下角嵌入之間的距離對角點進(jìn)行分組,嵌入的實際值并不重要,僅使用嵌入之間的距離來對角點進(jìn)行分組。

Corner Pooling

如第個圖,通常沒有局部視覺證據(jù)表明存在角點。要確定像素是否為左上角,需要水平地向右看目標(biāo)的最上面邊界,垂直地向底部看物體的最左邊邊界。因此,提出corner Pooling通過編碼顯式先驗知識來更好地定位角點。

7.jpg8.jpg9.jpg

預(yù)測模塊從一個修改后的殘塊開始,其中將第一個卷積模塊替換為corner pooling模塊,修改后的殘差塊后面跟著一個卷積模塊,新方法有多個分支用于預(yù)測熱圖、嵌入和偏移量。

預(yù)測模塊的結(jié)構(gòu)如上圖所示。模塊的第一部分是殘差模塊的修改版本。在這個修改后的殘差模塊中,將第一個3×3的卷積模塊替換為一個corner pooling模塊。這個殘差模塊,首先通過具有128個通道的2個3×3卷積模塊的主干網(wǎng)絡(luò)處理特征,然后應(yīng)用一個corner pooling層。殘差模塊之后,將池化特征輸入具有256個通道的3×3的Conv-BN層,然后加上反向projection shortcut。修改后的殘塊,后跟一個具有256個通道的3×3的卷積模塊,和256個通道的3個Conv-ReLU-Conv層來產(chǎn)生熱圖,嵌入和偏移量。

沙漏網(wǎng)絡(luò)

CornerNet使用沙漏網(wǎng)絡(luò)作為其骨干網(wǎng)絡(luò)。它是一個全卷積神經(jīng)網(wǎng)絡(luò),由一個或多個沙漏模塊組成。沙漏模塊首先通過一系列卷積層和最大池化層對輸入特性進(jìn)行下采樣。然后通過一系列的上采樣和卷積層將特征上采樣回原來的分辨率。由于細(xì)節(jié)在最大池化層中丟失,因此添加了跳過層用來將細(xì)節(jié)帶回到上采樣的特征。沙漏模塊在一個統(tǒng)一的結(jié)構(gòu)中捕獲全局和局部特征。當(dāng)多個沙漏模塊堆積在網(wǎng)絡(luò)中時,沙漏模塊可以重新處理特征以獲取更高級別的信息。這些特性使沙漏網(wǎng)絡(luò)成為目標(biāo)檢測的理想選擇。事實上,許多現(xiàn)有的檢測器已經(jīng)采用了類似沙漏網(wǎng)絡(luò)的網(wǎng)絡(luò)。

新方法的沙漏網(wǎng)絡(luò)由兩個沙漏組成,對沙漏模塊的結(jié)構(gòu)做了一些修改。不使用最大池,而是使用步長2來降低特征分辨率,減少了5倍的特征分辨率,并增加了特征通道的數(shù)量。當(dāng)對特征進(jìn)行上采樣時用了兩個殘差模塊,然后是一個最近的相鄰上采樣,每個跳躍連接還包含兩個殘差模塊。沙漏模塊中間有4個512通道的殘差模塊,在沙漏模塊之前,使用128個通道7×7的卷積模塊,步長為2,4倍減少的圖像分辨率,后跟一個256個通道,步長為2的殘差塊。

新方法還在訓(xùn)練時增加了中間監(jiān)督。但沒有向網(wǎng)絡(luò)中添加反向中間預(yù)測,因為發(fā)現(xiàn)這會損害網(wǎng)絡(luò)的性能,在第一個沙漏模塊的輸入和輸出,應(yīng)用了一個3×3的Conv-BN模塊。然后通過元素級的加法合并它們,后跟一個ReLU和一個具有256個通道的殘差塊,然后將其用作第二個沙漏模塊的輸入,沙漏網(wǎng)絡(luò)的深度為104,與許多其他最先進(jìn)的檢測器不同,只使用整個網(wǎng)絡(luò)最后一層的特征來進(jìn)行預(yù)測。

實驗結(jié)果

10.jpg

示例邊界框預(yù)測覆蓋在角點的預(yù)測熱圖上

在MS COCO test-dev上,CornerNet優(yōu)于其他所有one-stage檢測器

11.jpg

論文鏈接:https://arxiv.org/abs/1808.01244

代碼鏈接:https://github.com/umich-vl/CornerNet

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

矢量控制相關(guān)文章:矢量控制原理


關(guān)鍵詞: 深度學(xué)習(xí)

相關(guān)推薦

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

關(guān)閉