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