在第 14.3 節(jié)到第 14.6 節(jié)中,我們介紹了邊界框、錨框、多尺度目標(biāo)檢測(cè)和目標(biāo)檢測(cè)數(shù)據(jù)集。現(xiàn)在我們準(zhǔn)備使用這些背景知識(shí)來(lái)設(shè)計(jì)一個(gè)目標(biāo)檢測(cè)模型:?jiǎn)未味嗫驒z測(cè)(SSD)(Liu et al. , 2016)。該模型簡(jiǎn)單、快速、應(yīng)用廣泛。雖然這只是大量目標(biāo)檢測(cè)模型中的一種,但本節(jié)中的一些設(shè)計(jì)原則和實(shí)現(xiàn)細(xì)節(jié)也適用于其他模型。
14.7.1。模型
圖 14.7.1提供了單次多框檢測(cè)設(shè)計(jì)的概述。該模型主要由一個(gè)基礎(chǔ)網(wǎng)絡(luò)和幾個(gè)多尺度特征圖塊組成。基礎(chǔ)網(wǎng)絡(luò)用于從輸入圖像中提取特征,因此可以使用深度 CNN。例如,原始的單次多框檢測(cè)論文采用在分類層之前截?cái)嗟腣GG網(wǎng)絡(luò) (Liu et al. , 2016),而 ResNet 也被普遍使用。通過(guò)我們的設(shè)計(jì),我們可以讓基礎(chǔ)網(wǎng)絡(luò)輸出更大的特征圖,從而生成更多的錨框來(lái)檢測(cè)更小的物體。隨后,每個(gè)多尺度特征圖塊從前一個(gè)塊減少(例如,減半)特征圖的高度和寬度,并使特征圖的每個(gè)單元增加其在輸入圖像上的感受野。
回想一下14.5 節(jié)中深度神經(jīng)網(wǎng)絡(luò)通過(guò)圖像的分層表示進(jìn)行多尺度目標(biāo)檢測(cè)的設(shè)計(jì) 。由于靠近圖 14.7.1頂部的多尺度特征圖較小但具有較大的感受野,因此它們適用于檢測(cè)較少但較大的對(duì)象。
簡(jiǎn)而言之,通過(guò)其基礎(chǔ)網(wǎng)絡(luò)和多個(gè)多尺度特征圖塊,單次多框檢測(cè)生成不同數(shù)量的不同大小的錨框,并通過(guò)預(yù)測(cè)這些錨框的類別和偏移量(因此邊界盒);因此,這是一個(gè)多尺度目標(biāo)檢測(cè)模型。
圖 14.7.1作為多尺度目標(biāo)檢測(cè)模型,單次多框檢測(cè)主要由一個(gè)基礎(chǔ)網(wǎng)絡(luò)和幾個(gè)多尺度特征圖塊組成。
下面,我們將描述圖14.7.1中不同塊的實(shí)現(xiàn)細(xì)節(jié)。首先,我們討論如何實(shí)現(xiàn)類和邊界框預(yù)測(cè)。
14.7.1.1。類別預(yù)測(cè)層
讓對(duì)象類的數(shù)量為q. 然后anchor boxes有 q+1類,其中類 0 是背景。在某種程度上,假設(shè)特征圖的高度和寬度是h和w, 分別。什么時(shí)候a以這些特征圖的每個(gè)空間位置為中心生成anchor boxes,一共 hwaanchor boxes需要分類。由于參數(shù)化成本可能很高,這通常會(huì)使完全連接層的分類變得不可行。回想一下我們?cè)?.3 節(jié)中如何使用卷積層的通道來(lái)預(yù)測(cè)類別。單次多框檢測(cè)使用相同的技術(shù)來(lái)降低模型的復(fù)雜性。
具體來(lái)說(shuō),類預(yù)測(cè)層使用卷積層而不改變特征圖的寬度或高度。這樣,在特征圖的相同空間維度(寬度和高度)下,輸出和輸入之間可以存在一一對(duì)應(yīng)關(guān)系。更具體地說(shuō),輸出特征映射的通道在任何空間位置(x, y) 表示以 (x,y) 輸入特征圖。為了產(chǎn)生有效的預(yù)測(cè),必須有a(q+1)輸出通道,其中對(duì)于相同的空間位置,具有索引的輸出通道i(q+1)+j 代表類別的預(yù)測(cè)j (0≤j≤q) 對(duì)于錨框i (0≤i).
下面我們定義這樣一個(gè)類預(yù)測(cè)層,指定a和 q分別通過(guò)參數(shù)num_anchors
和num_classes
。該層使用了3×3填充為1的卷積層。該卷積層的輸入和輸出的寬度和高度保持不變。
14.7.1.2。邊界框預(yù)測(cè)層
邊界框預(yù)測(cè)層的設(shè)計(jì)與類預(yù)測(cè)層的設(shè)計(jì)類似。唯一的區(qū)別在于每個(gè)錨框的輸出數(shù)量:這里我們需要預(yù)測(cè)四個(gè)偏移量而不是q+1類。
14.7.1.3。連接多個(gè)尺度的預(yù)測(cè)
正如我們提到的,單次多框檢測(cè)使用多尺度特征圖來(lái)生成錨框并預(yù)測(cè)它們的類別和偏移量。在不同的尺度下,特征圖的形狀或以同一單元為中心的錨框數(shù)量可能會(huì)有所不同。因此,不同尺度的預(yù)測(cè)輸出的形狀可能會(huì)有所不同。
在下面的例子中,我們構(gòu)建了兩種不同比例的特征圖,Y1
并且Y2
,對(duì)于同一個(gè)小批量,其中 的高度和寬度Y2
是 的一半Y1
。讓我們以類別預(yù)測(cè)為例。Y1
假設(shè)分別為和中的每個(gè)單元生成 5 個(gè)和 3 個(gè)錨框Y2
。進(jìn)一步假設(shè)對(duì)象類的數(shù)量為 10。對(duì)于特征圖Y1
和Y2
類預(yù)測(cè)輸出中的通道數(shù)為5×(10+1)=55 和3×(10+1)=33,其中任一輸出形狀為(批量大小、通道數(shù)、高度、寬度)。
(torch.Size([2, 55, 20, 20]), torch.Size([2, 33, 10, 10]))
def forward(x, block):
block.initialize()
return block(x)
Y1 = forward(np.zeros((2, 8, 20, 20)), cls_predictor(5, 10))
Y2 = forward(np.zeros((2, 16, 10, 10)), cls_predictor(3, 10))
Y1.shape, Y2
評(píng)論