首頁>技術>

也許你正在學習計算機視覺的路上,並且已經深入研究了影象分類和滑動視窗檢測器。

毋庸諱言,深入大量流行的YOLO、SSD、R-CNN、Fast RCNN、Faster RCNN、Mask RCNN和RetinaNet,瞭解Anchor是一項艱鉅的工作,尤其是在您對實際程式碼瞭解有限時。

如果我告訴你,你可以利用今天深入學習目標檢測背後的Anchor呢?本文目標是幫助讀者梳理Anchor的以下內容:

What:anchor是什麼?Where:如何以及在何處對影象生成anchor以用於目標檢測訓練?When:何時可以生成anchor?Why:為什麼要學習偏移而不是實際值?How:如何在訓練過程中修正選定的anchor以實現訓練物件檢測模型?

1、What:anchor是什麼?

anchor是指預定義的框集合,其寬度和高度與資料集中目標的寬度和高度相匹配

預置的anchor包含在資料集中存在的目標大小的組合,如:資料中目標存在的不同長寬比(ratio)、大小(scale)和位置(location)。通常,在影象中的每一個位置預置4-10個anchor。

典型的目標檢測網路的訓練過程如下:生成預置anchor,將生成的anchor與ground truth配對,配對成功的分配給前景類別,其餘anchor分配給背景類別,然後進行sampling和訓練。

推理過程就是對anchor的分類和迴歸,score大於閾值的anchor進一步做後處理計算,小於閾值的作為背景捨棄,這樣就得到了目標檢測的結果。

2、Where:如何以及在何處對影象生成anchor,以用於目標檢測訓練

本質上,生成anchor是為了確定一組合適的框,這些框適合資料中的大多數目標,並將假設的、均勻分佈的框放置在影象上

為了理解錨定框是如何被生成的,假設有一個包含小目標的256px * 256px影象,其中大多數目標尺度位於40px * 40px或80px * x 40px之間。下面從三個方面考量anchor:

a、aspect ratios(長寬比):因為假設的ground turth寬高比在1:1和2:1之間。因此,應至少考慮兩個縱橫比(1:1和2:1),用來生成此示例資料集的anchor。

b、scales (大小):指物件的長度或寬度佔其包含影象的總長度或寬度的比例。

c、location(位置):除了框的形狀,還需要Anchor空間位置資訊,即的座標。

例如,假設一個影象的寬度=256px=1個單位,那麼一個40px寬的物件佔據40px/256px=0.15625個單位的寬度,即這個物件佔據整個影象寬度的15.62%。

為了選擇一組最能代表資料的尺度,我們可以考慮具有最極端值的物件側度量,即資料集中所有物件的所有寬度和高度之間的最小值和最大值。如果我們的示例資料集中最大和最小的比例是0.15625和0.3125,並且我們要為anchor選擇三個比例,那麼三個潛在的比例可能是0.15625、0.3125和0.234375(前面兩個尺度的均值)。

如果使用上面提到的兩個aspect ratios(長寬比,1:1和2:1)和scales (大小,0.15625、0.234375和0.3125)來建立此示例資料集的一組anchors,那麼將在任何一個位置將總共有六個anchors。

目標檢測器採用這樣的規則來生成anchor,假設檢測器網路輸入的特徵圖是4-channel 8*8,然後可以在每個單元格中心上生成6個不同aspect ratios和scales的anchor,那麼總共384個,這樣就儘可能的涵蓋所有可能性。

3、When:什麼時候在影象上生成anchor?

檢測器不預測anchor,而是為每個anchor預測一組值:a、anchor座標偏移(offset),b、每個類別的置信度得分。

這意味著在每次影象推理過程中都將始終使用相同的anchor,並且將使用網路預測的偏移(offset)來更正該anchor。

知道了這一點,就很容易理解anchor需要初始化,並將此資料結構儲存在記憶體中,以供實際使用時,如:在訓練中與ground ruth匹配,在推斷時將預測的偏移量應用於anchor。在這些點上,anchor的實際生成其實都已經生成了。

4、Why:為什麼要學習偏移而不是實際值?為什麼要學習偏移係數而不是偏移量

為什麼要學習偏移而不是實際值?

Anchor已經粗略地“框住了”輸入影象中的目標,明顯的一個問題是,框的不夠準確。因為受限於Anchor的生成方式,Anchor的座標永遠都是固定的那幾個。所以,如果我們需要預測相對於Anchor的offset,那麼,就可以透過預測的offset調整錨框位置,從而得到更精準的bounding box

為什麼要學習偏移係數而不是偏移量

以SSD為例,需要預測的ground turth計算方式如下:

首先,對於預測的bounding box的w和h可以透過anchor進行縮放,但有一個基本的要求,就是h和w都必須為正值,而網路最後一層的預測輸出是沒法保證正負的,所以最簡單的方法就是對預測輸出求exp,這樣就保證了預測值恆為正。那麼反過來,對預測目標就是求log。

其次,對cx和cy除以寬和高的處理是為了做尺度歸一化。例如,大的box的絕對偏移量一般較大,而小的box的絕對偏移量一般較小,除以寬和高消除這種影響。即兩個框大小不一,但相對值卻一致。

5、How:如何在訓練過程中修正選定的anchor以實現訓練物件檢測模型?

(1)迴歸任務:訓練過程中,網路迴歸任務學習的target並不是feature map上每個位置的所有anchor的offset,而是與ground truth匹配的anchor的實際偏移,背景框的anchor偏移保持為零。

這意味著,一旦anchor內的畫素空間被完全視為背景,則anchor不需要調整座標。換言之,由於分配給背景類別的anchor根本不應該移動或更正,因此沒有要預測的偏移量。

(2)分類任務:分類損失通常是使用在總背景框的子集來處理類不平衡。還記得在我們的示例中,每個位置有6個框,總共有384個建議嗎?好吧,大多數都是背景框,這就造成了一個嚴重的類別不平衡

解決這類不平衡問題的一個流行的解決方案是所謂的 hard negative mining ——根據預先確定的比率(通常為1:3; foreground:background)選擇一些高權重背景框。

在分類損失中處理類不平衡的另一個流行方法是降低易分類例項的權重損失貢獻,這就是RetinaNet的focal loss情況。

(3)推理過程:為了獲得最終的一組目標檢測,網路的預測偏移量被應用到相應的anchor中,可能會有成百上千個候選框,但最終,測器會忽略所有被預測為背景的盒子,保留透過某些標準的前景檢測結果,並應用NMS糾正同一物件的重疊預測。

如本文開頭所述,瞭解SOTA的目標檢測演算法,通常會變得令人望而生畏和晦澀難懂,但一旦您瞭解anchor的作用,目標檢測就有了全新的理解。

23
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 分享一款基於Web的統一資料操作平臺--cloudquery