天天看點

SPP-Net論文詳解

自R-CNN出來以後受到了廣大的關注和研究,并設法将其優化,解決R-CNN的一些缺點,于是SPP-Net 就出來了。

SPP-Net總體架構圖如下

SPP-Net論文詳解

該文章主要改進了以下兩點:

1、CNN需要固定輸入圖像的尺寸,導緻不必要的精度損失

2、R-CNN對候選區域進行重複卷積計算,造成計算備援

1、為什麼CNNs要固定輸入圖像的尺寸?

深度卷積神經網絡的基礎結構分為:卷積層(conv layers)->池化層(pooling layers)->全連接配接層(fc layers)。我們在設計網絡的時候,全連接配接層的輸入維數必須提前固定。從全連接配接層往前推的話,就必須保持第一層卷積的輸入尺寸是固定的,例如227 * 227(ImageNet)、32 * 32(LenNet)等。這也就要求我們在檢測圖檔時,需要将圖檔經過crop(裁剪)、warp(拉伸)等操作把圖檔變換成固定尺寸,才能輸入神經網絡。這些操作在一定程度上會導緻圖檔資訊的丢失或者變形。對此SPP-Net提出的解決方案是在最後一層卷積層後用空間金字塔池化層(Spatial Pyramid Pooling)代替普通池化層。

SPP-Net論文詳解

如下圖所示

第一行中的圖像即為要求固定尺寸輸入的CNN對圖像的處理方式

第二行為要求固定尺寸輸入的CNN (如R-CNN)的處理流程,先将圖檔按照類似第一行中的方式進行處理,然後輸入卷積以及全連接配接層,最後輸出結果

第三行為SPP-Net的處理方式,不固定圖像的大小,直接輸入給卷積層處理,卷積出來的特征并不是直接輸入給全連接配接層,而是先給SPP層處理,然後得到一個固定長度的輸出傳給全連接配接層,最後輸出結果。

SPP-Net論文詳解

2、R-CNN為什麼會有計算備援?

如下圖所示

R-CNN對于一張圖檔,先使用segment seletive方法提取出約2000個候選區域,然後将這兩千個候選區域分别送入網絡中,即一張圖檔要經曆2000次前向傳播,這樣會造成大量備援。

SPP-Net則提出了一種從候選區域到全圖的特征(feature map)之間的對應映射關系,通過此種映射關系可以直接擷取到候選區域的特征向量,不需要重複使用CNN提取特征,進而大幅度縮短訓練時間。每張圖檔隻需進行一次前向傳播即可。

SPP-Net論文詳解

SPP-Net的改進方法如下:

一、空間金字塔池化(Spatial Pyramid Pooling)實作原理

空間金字塔池化并非作者原創,它是一種詞袋(Bag of Words,BoW)模型的拓展,該模型在計算機視覺領域已經是非常成功的方法了,它将圖像切分成粗糙到精細各種級别,然後整合其中的局部特征。

SPP-Net論文詳解

論文中舉例:把卷積操作之後的特征圖(feature maps),以不同大小的塊(池化框)來提取特征,分别是4 * 4,2 * 2,1 * 1,将這三張網格組合,就可以得到16+4+1=21種不同的塊(Spatial Bins),我們從這21個塊中,每個塊提取出一個特征(提取方式有平均池化、最大池化等),這樣就得到了固定的21維特征向量。以不同的大小格子的組合方式來池化的過程就是空間金字塔池化。這麼一來,我們隻要設計m個n * n大小的網格就可以生成任意維數的特征向量,而不需要在意經過多層卷積操作後的特征圖的大小是多少,這也意味着我們不需要在意網絡輸入的圖檔尺寸。

具體的:

對于SPP層的輸入:

如下圖灰色框所示

最後一層卷積輸出的特征(我們稱為feature map),feature map為下圖的黑色部分表示,SPP層的輸入為與候選區域對應的在feature map上的一塊區域,可以了解為一張圖有約2000個候選區域,而對一張圖做完卷積後得到feature map,在這個feature map上也有約2000個與候選區域對應的區域(這裡的對應關系下面會詳細講解)

SPP-Net論文詳解

對于SPP層的輸出:

SPP layer分成1x1,2x2,4x4三個pooling結構(如上圖中間格子部分),對每個輸入(這裡每個輸入大小是不一樣的)都作max pooling(論文使用的),出來的特征再連接配接到一起,就是(16+4+1)x256的特征向量。這樣就實作了不管圖像中候選區域尺寸如何,SPP層的輸出永遠是(16+4+1)x256特征向量。

二、候選區域在原圖與feature map之間的映射關系

SPP-Net的做法是首先通過選擇性搜尋,對待檢測的圖檔進行搜尋出2000個候選視窗。這一步和R-CNN一樣。然後把整張待檢測的圖檔,輸入CNN中,進行一次性特征提取,得到feature maps,然後在feature maps中通過映射關系找到各個候選框的區域,再對各個候選框采用金字塔空間池化,提取出固定長度的特征向量。而R-CNN輸入的是每個候選框,然後再進入CNN,因為SPP-Net隻需要一次對整張圖檔進行特征提取,速度會大大提升。

而問題的關鍵在于特征圖(feature maps)的大小是根據圖檔的大小與卷積層的卷積核大小(kernel size)與步長(stride)決定的,如何在特征圖上找到原圖上對應的候選區域,即兩者之間的映射關系是怎麼樣的。

這部分的計算其實就是感受野大小的計算。

在CNN中感受野(receptive fields)是指某一層輸出結果中一個元素所對應的上一層的區域大小,如下圖所示。

SPP-Net論文詳解

我們利用吳恩達老師在課上的定義

SPP-Net論文詳解

輸入的尺寸大小與輸出的尺寸大小有如下關系:

SPP-Net論文詳解
SPP-Net論文詳解

上面是區域尺寸大小的對應關系,下面看一下坐标點之間的對應關系

SPP-Net論文詳解
SPP-Net論文詳解

SPP-Net對上面的坐标對應關系作了一定的簡化,簡化過程如下:

  • 令每一層的padding都為
    SPP-Net論文詳解
  • 當 k_i 為奇數
    SPP-Net論文詳解
    是以
    SPP-Net論文詳解
  • 當k_i 為偶數
    SPP-Net論文詳解
    是以
    SPP-Net論文詳解

SPP-Net論文詳解

是坐标值,不可能取小數 是以基本上可以認為

SPP-Net論文詳解

。公式得到了化簡:感受野中心點的坐标

SPP-Net論文詳解

隻跟前一層

SPP-Net論文詳解

有關。

那麼對于下圖的做法,就是SPP-net的映射方法,SPP-Net 是把原始ROI的左上角和右下角 映射到 feature map上的兩個對應點。 有了feature map上的兩隊角點就确定了 對應的 feature map 區域(下圖中橙色)。

SPP-Net論文詳解

從原圖坐标

SPP-Net論文詳解

到特征圖中坐标

SPP-Net論文詳解

的映射關系為

  • 前面每層都填充padding/2 得到的簡化公式 :
    SPP-Net論文詳解
  • 需要把上面公式進行級聯得到
    SPP-Net論文詳解
    其中
    SPP-Net論文詳解
  • 對于feature map 上的
    SPP-Net論文詳解
    它在原始圖的對應點為
    SPP-Net論文詳解
  • 論文中的最後做法:把原始圖檔中的ROI映射為 feature map中的映射區域(上圖橙色區域)其中 左上角取:
    SPP-Net論文詳解
    右下角的點取:界取
    SPP-Net論文詳解
    SPP-Net論文詳解
    值:
    SPP-Net論文詳解

本文參考了https://www.jianshu.com/p/07a573035e43并對其做了适當的修改。

繼續閱讀