R-CNN系列其二:SPP-Net
介紹
我們平時用於做物體分類或檢測的CNN網路多是由兩部分來組成,前端的CNN層構成的網路用於圖片特徵的抽象化提取與後端的FC層構成的網路用於具體的問題處理如分類或物體位置識別。因為模型中後端FC層的存在,意味著它只能接受固定大小的輸入即每次輸入tensor的維數必須相同。這帶來一個問題即我們只能使用統一大小的圖片作為網路輸入,如此才能在前端CNN網路層的最後輸出具有一致維數大小的資料特徵集合(feature map)給接下來的網路層使用。為此很多時候,我們的網路在圖片輸入之前不得不對其進行一些處理如剪下(crop)或失真式變行(Warp),這些處理或會導致圖片解析度有變化,甚至可能使得輸入影像有內容損失。
來自微軟Sun, Jian老師的團隊想到了一種可對任意大小的feature map輸入進行Pooling處理來生成固定大小的空間金字塔式層化方法(Spatial pyramid pooling,簡稱SPP)。此種SPP層化方法被加在前端CNN層網路的最後一級feature map輸出後可生成固定大小的特徵來。這樣就實現了CNN網路結構與圖片輸入大小之間的解耦。。理論上我們可以使用任意大小的圖片作用CNN網路的輸入了即使在網路的最後我們有FC層。
如下圖中可以看到使用此層所能解決的CNN網路對輸入圖片大小存在依賴的問題。
CNN網路使用SPP層前後對輸入圖片所進行的處理
金字塔式池化層(Spatial Pyramid Pooling)
如以上介紹本質上金字塔式池化層也是一種池化層結構,只是它被巧妙的設計用來處理任意維度的輸入Tensor,這樣最終經過此層處理後,我們能夠得到固定長度的結果向量。下圖中我們能清晰地看到它是如何實現的。
帶有金字塔式池化層的CNN網路
訓練帶有金字塔式池化層的CNN網路
理論上有了金字塔式池化層後,我們訓練CNN網路模型將可以使用做任意大小(Size)的圖片資料了。可因為當下像Caffe / Tensorflow等流行深度學習框架在設計之初都對固定大小的輸入圖片有假設,因此它們處理起來固定大小輸入的模型訓練更加友好。作者也先嚐試使用了固定大小的輸入圖片來進行訓練。但為了發揮其能使用多種大小圖片進行模型訓練的優勢,他們使用遷移學習或者說多階段學習的辦法來進行模型訓練。即使用180x180與224x224大小的圖片交叉著訓練CNN網路。。最終得到了與只使用單一大小圖片輸入一致的收斂速率。
SPP層在CNN檢測網路中的應用
根據我們上篇對R-CNN網路的瞭解可以知道,我們的前端CNN網路需要對不同大小的ROI視窗進行特徵提取。而為了保證最終得到一樣大小的特徵向量(因為接下來的SVM分類器與要對目標框進行位置較正的邏輯迴歸模型都需要固定大小的輸入),我們一般會將原本具有不同大小的ROI強制轉換為固定的大小(如180x180或224x224),如此以來可能會對ROI的輸入對比度等造成破化,極有可能因此而影響我們分類器對正確物體的特徵認識。
若將SPP層來代替普通的MaxPool或AvgPool層來使用,則可完美地解決輸入的ROI視窗大小不一致的問題,從而有可能提高我們CNN模型+SVM 目標檢測框架的準確性。下圖中可看出SPP層是如何應用在此CNN網路+SVM分類模型的目標檢測框架中的。
SPP層在目標檢測框架中的應用
SPP層對CNN檢測網路帶來的好處
以下表格中可看到SPP層的使用所能給我們的R-CNN檢測框架帶來的模型準確率與速度上的好處。
SPP層的使用對R-CNN檢測框架帶來的提升
SPP層的使用可以讓我們使用整幅圖片作用前端CNN網路的輸入,在最後的CNN層輸出中,我們再提取出不同ROI視窗所對應的特徵向量。這樣以來,因為平均一幅圖上面約有2000個ROI視窗,因此向對於普通R-CNN檢測框架,我們能夠省2000倍的計算量;
為了增加模型檢測的精度,作者有使用不同scale的輸入圖片來提取ROI的特徵,這樣使用一種類似於特徵的組合的模式提高接下來的SVM分類模型的準確率。
SPP在Caffe中的實現
--------------------------layer spm------------------------
layer { name: "pool5_spm6" type: "pool" pool_param{ kernel_size: 3 stride: 2 pool: MAX } bottom: "conv5" top: "pool5_spm6" }layer { name: "pool5_spm6_flatten" type: "flatten" bottom: "pool5_spm6" top: "pool5_spm6_flatten"}layer { name: "pool5_spm3" type: "pool" pool_param{ kernel_size: 5 stride: 4 pool: MAX } bottom: "conv5" top: "pool5_spm3" }layer { name: "pool5_spm3_flatten" type: "flatten" bottom: "pool5_spm3" top: "pool5_spm3_flatten"}layer { name: "pool5_spm2" type: "pool" pool_param{ kernel_size: 7 stride: 7 pool: MAX } bottom: "conv5" top: "pool5_spm2" }layer { name: "pool5_spm2_flatten" type: "flatten" bottom: "pool5_spm2" top: "pool5_spm2_flatten"}layer { name: "pool5_spm1" type: "pool" pool_param{ kernel_size: 13 stride: 13 pool: MAX } bottom: "conv5" top: "pool5_spm1" }layer { name: "pool5_spm1_flatten" type: "flatten" bottom: "pool5_spm1" top: "pool5_spm1_flatten"}layer { name: "pool5_spm" type: "concat" concat_param{ concat_dim: 1 } bottom: "pool5_spm1_flatten" bottom: "pool5_spm2_flatten" bottom: "pool5_spm3_flatten" bottom: "pool5_spm6_flatten" top: "pool5_spm" }
作者:manofmountain
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2459/viewspace-2818257/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【目標檢測】:SPP-Net深入理解(從R-CNN到SPP-Net)CNN
- 深度學習目標檢測(object detection)系列(一) R-CNN深度學習ObjectCNN
- Faster R-CNNASTCNN
- RCNN & SPP-net & Fast-RCNN & Faster-RCNNCNNAST
- 深度學習目標檢測(object detection)系列(四) Faster R-CNN深度學習ObjectASTCNN
- 一文讀懂目標檢測:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSDCNNASTYOLO
- RCNN、SPP-net、Fast-RCNN和Faster-RCNNCNNAST
- 【Fast R-CNN】Fast R-CNN (2015) 全文翻譯ASTCNN
- 目標檢測入門系列手冊三:Fast R-CNN 訓練教程ASTCNN
- 目標檢測入門系列手冊四:Faster R-CNN 訓練教程ASTCNN
- 「技術綜述」一文道盡R-CNN系列目標檢測CNN
- 我用段子講.NET之依賴注入其二依賴注入
- 目標檢測技術演化:從R-CNN到Faster R-CNNCNNAST
- 深度學習與CV教程(12) | 目標檢測 (兩階段,R-CNN系列)深度學習CNN
- 【目標檢測】R-CNNCNN
- 用於影象分割的卷積神經網路:從R-CNN到Mark R-CNN卷積神經網路CNN
- 程式碼實踐——Faster R-CNNASTCNN
- Face R-CNN論文解讀CNN
- Faster R-CNN演算法解析ASTCNN演算法
- Faster R-CNN: Down the rabbit hole of modern object detectionASTCNNObject
- CNN--卷積神經網路從R-CNN到Faster R-CNN的理解(CIFAR10分類程式碼)CNN卷積神經網路AST
- Light Head R-CNN論文筆記CNN筆記
- 機器人路徑規劃其二 A-Star(A*) Algorithm【附動態圖原始碼】機器人Go原始碼
- AspNetCore 成長雜記(一):JWT授權鑑權之生成JWT(其二)NetCoreJWT
- 經典目標檢測方法Faster R-CNN和Mask R-CNN|基於PaddlePaddle深度學習平臺的實戰ASTCNN深度學習
- 深度學習論文翻譯解析(十二):Fast R-CNN深度學習ASTCNN
- 大話目標檢測經典模型:Mark R-CNN模型CNN
- 【目標檢測】Fast R-CNN演算法實現ASTCNN演算法
- 【TUNE_ORACLE】Oracle健康檢查基礎專案(三)專案檢查步驟概述其二Oracle
- Sparse R-CNN: End-to-End Object Detection with Learnable Proposals 論文解讀CNNObject
- 目標檢測 - Sparse R-CNN: End-to-End Object Detection with Learnable ProposalsCNNObject
- 不會用Photoshop摳圖?Mask R-CNN助你一鍵“除”人CNN
- NCSU&阿里巴巴論文:可解釋的R-CNN阿里CNN
- TorchVision Faster R-CNN 微調,實戰 Kaggle 小麥檢測ASTCNN
- 圖森未來開源:Mask R-CNN的完整MXNet復現CNN
- Ross、何愷明等人提出:渲染思路做影像分割,提升Mask R-CNN效能ROSCNN
- 《Cascade R-CNN: Delving into High Quality Object Detection》論文筆記CNNObject筆記
- Sparse R-CNN: End-to-End Object Detection with Learnable Proposals - 論文閱讀翻譯CNNObject