OverFeat:Integrated Recognition, Localization and Detection using Convolutional Networks
阿新 • • 發佈:2021-08-30
目錄
概
通常的sliding windows需要大量的計算量: 首先我們需要框出一個區域, 再將該區域進行判斷, 當區域(windows)的數量很多的時候, 這麼做是非常耗時的.
但是本文作者發現, 通過卷積, 可以將所有的區域一次性計算, 使得大量重複計算能夠節省下來. 個人覺得還是非常有意思的.
主要內容
如上圖所示, 第一行展示了對一個普通圖片進行判斷的過程:
- input: \(14 \times 14 \times *\), 經過\(5 \times 5\)的卷積核(stride=1, padding=0), 得到:
- \(10 \times 10 \times *\)的mappings, 再經過\(2 \times 2\)的pooling (stride=2, padding=0), 得到:
- \(5 \times 5 \times *\)的mappings, 到此為特徵提取階段;
- 接下來, 是分類器部分, 實際上, 原本是全連線層部分, 我們首先以全連線層的角度過一遍, 令\(d_1=5 \times 5 \times *\):
- 通過\(W \in \mathbb{R}^{d_2 \times d_1}\) 將特徵對映為\(d_2\)的向量;
- 再通過\(W' \in \mathbb{R}^{C \times d_2}\) 將特徵對映為\(C\)的向量(C表示類別數目);
- 既然全連線層是特殊的卷積, 4相當於
- \(d_1\)個\(5 \times 5\)的卷積作用於特徵, 5相當於
- \(d_2\)個\(1 \times 1\)的卷積, 6相當於
- \(C\)個\(1 \times 1\)
再來看第二行, 其輸入為\(16 \times 16\)大小的圖片, 輸出是\(2 \times 2 \times C\), 而且藍色部分之間是相互對應的. 設想, 我們將\(16 \times 16\)的圖片通過sliding windows (stride=2)可以劃分出四幅圖片, 而這四個圖片經過網路所得到的logits正好是最後輸出的\(2\times 2\)中所對應的位置, 這意味著我們一次性計算了所有的windows, 但是計算量卻並沒有太多增加.
那麼, 相應的windows是怎麼劃分的呢?
倘若網路每一層的核的stride為\(s_1, s_2, \cdots, s_k\), 那麼windows之間的stride應該為
\[s_1 \times s_2 \times \cdots \times s_k. \]注: stride是固定的, 但是圖片的大小不一定固定, 像ResNet, 由於全連線層前有一個average pooling的操作, 故我們可以傳入大小不定的圖片進去.
問: 但是有些卷積核還有padding的操作, 這個該如何理解呢?(小誤差?)