SPPNet網絡模型

        上篇文章詳細闡述了R-CNN網絡模型,本篇本章本來準備闡述Fast-RCNN模型的,介於SPP-Net模型有許多技巧性的技術可以在不同模型上使用,所以本篇詳細分析下SPP-Net

         SPPNet論文:https://arxiv.org/abs/1406.4729

         SPPNet論文翻譯:https://blog.csdn.net/mengduanhonglou/article/details/78470682

一、概述

        SPP-Net(Spatial Pyramid Pooling)金字塔池化網絡,該模型在(ILSVRC)2014物體分類比賽排名第三(top-5:8.06),前兩名分別是GoogleNet(top-5:6.66)和VGG(top-5:7.32),物體檢測排名第二,相對於RCNN只是提高很小的準確率,但是訓練以及測試時間提高了很多(24-102倍),SPP-Net和R-CNN的基本邏輯是一樣。

發發達發達【SPP-Net 不僅能應用到物體檢測,在物體分類、語義分割等模型上都能使用,單純的說SPP-Net並不是一個網絡模型,它提供了網絡修繕的技巧,SPP(圖像金字塔池化)改變了固化圖片尺寸與提取特徵的之間的順序,適配多尺度。作者何凱明,曾經的去霧算法,這次的SPP,後面的殘差網絡以及Mask R-CNN都很值得好好研究。何凱明博客

二、SPP-Net網絡模型    

圖:1

    SPP-Net物體檢測系統由四個模塊構成:

  • 卷積神經網絡提取特徵,在此用的ZF-5的5蹭卷積網絡;產生類別無關的候選檢測區域集合,大約2000個;
  • 將候選框區域映射到特徵圖中;
  • 然後通過spp將其池化到固定大小;
  • 通過訓練的指定類別的線性SVM分類器以及擬合邊框迴歸。

1、提取特徵ZFNet 與 區域推薦(region proposal)

    ZFNet ILSVRC2013分類任務的冠軍,使用反捲積對CNN的中間特徵圖進行了可視化分析,通過分析特徵行爲找到了提升模型的方法,微調Alexnet就提升了表現。相對於Alexnet來說,將11*11的卷積核變成了7*7的,步長從4變成2,【通過可視化發現第一層的卷積覈對最終的結果影響更大。】

 

    區域推薦(region proposal)選擇搜素法(Selective Search):就是對圖像利用分割算法產生許多小的子區域,然後根據這些子區域之間的相似性(主要是顏色、紋理、大小等)進行區域合併,不斷的迭代這個操作,每次迭代過程中對這些合併的子區域做外切矩形,最後形成候選框。優點:可以包含大小的疑似物體,合併區域相似性指標多樣,提高了準確度;缺點:算法較複雜【和上一篇文章R-CNN一樣,在此就不放圖了】

2、推薦區域映射到特徵圖

    RCNN是在原圖上生成推薦區域,然後將候選區域重定義到固定大小放入特徵提取網絡,而SPP-Net則是將原圖進行了一次卷積操作,在conv5提取到的特徵圖上將在原圖上的推薦區域映射到上面。也就是說SPP-Net只進行了一次卷積操作,這也就是SPP-Net可以做到比R-CNN快很多倍的主要原因。

上圖第一行,是一些分類網絡固化圖片尺寸的方法,剪切(容易丟失物體信息)、縮放(容易丟失物體位置信息);

 第二行:R-CNN的操作流程,在卷積層之前固化圖片尺寸;第三行:SPP-Net的操作流程,先提取特徵然後經過spp。

 

    在分析推薦區域到特徵圖的映射關係的之前,我們先了解一個概念和一個公式。 

    感受野:就是指某一層輸出的結果或者像素點對應的上一層的區域大小。比如一個3*3的卷積核會將3*3的區域換算成一個點。那這個點的感受野就是3*3的區域。

    卷積輸出大小公式:(N:輸出大小;W:輸入大小;F:卷積核大小;P:padding像素數;S:步長)

        N = (W - F + 2P) / S + 1  

    下面我們藉助圖片就說說,推薦區域是如何映射到特徵圖上的。 

    SPP-Net通過選擇搜索算法在原圖上產生2000個候選區域,然後將候選區域的兩個對角點映射到特徵圖上對應區域的對角點,因爲特徵圖相對於原圖來說尺寸發生了變化,變化的邏輯是通過上面的公式變化而來。網絡的conv層和pooling層因爲padding的存在不改變圖像尺寸的大小,但是pooling層的步長stride爲2,因爲是級聯的所以經過多少次池化操作原始圖片就縮小池化步長累積大小倍數,因此:

          (x1 = x3\prod_{0}^{i}s_{i}; y1 = y3\prod_{0}^{i}s_{i} )   (x2 = x4\prod_{0}^{i}s_{i}; y2 = y4\prod_{0}^{i}s_{i} ) 

          (x3 = x1 / \prod_{0}^{i}s_{i} + 1; y3 = y1 /\prod_{0}^{i}s_{i} + 1 )    (x4 = x2 / \prod_{0}^{i}s_{i} - 1; y4 = y2 /\prod_{0}^{i}s_{i} + 1 ) 

    對應的(x3,y3)(x4,y4)的座標都可以計算出來了,分別在後面+1和-1是爲了保證候選框在特徵圖內部。  

3、金字塔池化(Spatial Pyramid Pooling)

R-CNN目標檢測以及帶有全連接網絡的分類模型都必須將圖片先固化到指定尺寸,這是因爲有全連接層(FC)的存在,卷積操作和池化操作對圖片的尺寸沒有需求,因爲卷積層保存的是卷積核的參數,這個卷積核的參數是N*K*K(N:卷積核個數;N:卷積核的尺寸)和圖片的尺寸沒有關係,池化層是下采樣圖片,沒有參數,而全連接層需要將256或者128通道數的三維特徵數據拉到一個二維平面,這個二維平面的尺寸在每個全連接層是固定的,所以導致了衆多帶有全連接的分類網絡需要固定尺寸的圖片用來訓練和測試。

    SPP-layer層的存在就是爲了在接下來的fc之前將候選框包裹的特徵圖固化到一定尺寸,在PASCAL VOC 2007數據集上總共有20個物體,加上一個背景,總共21類,如何將任意尺寸的特徵圖固化成(21*256)呢。根據pooling規則,每個pooling window對應一個輸出,所以最終pooling後特徵的個數由window來決定,如上圖所以作者通過3個並列操作實現21*256的輸出。第一個操作將特徵圖上框選4*4總計16個區域,分別求取每個區域最大值,這樣生成4*4總計16*256維度的特徵向量;同理將該特徵圖分別框選2*2以及1*1(特徵圖本圖)的最大區域,最後將4*4、2*2、1*1拼接成21*256的特徵向量就滿足了後面fc網絡輸入尺寸。

4、SVM分類和擬合邊框迴歸

     SVM是用來分類的,事先對每一個類都訓練一個線性分類器,然後對每個region proposal通過CNN前向傳播計算出的特徵進行分類打分。注:SVM是一個很經典的分類算法,也是SVM一度將人們的視線從卷積神經網絡拉到SVM傳統機器學習分類算法。預訓練、正樣例、負樣例判定閾值以及多級操作這個和RCNN基本一致,在此不做過多介紹。

三、創新與挑戰

1、創新

  • 共享卷積計算,相對於RCNN區域的重複特徵計算,SPP對原圖進行一次特徵計算,節省了很多時間;
  • 設計了可以處理任意尺度的圖像結構,相對於RCNN在提取特徵之前固化尺度可能導致的物體信息丟失、物體位置信息丟失,將尺度固化放在全連接之前保準了圖像數據的完整性。這個模塊可以結合衆多的分類網絡,提高其性能。
  • 多層次池化提升準確度,多尺寸訓練提升準確度。 

2、挑戰

  •  SPP和RCNN一樣訓練過程是多級流水線,訓練特徵提取網絡、SVM分類網絡以及邊框迴歸網絡;
  • 提出的微調算法不能更新在空間金字塔池之前的卷積層。這種限制(固定的卷積層)限制了深層網絡的精度。

總結 :SPPNet相對來說,創新點即是驚豔的地方,共享卷積和金字塔池化操作。共享卷積縮短了幾十倍的時間,任意尺度保留了數據的原始信息,並且這個技巧可以優化所有用到FC的網絡模型。性能沒能大幅提升是因爲網絡的主體結構依然和RCNN基本一致,增加的是技巧性的東西。當然這些想法都是站在現在這個這個時間點思考的,結合當時的環境以及目標檢測的發展狀況,何凱明真的很厲害,而SPP-Net還只是他在目標檢測的一個開始,後面的的殘差網絡、Mask Rcnn更是驚豔。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章