多尺度目標檢測 Multiscale Object Detection
我們在輸入圖像的每個像素上生成多個錨框。這些定位框用於對輸入圖像的不同區域進行采樣。但是,如果錨定框是以圖像的每個像素為中心生成的,很快就會有太多的錨框供我們計算。例如,我們假設輸入圖像的高度和寬度分別為561和728像素。如果以每個像素為中心生成五個不同形狀的錨框,則超過兩百萬個錨框(561×728×5)需要在圖像上進行預測和標記。
減少錨箱數量並不困難。一種簡單的方法是對輸入圖像中的一小部分像素進行均勻采樣,並生成以采樣像素為中心的錨框。此外,我們可以在多個尺度上生成不同數量和尺寸的錨箱。請注意,較小的對象比較大的對象更有可能定位在圖像上。這里,我們將使用一個簡單的示例:
具有1×1, 1×2,和2×2在具有形狀的圖像上可能有4、2和1可能的位置2×2。 因此,當使用較小的錨定框來檢測較小的對象時,我們可以采樣更多的區域;當使用較大的錨框檢測較大的對象時,我們可以采樣較少的區域。
為了演示如何在多個比例上生成錨框,讓我們先讀一個圖像。它的高度和寬度561×728像素。
%matplotlib inline
from d2l import mxnet as d2l
from mxnet import image, np, npx
npx.set_np()
img = image.imread('../img/catdog.jpg')
h, w = img.shape[0:2]
h, w
(561, 728)
卷積神經網絡(CNN)的二維陣列輸出稱為特征映射。通過定義特征映射的形狀,可以確定任意圖像上均勻采樣的錨盒的中點。
函數display_anchors定義如下。我們將在特征地圖fmap上的每個單元(像素)上生成錨定框。因為坐標軸x和y在錨定框中,錨定被特征地圖fmap的寬度和高度分割,0到1之間的值可以用來表示錨定框在特征地圖中的相對位置。由於錨框錨定點的中點與特征地圖fmap上的所有單元重疊,因此錨定點在任何圖像上的相對空間位置必須具有均勻的分布。具體來說,當特征圖的寬度和高度分別設置為fmap_w和fmap_h時,該函數將對fmap_h行和fmap_w列進行統一采樣,並將它們作為中點生成大小為s(我們假設列表s的長度為1)和不同縱橫比(比率)的錨框。
def display_anchors(fmap_w, fmap_h, s):
d2l.set_figsize((3.5, 2.5))
# The values from the first two dimensions will not affect the output
fmap = np.zeros((1, 10, fmap_w, fmap_h))
anchors = npx.multibox_prior(fmap, sizes=s, ratios=[1, 2, 0.5])
bbox_scale = np.array((w, h, w, h))
d2l.show_bboxes(d2l.plt.imshow(img.asnumpy()).axes,
anchors[0] * bbox_scale)
我們首先將重點放在小物體的探測上。為了便於在顯示時進行區分,此處具有不同中點的錨定框不重疊。我們假設錨框的大小為0.15,特征映射的高度和寬度為4。我們可以看到圖片上4行4列的錨框中點分布均勻。
display_anchors(fmap_w=4, fmap_h=4, s=[0.15])
把特征地圖的高度和寬度減少一半,並使用一個更大的定位框來檢測更大的物體。當“大小”設置為0.4時,某些錨框的區域之間將發生重疊。
display_anchors(fmap_w=2, fmap_h=2, s=[0.4])
最后,我們將把特征圖的高度和寬度減少一半,並將錨框大小增加到0.8。現在錨框的中點就是圖像的中心。
display_anchors(fmap_w=1, fmap_h=1, s=[0.8])
由於我們已經在多個尺度上生成了不同大小的錨盒,因此我們將使用它們來檢測不同尺度下不同大小的對象。現在我們將介紹一種基於卷積神經網絡(CNNs)的方法。
在一定的范圍內,假設我們產生高×寬具有不同中點的錨定框集基於ci,帶形狀的特征地圖高×寬,每組錨箱數量為a。
例如,對於第一個比例的實驗,我們基於10個(通道數)特征映射生成16組具有不同中點的錨盒,形狀為4×4個,每套含3個錨箱。
根據地面真實邊界框的分類和位置,為每個錨框標記一個類別和偏移量。在當前尺度下,目標檢測模型需要預測目標的類別和偏移量高×寬,基於輸入圖像具有不同中點的定位框集。
我們假設ci特征圖是CNN基於輸入圖像的中間輸出。因為每個特征地圖都有高×寬不同的空間位置,相同的位置會有ci單位。根據感受野的定義,ci同一空間位置的特征圖單元在輸入圖像上具有相同的感受野。因此,它們表示輸入圖像在同一感受野中的信息。
因此,我們可以改變ci,在同一空間位置的要素映射單位生成一個定位框。不難看出,本質上,我們利用輸入圖像在某個接收野的信息來預測輸入圖像上靠近場的錨盒的種類和偏移量。
當不同層次的特征映射在輸入圖像上有不同大小的接收野時,它們被用來檢測不同大小的目標。例如,我們可以在一個更大的圖像接收層設計一個更大的圖像接收層。
Summary
- We can generate anchor boxes with different numbers and sizes on multiple scales to detect objects of different sizes on multiple scales.
- The shape of the feature map can be used to determine the midpoint of the anchor boxes that uniformly sample any image.
- We use the information for the input image from a certain receptive field to predict the category and offset of the anchor boxes close to that field on the image.