全面理解目標檢測中的anchor
來(lái)源丨CV技術(shù)指南
編輯丨極市平臺
導讀
anchor是一個(gè)晦澀難懂的東西,沒(méi)有在哪篇論文中有明確的定義,也沒(méi)有詳細介紹它到底是什么,很多人在初次接觸時(shí)非常頭疼。在本文將詳細介紹一下anchor。
前言
在本文將詳細介紹一下anchor,主要包括以下內容:
What:anchor是什么?
Where:如何以及在何處對圖像生成anchor以用于目標檢測訓練?
When:何時(shí)可以生成anchor?
Why:為什么要學(xué)習偏移而不是實(shí)際值?
How:如何在訓練過(guò)程中修正選定的anchor以實(shí)現訓練目標檢測模型?
前幾年主流的SOTA目標檢測都基于anchor來(lái)設計,這方面的研究有 YOLO、SSD、R-CNN、Fast-RCNN、Faster-RCNN、Mask-RCNN 和 RetinaNet等,anchor是一個(gè)晦澀難懂的東西,沒(méi)有在哪篇論文中有明確的定義,也沒(méi)有詳細介紹它到底是什么,很多人在初次接觸時(shí)非常頭疼。
在本文將,主要包括以下內容:
What:anchor是什么?
Where:如何以及在何處對圖像生成anchor以用于目標檢測訓練?
When:何時(shí)可以生成anchor?
Why:為什么要學(xué)習偏移而不是實(shí)際值?
How:如何在訓練過(guò)程中修正選定的anchor以實(shí)現訓練目標檢測模型?
anchor是什么
術(shù)語(yǔ)anchor boxes是指預定義的框集合,其寬度和高度被選擇以匹配數據集中目標的寬度和高度。提議的anchor boxes包含可以在數據集中找到的目標大小的可能組合。這自然應該包括數據中存在的不同縱橫比和比例。通常選擇 4-10 個(gè)anchor boxes作為圖像中不同位置的提議。
在計算機視覺(jué)領(lǐng)域,深度學(xué)習神經(jīng)網(wǎng)絡(luò )在圖像分類(lèi)和目標檢測方面表現出色。首先是滑動(dòng)窗口檢測器,可以在前向傳遞中定位單個(gè)目標?;瑒?dòng)窗口檢測器已被單次和兩級檢測器取代,它們能夠處理整個(gè)圖像并輸出多個(gè)檢測。這些目標檢測器嚴重依賴(lài)anchor boxes的概念來(lái)優(yōu)化滑動(dòng)窗口檢測的速度和效率。這是因為滑動(dòng)窗口檢測器需要大量的前向傳遞來(lái)處理圖像,而許多前向傳遞只處理背景像素。有關(guān)滑動(dòng)窗口檢測器的說(shuō)明,請參見(jiàn)下面的圖 1。
圖 1:滑動(dòng)窗口檢測器
訓練目標檢測網(wǎng)絡(luò )的典型任務(wù)包括提出anchor boxes或使用傳統計算機視覺(jué)技術(shù)搜索潛在錨、將提議的錨與可能的ground truth 框配對、將其余的分配給背景類(lèi)別并訓練以糾正輸入提案框。需要注意的是,anchor boxes的概念可以用于預測固定數量的框。
anchor在圖像上如何以及在哪里提出?
從本質(zhì)上講,提出anchors是關(guān)于確定可以適合數據中大多數目標的適當框的集合,將假設的、均勻間隔的框放置在圖像上,并創(chuàng )建一個(gè)規則將卷積特征圖的輸出映射到每個(gè)位置在圖像中。
要了解anchor boxes是如何提出的,請考慮包含小目標的 256px x 256px 圖像的目標檢測數據集,其中大多數目標位于 40px X 40px 或 80px X 40px 之間。額外的數據整理可能表明,ground truth 框大多是寬高比為 1:1 的正方形或寬高比為 2:1 的矩形。
鑒于此,應至少考慮兩個(gè)縱橫比(1:1 和 2:1)來(lái)提議此示例數據集的anchor boxes。這些目標的比例將指目標的長(cháng)度或寬度(以像素為單位)占其包含圖像的總長(cháng)度或寬度(以像素為單位)的比例。
例如,考慮一個(gè)圖像的寬度 = 256px = 1 個(gè)單位,那么一個(gè) 40px 寬的目標占據 40px / 256px = 0.15625 個(gè)單位的寬度——該目標占據總圖像寬度的 15.62%。
為了選擇一組最能代表數據的尺度,我們可以考慮具有最極端值的目標側度量,即數據集中所有目標的所有寬度和高度之間的最小最小值和最大最大值。如果示例數據集中的最大和最小尺度是 0.15625 和 0.3125,并且我們要為anchor boxes提議選擇三個(gè)尺度,那么三個(gè)潛在尺度可能是 0.15625、0.234375 和 0.3125。
如果使用上面提到的兩個(gè)縱橫比(1:1 和 2:1)和這三個(gè)尺度(0.15625、0.234375 和 0.3125)為這個(gè)示例數據集提出anchor boxes,我們將總共有六個(gè)anchor boxes來(lái)提出多個(gè)在任何輸入圖像中的位置。
下圖顯示了圖像上均勻間隔的 8×8 網(wǎng)格??梢栽诿總€(gè)單元中心上提出一個(gè)邊界框。在每個(gè)位置提出 6 個(gè)框,總共 384 個(gè)。在每個(gè)位置,我們可以為長(cháng)寬比和比例的每個(gè)組合提出一個(gè)框,每個(gè)網(wǎng)格中心/位置總共有六個(gè)框。在每個(gè)位置都提出了不同縱橫比和比例的框,以涵蓋所有可能性。
圖 2:上面有 8×8 網(wǎng)格的圖像
為了獲得對圖 2 中網(wǎng)格中每個(gè)位置的卷積神經(jīng)網(wǎng)絡(luò )預測,考慮一個(gè) 4 通道 8×8 特征圖,其中每個(gè)通道輸出每個(gè)位置一個(gè)框的 x、y、寬度和高度坐標。對于每個(gè)位置的六個(gè)框,考慮一個(gè) 4*6 通道的 8*8 特征圖。使用anchor boxes的 SOTA 架構通常包含維度為 8 倍數的特征圖。這是可能的,因為卷積神經(jīng)網(wǎng)絡(luò )本質(zhì)上對輸入進(jìn)行下采樣,同時(shí)通過(guò) 2D 卷積和池化操作保留重要的空間特征,并且完全卷積層輸出密集的特征圖如圖 3 所示。
圖 3:顯示下采樣如何發(fā)生以及每個(gè)漸進(jìn)特征圖如何變小的卷積層。
現在來(lái)談?wù)剻z測小于網(wǎng)格單元大小的目標——當提議網(wǎng)格如此自然以至于有包含多個(gè)小目標的單個(gè)單元格時(shí)。這可以通過(guò)提出更精細的網(wǎng)格并相應地調整特征圖輸出形狀來(lái)解決。更好的是,可以使用多個(gè)網(wǎng)格并將它們映射到卷積層次結構中的不同卷積層,就像 SSD 和 RetinaNet 預測器頭使用的特征金字塔網(wǎng)絡(luò )一樣。
在下一節中,我們將討論在生成ground truth批次或在推理時(shí)解釋預測時(shí)如何需要在不同位置的圖像上提出anchors的概念。
什么時(shí)候在圖像上提出anchor?
檢測器不預測框,而是為每個(gè)提議的邊界框預測一組值,主要是每個(gè)正在學(xué)習的類(lèi)別的anchor boxes坐標偏移和置信度分數。這意味著(zhù)將始終在每個(gè)圖像上提出相同的anchors,并且將使用前向傳遞的預測偏移量來(lái)糾正這些提議。網(wǎng)絡(luò )沒(méi)有將特征圖坐標與圖像內的位置匹配的概念,也沒(méi)有將其輸出對應于anchor boxes直到輸出被解釋的概念。
從理論上講,由于每張圖像將始終與同一組固定anchors提議相關(guān)聯(lián),并且訓練過(guò)程中g(shù)round truth不會(huì )改變,因此實(shí)際上沒(méi)有必要多次提議anchors或將它們與ground truth或背景類(lèi)別匹配。提案和ground truth匹配通常都發(fā)生在批處理生成器中。有時(shí),提案生成層會(huì )添加到實(shí)際網(wǎng)絡(luò )中,以將錨數據添加到網(wǎng)絡(luò )的輸出張量中,但在批處理生成器中生成和平鋪圖像上的提案的邏輯應該是相同的。
知道了這一點(diǎn),就很容易理解ancor需要初始化,并將此數據結構存儲在內存中,以供實(shí)際使用時(shí),如:在訓練中與ground ruth匹配,在推斷時(shí)將預測的偏移量應用于anchor。
為什么學(xué)習偏移量而不是實(shí)際值?
從理論上講,如果卷積濾波器將其感受野照射在同一類(lèi)型的目標上兩次,則無(wú)論濾波器在圖像中的哪個(gè)位置照射其感受野,它都應該輸出大致相同的值兩次。
這意味著(zhù),如果圖像包含兩輛車(chē)并且輸出特征圖包含絕對坐標,那么網(wǎng)絡(luò )將預測兩輛車(chē)的坐標大致相同。
學(xué)習anchors偏移量允許特征圖輸出與這兩輛車(chē)的偏移量輸出相似,但偏移量應用于可映射到輸入圖像中不同位置的anchors。這是在綁定框回歸期間學(xué)習anchor boxes偏移背后的主要原因。
ground truth——匹配anchors并生成批次
ground truth批次必須包含要學(xué)習的目標偏移量,并且應包含建議的anchors。后者在訓練期間不使用,但避免了在推理時(shí)將anchors與偏移預測與附加數據結構和隨附代碼相關(guān)聯(lián)。目標偏移量應該是將建議精確移動(dòng)到匹配的ground truth框或零(如果它是背景框的ground truth)所需的精確量,因為背景框不需要校正。
回顧一下,基于錨的批處理生成器構建了一個(gè)學(xué)習目標,其中在訓練期間將考慮圖像的每個(gè)提議的錨,無(wú)論它是否已分配到前景或背景類(lèi)別。按照我們的示例,一批將從 64 個(gè)位置的 6 個(gè)anchors開(kāi)始,總共 384 個(gè)anchors框。每個(gè)提議的anchors都可能通過(guò)以下或這些基本步驟的變體與ground truth框匹配:
對于每個(gè)anchors,找到哪個(gè)ground truth框具有最高的聯(lián)合交集(IOU)分數
IOU 大于 50% 的anchors匹配到相應的ground truth框
IOU 大于 40% 的anchors被認為是不明確的并被忽略
IOU 小于 40% 的anchors被分配到背景類(lèi)別
重新梳理一遍這個(gè)過(guò)程。從所有提議的anchors(在示例中為 384 個(gè))的集合開(kāi)始,與ground truth框匹配的框將包含其類(lèi)別和更新的偏移量以糾正或移動(dòng)該anchors。對背景和模糊/忽略框的偏移保持在它們的初始零偏移值。同樣,這些偏移量是我們想要用神經(jīng)網(wǎng)絡(luò )來(lái)近似的值。這些是在邊界框回歸任務(wù)中學(xué)習的實(shí)際值。決定權重優(yōu)化將考慮哪些背景偏移并丟棄不匹配的框通常發(fā)生在損失函數中。
如何在訓練期間修正anchor boxes
損失計算不會(huì )對anchor boxes應用偏移量。在這一點(diǎn)上,批處理生成器已經(jīng)編碼了將anchors準確地“移動(dòng)”到ground truth所在的位置所需的偏移量,并且如上所述,這是與ground truth框匹配或不匹配的每個(gè)建議框的位置學(xué)習目標。不匹配的anchor boxes不應造成損失,通常會(huì )被忽略。
回想一下,網(wǎng)絡(luò )在每個(gè)特征圖位置預測所有提議的偏移量。這意味著(zhù)ground truth數據包含與ground truth框匹配的anchors的真實(shí)偏移量,而背景框的ground truth偏移量保持為零。這是因為anchors內的像素空間完全被認為是背景,提議的anchors就不需要坐標調整。
此外,這些零值將被忽略,因為背景anchors偏移確實(shí)會(huì )導致回歸損失。這是因為目標檢測是關(guān)于學(xué)習尋找前景目標,并且邊界框回歸損失(預測偏移量和正確偏移量之間)通常僅針對前景目標最小化。換句話(huà)說(shuō),由于分配給背景類(lèi)別的anchors根本不應該被移動(dòng)或校正,因此沒(méi)有要預測的偏移量,也沒(méi)有可以代表邊界框回歸損失中的背景框的重要值。
通常使用ground truth中存在的總背景框的子集來(lái)最小化分類(lèi)損失來(lái)處理類(lèi)不平衡。在示例中,每個(gè)位置有 6 個(gè)框,總共 384 個(gè)提案, 其中大部分將是背景框,這會(huì )造成嚴重的類(lèi)不平衡。這種類(lèi)別不平衡問(wèn)題的流行解決方案被稱(chēng)為hard negative mining——根據預定比例(通常為 1:3;前景:背景)選擇哪些背景框將對損失產(chǎn)生影響。在分類(lèi)損失中處理類(lèi)別不平衡的另一種流行方法涉及降低易于分類(lèi)示例的損失貢獻。RetinaNet 的 Focal Loss 就是這種情況。
為了獲得最終的一組目標檢測,網(wǎng)絡(luò )的預測偏移量被應用于它們相應的anchor boxes??赡苡谐砂偕锨€(gè)提議的框,但最終,當前的 SOTA 檢測器忽略所有預測為背景的框,保留通過(guò)某些標準的前景檢測,并應用非最大抑制來(lái)糾正同一目標的重疊預測。
正如本文開(kāi)頭提到的,理解SOTA目標檢測的飛躍通常會(huì )變得令人生畏和晦澀,但是一旦了解了anchor boxes的作用,目標檢測就會(huì )具有全新的意義。
原文鏈接:
https://www.wovenware.com/blog/2020/06/anchor-boxes-in-object-detection-when-where-and-how-to-propose-them-for-deep-learning-apps/#.YYCcrZ5BxhE*
本文僅做學(xué)術(shù)分享,如有侵權,請聯(lián)系刪文。
*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。