RCNN、SPP-net、Fast-RCNN和Faster-RCNN
RCNN
RCNN (Regions with CNN features) 的核心思想是把影象劃分成N(2000)個獨立的區域,分別提取每個區域的CNN特徵,然後把這些特徵使用SVM等分類器進行結果預測,把目標檢測任務轉換成了分類任務。RCNN由Ross Girshick在2013年提出。
RCNN演算法的4個步驟:
1. 候選區域選擇
選擇候選區域就是進行區域提名(Region Proposal)操作,找出潛在的感興趣區域。區域提名會提取到很多有重合區域的ROI,所以一般還會進行合併操作,綜合考慮如色彩,灰度,輪廓等因素,既要保證不會漏掉有用的區域,又不至於重疊太多。Ross Girshick的RCNN論文中取了2000個區域候選狂。2. 區域大小歸一化
把第一步提取到的候選區域執行大小歸一化,論文中是歸一化到227×227。3. CNN特徵提取
對每一個歸一化後的候選框區域執行標準的CNN過程,通過一系列卷積和池化操作,最後再通過2個全連線層,得到每個候選區域的固定維度的特徵向量。4. 分類與邊界迴歸
把步驟3中得到的特徵向量使用SVM分類器(需要訓練好基於CNN特徵的SVM分類器)進行分類,用邊界迴歸(Bounding-box regression)演算法調整目標區域的位置,合併重疊區域,完成精確定位。
RCNN存在的主要問題:
- 1. 重複計算,RCNN中的2000個候選框都要進行CNN操作,重複計算量很大。
- 2. 訓練的空間和時間代價很高,RCNN中的區域提名、特徵提取、分類和迴歸沒能在一個流程中統一起來,有的需要單獨離線進行,候選區域需要單獨儲存,佔用磁碟空間較大。
- 3. 檢測速度慢,在GPU上檢測約需要13S,CPU上約需要53S。
SSP-net
2014年,何愷明等對RCNN進行了改進,提出SPP-net(Spatial Pyramid Pooling net),SPP-net相比RCNN的改進主要有兩點:
一,使用空間金字塔方法實現維度歸一化
去掉了RCNN中對原始影象進行的剪裁,拉伸縮放等歸一化操作(這些warp操作導致物體的畸變,或幾何失真),轉而採用空間金字塔的方式,支援資料的多尺度輸入。SPP-net的金字塔方法通過一個SPP層實現,加在最後一個卷積層後,第一個全連線層之前,實現了不同尺度的特徵送入全連線層之前的維度歸一化,
二, 只對原圖提取一次卷積特徵,不再對每個候選區域單獨執行CNN操作,在後邊做一個候選區域的對映,對應到候選區域的特徵上,減少了大量重複計算。
Fast-RCNN
2015年,Ross Girshick提出了 Fast-RCNN,Fast-RCNN結合了SPP-net的優點,主要為了解決2000個候選框帶來的重複計算問題,提高訓練和檢測效率,主要思想是使用一個叫做 ROI Pooling的結構,可以看做是單層的SPP-net層,可以把不同維度的CNN特徵歸一化到統一維度,之後經過全連線層再softmax分類。梯度也可以通過這個ROI池化層直接傳播,訓練不再需要多步進行。
實驗結果表明,Fast RCNN的測試速度比RCNN快213倍,比SPP-net快10倍。
Faster RCNN
Faster RCNN利用 RPN(Region Proposal Network)網路來完成候選框的選取,取代了傳統的區域提名方法。
RPN網路以任意大小的圖片作為輸入,輸出一系列矩形區域提名,每個區域對應一個目標類別分數以及對應的位置資訊。
Faster RCNN的主要步驟:- 1. 提取CNN特徵,以整張圖作為輸入,只計算一次CNN
- 2. 區域提名,在最終的CNN特徵上,為每個點利用9個不同的矩形框,提名候選區域
- 3. 區域判定和邊界迴歸:先對每個候選矩形框進行目標物體和非目標物體的二分類,排除掉非目標物體的矩形框,再用9個迴歸模型(對應9個矩形框)微調候選框位置和大小。
- 4. 分類和邊界迴歸,對步驟3中提供的候選框結果進行篩選,目標分類和邊界迴歸。
相關文章
- RCNN & SPP-net & Fast-RCNN & Faster-RCNNCNNAST
- faster-RCNN臺標檢測ASTCNN
- Fast-RCNN解析:訓練階段程式碼導讀ASTCNN
- 寫給程式設計師的機器學習入門 (九) - 物件識別 RCNN 與 Fast-RCNN程式設計師機器學習物件CNNAST
- 用Tensorflow2.0實現Faster-RCNN的程式碼介紹ASTCNN
- 5步實現深度學習OpenCV物件檢測:Faster-RCNN圖片識別深度學習OpenCV物件ASTCNN
- 寫給程式設計師的機器學習入門 (十) - 物件識別 Faster-RCNN - 識別人臉位置與是否戴口罩程式設計師機器學習物件ASTCNN
- 【目標檢測】:SPP-Net深入理解(從R-CNN到SPP-Net)CNN
- R-CNN系列其二:SPP-NetCNN
- 寫給程式設計師的機器學習入門 (十 補充) - 物件識別 Faster-RCNN - 改進識別人臉位置與是否戴口罩的模型程式設計師機器學習物件ASTCNN模型
- Windows下編譯fast rcnnWindows編譯ASTCNN
- 從零開始 Mask RCNN 實戰:基於 Win10 的 Mask RCNN 環境搭建CNNWin10
- RCNN的安裝與簡單使用CNN
- 【深度學習】研究Fast rcnn程式碼深度學習ASTCNN
- faster rcnn中anchor的生成過程理解ASTCNN
- RCNN中函式配置-convert_data_to_tfrecordCNN函式
- Mask RCNN測試過程經驗總結CNN
- mask rcnn模型踩坑指南 tusimple mx-maskrcnnCNN模型
- 如何使用Mask RCNN模型進行影像實體分割?CNN模型
- 目標檢測入門系列手冊二:RCNN訓練教程CNN
- 二階段目標檢測網路-Mask RCNN 詳解CNN
- 二階段目標檢測網路-Faster RCNN 詳解ASTCNN
- 二階段目標檢測網路-Cascade RCNN 詳解CNN
- 【目標檢測從放棄到入門】SSD / RCNN / YOLO通俗講解CNNYOLO
- 淺析py-faster-rcnn中不同版本caffe的安裝及其對應不同版本cudnn的解決方案ASTCNNDNN
- 【目標檢測】2萬字詳解 RCNN系列 YOLO系列 YOLOv3程式碼實現全流程詳解 pytorchCNNYOLOPyTorch
- ../和./和/的區別
- 路徑中./和../和/
- !=和<>
- #和&
- linux中/bin和/sbin和/usr/bin和/usr/sbinLinux
- redis的安裝和啟動和檢測和停止Redis
- 深度解析 Delegate 和 Notification 和 KVO
- ♻️同步和非同步;並行和併發;阻塞和非阻塞非同步並行
- xftp和xshell,xftp和xshell的下載和安裝FTP
- 找工作學習筆記1------=和==、&和&&、|和||的區別筆記
- workman 和swoole 區別 和異同
- @NotEmpty和@NotBlank和@NotNull小結Null