天天看點

怎麼了解anchor?

前言:這是知乎:faster rcnn中rpn的anchor,sliding windows,proposals之間的聯系是什麼?問題下的一個回答,這個回答首先解決了anchor是什麼(what)的問題,對于初次接觸到anchor這個概念的朋友來說,了解到這個深度已經夠了。待我以後研究相關的論文之後,再來補充為什麼這麼設定anchor(Why)的問題和如何選擇anchor大小(How)的問題。

首先我們需要知道anchor的本質是什麼,本質是SPP(spatial pyramid pooling)思想的逆向。而SPP本身是做什麼的呢,就是将不同尺寸的輸入resize成為相同尺寸的輸出。是以SPP的逆向就是,将相同尺寸的輸出,倒推得到不同尺寸的輸入。

接下來是anchor的視窗尺寸,這個不難了解,三個面積尺寸(1282,2562,512^2),然後在每個面積尺寸下,取三種不同的長寬比例(1:1,1:2,2:1).這樣一來,我們得到了一共9種面積尺寸各異的anchor。示意圖如下:

怎麼了解anchor?

至于這個anchor到底是怎麼用的,這個是了解整個問題的關鍵。

下面是整個faster RCNN結構的示意圖:

怎麼了解anchor?

利用anchor是從第二列這個位置開始進行處理,這個時候,原始圖檔已經經過一系列卷積層和池化層以及relu,得到了這裡的 feature:51x39x256(256是層數)

在這個特征參數的基礎上,通過一個3x3的滑動視窗,在這個51x39的區域上進行滑動,stride=1,padding=2,這樣一來,滑動得到的就是51x39個3x3的視窗。

對于每個3x3的視窗,作者就計算這個滑動視窗的中心點所對應的原始圖檔的中心點。然後作者假定,這個3x3視窗,是從原始圖檔上通過SPP池化得到的,而這個池化的區域的面積以及比例,就是一個個的anchor。換句話說,對于每個3x3視窗,作者假定它來自9種不同原始區域的池化,但是這些池化在原始圖檔中的中心點,都完全一樣。這個中心點,就是剛才提到的,3x3視窗中心點所對應的原始圖檔中的中心點。如此一來,在每個視窗位置,我們都可以根據9個不同長寬比例、不同面積的anchor,逆向推導出它所對應的原始圖檔中的一個區域,這個區域的尺寸以及坐标,都是已知的。而這個區域,就是我們想要的 proposal。是以我們通過滑動視窗和anchor,成功得到了 51x39x9 個原始圖檔的proposal。接下來,每個proposal我們隻輸出6個參數:每個 proposal 和 ground truth 進行比較得到的前景機率和背景機率(2個參數)(對應圖上的 cls_score);由于每個 proposal 和 ground truth 位置及尺寸上的差異,從 proposal 通過平移放縮得到 ground truth 需要的4個平移放縮參數(對應圖上的 bbox_pred)。

是以根據我們剛才的計算,我們一共得到了多少個anchor box呢?

51 x 39 x 9 = 17900

約等于 20 k

個人補充:

講anchor的大小之前,也要說明一下相對于原圖還是第幾層的特征圖。不同的“參考系”下,anchor的大小有很大的差別。

Yolo的作者犯了一個小的錯誤,這反倒可以讓我們了解anchor大小依托于

比如在YOLOv2中,作者用最後一層feature map的相對大小來定義anchor大小。也就是說,在YOLOv2中,最後一層feature map大小為13X13,相對的anchor大小範圍就在(0x0,13x13]。如果一個anchor大小是9x9,那麼其在原圖上的實際大小是288x288。

而在YOLOv3中,作者又改用相對于原圖的大小來定義anchor,anchor的大小為(0x0,input_w x input_h]。以下是作者自己的解釋:

So YOLOv2 I made some design choice errors, I made the anchor box size be relative to the feature size in the last layer. Since the network was down-sampling by 32. This means it was relative to 32 pixels so an anchor of 9x9 was actually 288px x 288px.

In YOLOv3 anchor sizes are actual pixel values. this simplifies a lot of stuff and was only a little bit harder to implement

https://github.com/pjreddie/darknet/issues/555#issuecomment-376190325

繼續閱讀