角網(wǎng)絡——目標檢測(文后有paper地址及源碼)
今天分享的技術提出了一種新目標檢測方法,用單個卷積網(wǎng)絡將目標邊界框檢測為一對關鍵點(即邊界框的左上角和右下角)。通過將目標檢測為成對關鍵點,消除現(xiàn)有的one stage檢測器設計中對一組anchors的需要。除此之外,還引入了corner pooling,一種新型的池化層,可以幫助網(wǎng)絡更好的定位邊界框的角點。最終CornerNet在MS COCO上實現(xiàn)了42.1%的AP,優(yōu)于所有現(xiàn)有的one stage檢測器。
背景
基于卷積神經(jīng)網(wǎng)絡的目標檢測器已經(jīng)在各種具有挑戰(zhàn)性的基準測試數(shù)據(jù)集中有了最新成果?,F(xiàn)有技術方法的一個共同組成部分是anchor boxes,包含各種尺寸和寬高比的邊界檢測框,目標檢測的候選框。Anchor boxes廣泛用于one stage檢測器中,它可以獲得與two stage檢測器相當?shù)臋z測結果,同時效率更高。
One stage檢測器將anchor boxes密集分布在圖像上,通過對anchor boxes進行評分,并通過回歸來改進其坐標來生成最終的邊界框預測。但anchor boxes的使用有兩個缺點。
通常需要一組非常多的anchor boxes,比如在DSSD中超過4萬個,在RetinaNet中超過10多萬個, 這是因為訓練器被訓練以分類每個anchor boxes是否與ground truth充分重疊,并且需要大量anchor boxes以確保與大多數(shù)ground truth充分重疊。結果,只有一小部分anchor boxes與ground truth重疊; 這在正負樣本之間造成了巨大的不平衡,減慢了訓練速度;
Anchor boxes的使用引入了許多超參數(shù)和設計選擇。這些選擇主要是通過ad-hoc啟發(fā)式方法進行的,并且當與多尺度架構相結合時可能會變得更加復雜,其中單個網(wǎng)絡在多個分辨率下進行單獨預測,每個尺度使用不同的特征和它自己的一組anchor boxes。
新技術亮點
今天要分享的CornerNet,這是一種新的one stage目標檢測方法,可以消除anchor boxes。,將一個目標物體檢測為一對關鍵點(即:邊界框的左上角和右下角),使用單個卷積網(wǎng)絡來預測同一物體類別的所有實例的左上角的熱圖,所有右下角的熱圖,以及每個檢測到的角點的嵌入向量。
嵌入用于對屬于同一目標的一對角點進行分組——訓練網(wǎng)絡以預測它們的類似嵌入。我們的方法極大地簡化了網(wǎng)絡的輸出,并且無需設計anchor boxes。新方法受到Newell等人在多人姿態(tài)估計上下文中關聯(lián)嵌入的啟發(fā),下圖說明了新方法的整體流程:
CornerNet的另一個新穎組件是corner pooling,一種新的池化層方式,可幫助卷積網(wǎng)絡更好的定位邊界框的角點。邊界框的一角通常在目標之外,參考圓形的情況以及下圖的例子。
如上圖這種情況,角點不能根據(jù)當前的信息進行定位。相反,為了確定像素位置是否有左上角,需要水平地向右看目標的最上面邊界,垂直地向底部看物體的最左邊邊界。
這就激發(fā)了新方法的corner pooling layer:它包含兩個特征圖;在每個像素位置,它最大池化從第一個特征映射到右側的所有特征向量,最大池化從第二個特征映射下面的所有特征向量,然后將兩個池化結果一起添加,如下圖所示:
動機
假設了兩個原因,為什么檢測角點會比檢測邊界框中心或proposals好?
邊界框的中心可能更難以定位,因為它取決于目標的所有4個邊,而定位角取決于2邊,因此更容易,甚至更多的corner pooling,它編碼一些明確的關于角點定義的先驗信息;
角點提供了一種更有效的方式來密集地離散邊界框的空間,只需要用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的卓越性能起到至關重要的作用。
相關技術
Two-stage目標檢測器
Two-stage目標檢測由R-CNN首次引入并推廣。Two-stage檢測器生成一組稀疏的感興趣區(qū)域(RoIs),并通過網(wǎng)絡對每個區(qū)域進行分類。R-CNN使用低層次視覺算法生成(RoIs),然后從圖像中提取每個區(qū)域,由ConvNet獨立處理,這將導致大量計算冗余。
后來SPP-Net和Fast R-CNN改進了R-CNN,設計了一個特殊的池化層(金字塔池化),將每個區(qū)域從feature map中池化。然而,兩者仍然依賴于單獨的proposals算法,不能進行端到端訓練。
Faster-RCNN通過引入?yún)^(qū)域生成網(wǎng)絡(RPN)來去除低層次的proposals算法,RPN從一組預先確定的候選框中生成proposals。這不僅使檢測器更加高效,通過RPN與檢測網(wǎng)絡的聯(lián)合訓練,可實現(xiàn)端到端訓練。
R-FCN將全連接子檢測網(wǎng)絡替換為完全卷積子檢測網(wǎng)絡,進一步提高了Faster R-CNN的檢測效率。其他的工作主要集中在結合子類別信息,用更多的上下文信息在多個尺度上生成目標的proposals,選擇更好的特征,提高速度,并行處理和更好的訓練過程。
One-stage目標檢測器
YOLO和SSD推廣了one-stage方法,該方法消除了RoI池化步驟,并在單個網(wǎng)絡中檢測目標。
One-stage檢測器通常比two-stage檢測器計算效率更高,同時在不同的具有挑戰(zhàn)性的基準上保持著具有競爭性的性能。SSD算法將anchor boxes密集地放置在多個尺度的feature maps之上,直接對每個anchor boxes進行分類和細化。YOLO直接從圖像中預測邊界框坐標,后來在YOLO V2中,通過使用anchor boxes進行了改進。
DSSD和RON采用了類似沙漏的網(wǎng)絡,使它們能夠通過跳躍連接將低級和高級特性結合起來,從而更準確地預測邊界框。
在RetinaNet出現(xiàn)之前,這些one-stage檢測器的檢測精度仍然落后于two-stage檢測器。在RetinaNet中,作者認為密集的anchor boxes在訓練中造成了正樣本和負樣本之間的巨大不平衡。這種不平衡導致訓練效率低下,從而導致結果不佳,他們提出了一種新的loss——Focal Loss,來動態(tài)調(diào)整每個anchor boxes的權重,并說明了他們的one-stage檢測器檢測性能優(yōu)于two-stage檢測器。
RefineDet建議對anchor boxes進行過濾,以減少負樣本的數(shù)量,并對anchor boxes進行粗略的調(diào)整。
DeNet是一種two-stage檢測器,不使用anchor boxes就能生成RoIs。它首先確定每個位置屬于邊界框的左上角、右上角、左下角或右下角的可能性。然后,它通過列舉所有可能的角點組合來生成RoI,并遵循標準的two-stage方法對每個RoI進行分類。
新提出的方法和DeNet很不一樣。首先,DeNet不識別兩個角是否來自同一目標,并依賴子檢測網(wǎng)絡來拒絕糟糕的RoI。相比之下,新方法是一種one-stage方法,使用單個卷積網(wǎng)絡來檢測和分組角點。其次,DeNet在人工確定的位置上的區(qū)域提取特征進行分類,而新方法不需要任何特征選擇步驟。然后,引入corner pooling,一種新型的用于增強角點檢測的layer。
新方法受到Newell等人在多人姿態(tài)估計上下文中關聯(lián)嵌入的啟發(fā)。Newell等人提出了一種在單個網(wǎng)絡中檢測和分組人類關節(jié)的方法。在他們的方法中,每個檢測到的人類關節(jié)都有一個嵌入向量。這些關節(jié)是根據(jù)它們嵌入的距離來分組的。
本次新技術是第一個將目標檢測任務定義為同時檢測和分組角點的任務,另一個新穎之處在于corner pooling layer,它有助于更好定位角點,還對沙漏結構進行了顯著地修改,并添加了新的focal loss的變體,以幫助更好地訓練網(wǎng)絡。
新算法框架愛
下圖提供了CornerNet的概述。使用沙漏網(wǎng)絡作為CornerNet的骨干網(wǎng)絡。沙漏網(wǎng)絡之后是兩個預測模塊:一個模塊用于左上角,另一個模塊用于右下角。每個模塊都有自己的corner pooling模塊,在預測熱圖、嵌入和偏移之前,池化來自沙漏網(wǎng)絡的特征。與許多其他物體探測器不同,不使用不同尺度的特征來檢測不同大小的物體,只將兩個模塊應用于沙漏網(wǎng)絡的輸出。
檢測角點
預測兩組熱圖,一組用于左上角,另一組用于右下角。每組熱圖具有C個通道,其中C是分類的數(shù)量,并且大小為H×W。沒有背景通道。每個通道都是一個二進制掩碼,用于表示該類的角點位置。
上圖,用于訓練的“Ground-truth”熱圖。在正位置半徑范圍內(nèi)(橙色圓圈)的方框(綠色虛線矩形)仍然與地ground-truth(紅色實心矩形)有很大的重疊。
分組角點
圖像中可能出現(xiàn)多個目標,因此可能檢測到多個左上角和右下角。需要確定左上角和右下角的一對角點是否來自同一個目標邊界框,新方法受到Newell等人提出的用于多人姿態(tài)估計任務的關聯(lián)嵌入方法的啟發(fā)。Newell等人檢測所有人類關節(jié),并為每個檢測到的關節(jié)生成嵌入,他們根據(jù)嵌入之間的距離將節(jié)點進行分組。
關聯(lián)嵌入的思想也適用于今天說的的任務,網(wǎng)絡預測每個檢測到的角點的嵌入向量,使得如果左上角和右下角屬于同一個邊界框,則它們的嵌入之間的距離應該小。然后,可以根據(jù)左上角和右下角嵌入之間的距離對角點進行分組,嵌入的實際值并不重要,僅使用嵌入之間的距離來對角點進行分組。
Corner Pooling
如第個圖,通常沒有局部視覺證據(jù)表明存在角點。要確定像素是否為左上角,需要水平地向右看目標的最上面邊界,垂直地向底部看物體的最左邊邊界。因此,提出corner Pooling通過編碼顯式先驗知識來更好地定位角點。
預測模塊從一個修改后的殘塊開始,其中將第一個卷積模塊替換為corner pooling模塊,修改后的殘差塊后面跟著一個卷積模塊,新方法有多個分支用于預測熱圖、嵌入和偏移量。
預測模塊的結構如上圖所示。模塊的第一部分是殘差模塊的修改版本。在這個修改后的殘差模塊中,將第一個3×3的卷積模塊替換為一個corner pooling模塊。這個殘差模塊,首先通過具有128個通道的2個3×3卷積模塊的主干網(wǎng)絡處理特征,然后應用一個corner pooling層。殘差模塊之后,將池化特征輸入具有256個通道的3×3的Conv-BN層,然后加上反向projection shortcut。修改后的殘塊,后跟一個具有256個通道的3×3的卷積模塊,和256個通道的3個Conv-ReLU-Conv層來產(chǎn)生熱圖,嵌入和偏移量。
沙漏網(wǎng)絡
CornerNet使用沙漏網(wǎng)絡作為其骨干網(wǎng)絡。它是一個全卷積神經(jīng)網(wǎng)絡,由一個或多個沙漏模塊組成。沙漏模塊首先通過一系列卷積層和最大池化層對輸入特性進行下采樣。然后通過一系列的上采樣和卷積層將特征上采樣回原來的分辨率。由于細節(jié)在最大池化層中丟失,因此添加了跳過層用來將細節(jié)帶回到上采樣的特征。沙漏模塊在一個統(tǒng)一的結構中捕獲全局和局部特征。當多個沙漏模塊堆積在網(wǎng)絡中時,沙漏模塊可以重新處理特征以獲取更高級別的信息。這些特性使沙漏網(wǎng)絡成為目標檢測的理想選擇。事實上,許多現(xiàn)有的檢測器已經(jīng)采用了類似沙漏網(wǎng)絡的網(wǎng)絡。
新方法的沙漏網(wǎng)絡由兩個沙漏組成,對沙漏模塊的結構做了一些修改。不使用最大池,而是使用步長2來降低特征分辨率,減少了5倍的特征分辨率,并增加了特征通道的數(shù)量。當對特征進行上采樣時用了兩個殘差模塊,然后是一個最近的相鄰上采樣,每個跳躍連接還包含兩個殘差模塊。沙漏模塊中間有4個512通道的殘差模塊,在沙漏模塊之前,使用128個通道7×7的卷積模塊,步長為2,4倍減少的圖像分辨率,后跟一個256個通道,步長為2的殘差塊。
新方法還在訓練時增加了中間監(jiān)督。但沒有向網(wǎng)絡中添加反向中間預測,因為發(fā)現(xiàn)這會損害網(wǎng)絡的性能,在第一個沙漏模塊的輸入和輸出,應用了一個3×3的Conv-BN模塊。然后通過元素級的加法合并它們,后跟一個ReLU和一個具有256個通道的殘差塊,然后將其用作第二個沙漏模塊的輸入,沙漏網(wǎng)絡的深度為104,與許多其他最先進的檢測器不同,只使用整個網(wǎng)絡最后一層的特征來進行預測。
實驗結果
示例邊界框預測覆蓋在角點的預測熱圖上
在MS COCO test-dev上,CornerNet優(yōu)于其他所有one-stage檢測器
論文鏈接:https://arxiv.org/abs/1808.01244
代碼鏈接:https://github.com/umich-vl/CornerNet
*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權請聯(lián)系工作人員刪除。
矢量控制相關文章:矢量控制原理