1. 程式人生 > >關於學習使用Faster-RCNN做目標檢測和物件捕捉問題

關於學習使用Faster-RCNN做目標檢測和物件捕捉問題

這裡主要是為了做遙感方向的物件捕捉問題而從目標檢測開始入手,首先大體採用的是遷移學習的思路,注主要是對模型遷移,在img做了切割和西工大及北航的資料集上進行一個交叉訓練,這樣使得RPN的網路外面的打分函式有了一個更好的0.7的結果,
這個結果主要是通過對reuL這個網路進行求導發現這個函式的凸性問題從而得到區域性最優,這樣保證在訓練時候能夠更好的從概率密度函式中選取L2而不是L1,
通過以下流程說明網路種的核心(前後景問題)
首先RPN會找到一個提取候選框通過座標的五個引數對映到特徵圖上(這個過程使用傳統的CNN相關結構提取特徵)得到RoI,下一步會出現RoI的調整尺寸,調整完後進行固定出現了帶特徵的RoI的pooling,通過RoI的特徵可以迴歸(這個其實就是研究函式變化問題找到一個合適的引數)和分類(一般這個就是通過距離函式計算樣本的有關距離問題)。
通過上面的辦法得到的是Region Proposal Networks(候選網路/區域生成網路)得到的是最終檢測框+類別(兩個目標/這就是目標檢測不是單純的分類),這個過程種的分類工作是神經網路獲得特徵計算距離分類完成,而RPN實現的是提取候選區域實現輸出的目標檢測。
從rate上來看應該是ZF的RPN+FastRCNN比較好,效率高同時mAP好。接下來說哥關鍵環節

RPN在fasterRcnn中是介於feature Map和fastRcnn之間
RPN裡面是三次卷積,流程如下:
公共特徵區域就是說(Feature Map)後的(H x W),首先進行一次256*(H x W),這三個均為256個維度,影象的引數(x y w h),這裡需要分清楚那個前景的分數和那個是後景的引數,同時我們要清楚的一個概念是HxW的2scores+4個座標
每做一次卷積就會得到1xHxW和2個xHxW的特徵圖,這個HxW其實就是Anchor boxes
當我們得到9個anchor時候就是說9個HxWx9個結果:其實是18個scores和36個座標。每個anchor對於K個框(HxWxk框對映位anchor boxes)這裡出現了相對於原圖的座標位移同時k一般是9個,9個anchor得到兩層score,前後景的score。框大小和比例是:(128X128 256X256 512X512)長寬比例:2:1,1:1,1:2,

整體網路流程:

CNN——3x3卷積/RPN——256x16x16(16x16個256維度的特徵向量)——1x1卷積出現兩層((2x9)x16x16/(4x9)x16x16)的兩個scores和四個座標——通過NMS刪除背景框(16x16x9)的那個升序排序中分數最低的框,同時取出最高分數的K個框
這裡寫圖片描述
object localization
多工學習,網路帶有兩個輸出分支。一個分支用於做影象分類,即全連線+softmax判斷目標類別,和單純影象分類區別在於這裡還另外需要一個“背景”類。另一個分支用於判斷目標位置,即完成迴歸任務輸出四個數字標記包圍盒位置(例如中心點橫縱座標和包圍盒長寬),該分支輸出結果只有在分類分支判斷不為“背景”時才使用。
object detection
在目標定位中,通常只有一個或固定數目的目標,而目標檢測更一般化,其影象中出現的目標種類和數目都不定。因此,目標檢測是比目標定位更具挑戰性的任務。
基於候選區域的目標檢測演算法


候選區域生成演算法通常基於影象的顏色、紋理、面積、位置等合併相似的畫素,最終可以得到一系列的候選矩陣區域。這些演算法,如selective search或EdgeBoxes,通常只需要幾秒的CPU時間,而且,一個典型的候選區域數目是2k,相比於用滑動窗把影象所有區域都滑動一遍,基於候選區域的方法十分高效。另一方面,這些候選區域生成演算法的查準率(precision)一般,但查全率(recall)通常比較高,這使得我們不容易遺漏影象中的目標
興趣區域匯合(region of interest pooling, RoI pooling)
興趣區域匯合旨在由任意大小的候選區域對應的區域性卷積特徵提取得到固定大小的特徵,這是因為下一步的兩分支網路由於有全連線層,需要其輸入大小固定。其做法是,先將候選區域投影到卷積特徵上,再把對應的卷積特徵區域空間上劃分成固定數目的網格(數目根據下一步網路希望的輸入大小確定,例如VGGNet需要7×7的網格),最後在每個小的網格區域內進行最大匯合,以得到固定大小的匯合結果。和經典最大匯合一致,每個通道的興趣區域匯合是獨立的。
為什麼要使用錨盒(anchor box)
錨盒是預先定義形狀和大小的包圍盒。使用錨盒的原因包括:(1). 影象中的候選區域大小和長寬比不同,直接回歸比對錨盒座標修正訓練起來更困難。(2). conv5特徵感受野很大,很可能該感受野內包含了不止一個目標,使用多個錨盒可以同時對感受野內出現的多個目標進行預測。(3). 使用錨盒也可以認為這是向神經網路引入先驗知識的一種方式。我們可以根據資料中包圍盒通常出現的形狀和大小設定一組錨盒。錨盒之間是獨立的,不同的錨盒對應不同的目標,比如高瘦的錨盒對應於人,而矮胖的錨盒對應於車輛。
基於候選區域的目標檢測演算法通常需要兩步:第一步是從影象中提取深度特徵,第二步是對每個候選區域進行定位(包括分類和迴歸)。其中,第一步是影象級別計算,一張影象只需要前饋該部分網路一次,而第二步是區域級別計算,每個候選區域都分別需要前饋該部分網路一次。因此,第二步佔用了整體主要的計算開銷。R-CNN, Fast R-CNN, Faster R-CNN, R-FCN這些演算法的演進思路是逐漸提高網路中影象級別計算的比例,同時降低區域級別計算的比例。R-CNN中幾乎所有的計算都是區域級別計算,而R-FCN中幾乎所有的計算都是影象級別計算。
(3) 基於直接回歸的目標檢測演算法
YOLO的優點在於:(1). 基於候選區域的方法的感受野是影象中的區域性區域,而YOLO可以利用整張影象的資訊。(2). 有更好的泛化能力。

YOLO的侷限在於:(1). 不能很好處理網格中目標數超過預設固定值,或網格中有多個目標同時屬於一個錨盒的情況。(2). 對小目標的檢測能力不夠好。(3). 對不常見長寬比的包圍盒的檢測能力不強。(4). 計算損失時沒有考慮包圍盒大小。大的包圍盒中的小偏移和小的包圍盒中的小偏移應有不同的影響。
相比YOLO,SSD在卷積特徵後加了若干卷積層以減小特徵空間大小,並通過綜合多層卷積層的檢測結果以檢測不同大小的目標。此外,類似於Faster R-CNN的RPN,SSD使用3×3卷積取代了YOLO中的全連線層,以對不同大小和長寬比的錨盒來進行分類/迴歸。SSD取得了比YOLO更快,接近Faster R-CNN的檢測效能。後來有研究發現,相比其他方法,SSD受基礎模型效能的影響相對較小。
FPN融合多層特徵,以綜合高層、低解析度、強語義資訊和低層、高解析度、弱語義資訊來增強網路對小目標的處理能力。此外,和通常用多層融合的結果做預測的方法不同,FPN在不同層獨立進行預測。FPN既可以與基於候選區域的方法結合,也可以與基於直接回歸的方法結合。FPN在和Faster R-CNN結合後,在基本不增加原有模型計算量的情況下,大幅提高對小目標的檢測效能。
RetinaNet
RetinaNet認為,基於直接回歸的方法效能通常不如基於候選區域方法的原因是,前者會面臨極端的類別不平衡現象。基於候選區域的方法可以通過候選區域過濾掉大部分的背景區域,但基於直接回歸的方法需要直接面對類別不平衡。因此,RetinaNet通過改進經典的交叉熵損失以降低對已經分的很好的樣例的損失值,提出了焦點(focal)損失函式,以使模型訓練時更加關注到困難的樣例上。RetinaNet取得了接近基於直接回歸方法的速度,和超過基於候選區域的方法的效能。
語義分割(semantic segmentation)

語義分割是目標檢測更進階的任務,目標檢測只需要框出每個目標的包圍盒,語義分割需要進一步判斷影象中哪些畫素屬於哪個目標。
逐畫素進行影象分類。我們將整張影象輸入網路,使輸出的空間大小和輸入一致,通道數等於類別數,分別代表了各空間位置屬於各類別的概率,即可以逐畫素地進行分類。

全卷積網路+反捲積網路
為使得輸出具有三維結構,全卷積網路中沒有全連線層,只有卷積層和匯合層。但是隨著卷積和匯合的進行,影象通道數越來越大,而空間大小越來越小。要想使輸出和輸入有相同的空間大小,全卷積網路需要使用反捲積和反匯合來增大空間大小。(3) 語義分割常用技巧

擴張卷積(dilated convolution)
經常用於分割任務以增大有效感受野的一個技巧。標準卷積操作中每個輸出神經元對應的輸入區域性區域是連續的,而擴張卷積對應的輸入區域性區域在空間位置上不連續。擴張卷積保持卷積引數量不變,但有更大的有效感受野。
例項分割(instance segmentation)

語義分割不區分屬於相同類別的不同例項。例如,當影象中有多隻貓時,語義分割會將兩隻貓整體的所有畫素預測為“貓”這個類別。與此不同的是,例項分割需要區分出哪些畫素屬於第一隻貓、哪些畫素屬於第二隻貓。

基本思路
目標檢測+語義分割。先用目標檢測方法將影象中的不同例項框出,再用語義分割方法在不同包圍盒內進行逐畫素標記。

Mask R-CNN
用FPN進行目標檢測,並通過新增額外分支進行語義分割(額外分割分支和原檢測分支不共享引數),即Master R-CNN有三個輸出分支(分類、座標迴歸、和分割)。此外,Mask R-CNN的其他改進有:(1). 改進了RoI匯合,通過雙線性差值使候選區域和卷積特徵的對齊不因量化而損失資訊。(2). 在分割時,Mask R-CNN將判斷類別和輸出模板(mask)這兩個任務解耦合,用sigmoid配合對率(logistic)損失函式對每個類別的模板單獨處理,取得了比經典分割方法用softmax讓所有類別一起競爭更好的效果。
Coursera吳恩達《卷積神經網路》課程筆記(3)– 目標檢測
Object Localization目標檢測
Landmark Detection 除了使用矩形區域檢測目標類別和位置外,我們還可以僅對目標的關鍵特徵點座標進行定位,這些關鍵點被稱為landmarks。
該網路模型共檢測人臉上64處特徵點,加上是否為face的標誌位,輸出label共有64x2+1=129個值。通過檢測人臉特徵點可以進行情緒分類與判斷,或者應用於AR領域等等。

除了人臉特徵點檢測之外,還可以檢測人體姿勢動作
Object Detection
目標檢測的一種簡單方法是滑動窗演算法,Convolutional Implementation of Sliding Windows
滑動窗演算法可以使用卷積方式實現,以提高執行速度,節約重複運算成本。

首先,單個滑動視窗區域進入CNN網路模型時,包含全連線層。那麼滑動視窗演算法卷積實現的第一步就是將全連線層轉變成為卷積層
這一節主要介紹YOLO演算法的流程,算是對前幾節內容的回顧。網路結構如下圖所示,包含了兩個Anchor Boxes。

  1. For each grid call, get 2 predicted bounding boxes.
  2. Get rid of low probability predictions.
  3. For each class (pedestrian, car, motorcycle) use non-max suppression to generate final predictions.Region Proposals的方法。具體做法是先對原始圖片進行分割演算法處理,然後支隊分割後的圖片中的塊進行目標檢測。
    Region Proposals共有三種方法:

R-CNN: 滑動窗的形式,一次只對單個區域塊進行目標檢測,運算速度慢。
Fast R-CNN: 利用卷積實現滑動窗演算法,類似第4節做法。
Faster R-CNN: 利用卷積對圖片進行分割,進一步提高執行速度。
比較而言,Faster R-CNN的執行速度還是比YOLO慢一些。

人臉識別、目標檢測、目標定位、語言分割的函式都不一樣。接下來針對這塊做詳細的學習

相關推薦

關於學習使用Faster-RCNN目標檢測物件捕捉問題

這裡主要是為了做遙感方向的物件捕捉問題而從目標檢測開始入手,首先大體採用的是遷移學習的思路,注主要是對模型遷移,在img做了切割和西工大及北航的資料集上進行一個交叉訓練,這樣使得RPN的網路外面的打分函式有了一個更好的0.7的結果, 這個結果主要是通過對reu

使用Faster-Rcnn進行目標檢測(實踐篇)

原理 實驗 我使用的程式碼是python版本的Faster Rcnn,官方也有Matlab版本的,連結如下: 環境配置 按照官方的README進行配置就好,不過在這之前大家還是看下硬體要求吧 For tra

使用faster rcnn進行目標檢測

本文轉載自: http://blog.csdn.net/Gavin__Zhou/article/details/52052915 原理 實驗 我使用的程式碼是Python版本的Faster Rcnn,官方也有Matlab版本的,連結如下: 環境配置 按照官方的README進行配置就好,不過在這之

使用Faster-Rcnn進行目標檢測

Object Detection發展介紹 Faster rcnn是用來解決計算機視覺(CV)領域中Object Detection的問題的。經典的解決方案是使用: SS(selective search)產生proposal,之後使用像SVM之類的cl

SqueezeNet運用到Faster RCNN進行目標檢測

目錄 一、SqueezeNet介紹 論文提交ICLR 2017  論文地址:https://arxiv.org/abs/1602.07360  程式碼地址:https://github.com/DeepScale/SqueezeNet  注:程式碼只放出了pro

深度學習目標檢測常用演算法原理+實踐精講 YOLO / Faster RCNN / SSD / 文字檢測 / 多工網路

深度學習之目標檢測常用演算法原理+實踐精講 YOLO / Faster RCNN / SSD / 文字檢測 / 多工網路 資源獲取連結:點選這裡 第1章 課程介紹 本章節主要介紹課程的主要內容、核心知識點、課程涉及到的應用案例、深度學習演算法設計通用流程、適應人群、學習本門

Faster R-CNN 目標檢測演算法詳細總結分析(two-stage)(深度學習)(NIPS 2015)

論文名稱:《 Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks 》 論文下載:https://papers.nips.cc/paper/5638-faster-r-cnn-t

使用caffe訓練的深度學習目標檢測(車輛檢測)

#include "opencv2/core/core.hpp" #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/dnn/dnn.

深度學習(四)——目標檢測演算法YOLO的訓練檢測過程的基本思路介紹

      基礎知識掌握情況決定研究的高度,我們剛開始接觸深度學習時,一般都是看到別人的概括,這個方法很好能讓我們快速上手,但是也有一個很大的缺點, 知識理解的不透徹,導致我們對演算法優化時一頭霧水。我也是抱著知識總結的思想開始自己的深度學習知識精髓的探索,也希望能從中幫助到

RCNN系列(2):Fast R-CNN—用於精準目標檢測語義分割的快速功能結構~

論文地址: Fast R-CNN 0. 摘要   該論文對上一篇R-CNN進行改進,在訓練速度,推斷速度和精度上都有了很大的提升。 1. 介紹   相比於分類,目標檢測的計算代價大幅提升,這是因為目標檢測除了分類還需要精準的定位,帶來了兩個方面的問題,涉及速度,精度和模型

RCNN系列(1):R-CNN—用於精準目標檢測語義分割的功能結構

論文地址: Rich feature hierarchies for accurate object detection and semantic segmentation MATLAB實現:github連結 0. 摘要   論文中提出的方法包含兩個關鍵的點 將卷積神

使用Caffe完成圖像目標檢測 caffe 全卷積網絡

-h alt avi 5.0 type multi 序號 forward lin 一、【用Python學習Caffe】2. 使用Caffe完成圖像目標檢測 標簽: pythoncaffe深度學習目標檢測ssd 2017-06-22 22:08 207人閱讀 評論(0)

faster-RCNN臺標檢測

F5 style bsp 圖片 HR 實踐 目標檢測 位置 ID 最近學習了faster-RCNN算法,收獲不少,記此文為證。faster-RCNN是一個目標檢測算法,它能夠識別多個目標,對目標分類並標註位置,非常好用。它的輸入樣本是標註好的圖片,輸出是一個hdf5模型。

廖雪峰 JavaScript 學習筆記(字串、陣列物件

字串 1.和python一樣,也是用' '或" "括起來的字元表示。但多行字串是用反引號(esc下鍵)``,與之相對的是Python用''' '''三引號表示; 2.轉義字元:\ 3.換行符:\n 4.製表符:\t 5.多個字串用 + 連線 6.模板字串: ${變數}  例

caffe-ssd使用預訓練模型目標檢測

首先參考https://www.jianshu.com/p/4eaedaeafcb4 這是一個傻瓜似的目標檢測樣例,目前還不清楚圖片怎麼轉換,怎麼驗證,後續繼續跟進 模型測試(1)圖片資料集上測試 python examples/ssd/score_ssd_pascal.py 輸出為

==2==Ubuntu 16.04下安裝TensorFlow 目標檢測 API(物件檢測API)

由於最近剛看了rcnn,faster_rcnn,mask_rcnn的原文,想著做一下實驗,所以就如題,在ubuntu下安裝TensorFlow的目標識別API!!!!在此之前很少用Ubuntu,所以犯的錯很齊全 環境配置參考部落格連結 物件檢測API參考的部落格 主要參照上面的兩個部落格

基於faster-rcnn的圖片標註資料集生成自動化工具(資料集格式同pascal voc)

未完待續。。。 faster-rcnn的模型訓練需要大量資料集,目前使用labelImg工具,需要人工一張一張標註,效率低。本文使用python編寫了自動化圖片標註和資料集生成工具(本文標註目標是人臉,大家可以根據需要訓練其他目標判別模型,比如汽車、自行車等標註需要的圖片資

Yolo目標檢測識別(第二課)

引用地址: 承接上一章 由於上一章修改Makefile中的OPENCV=1重新make卻一直報錯,因此一直在網上查詢解決方案。最後重灌了opencv,並且嘗試了這個網站給出的解決方案,依然不能重新得到darknet的檔案(因為只有得到了這個檔案才算是make成

YOLO_Online 將深度學習最火的目標檢測做成線上服務實戰經驗分享

部分 YOLO 結果: YOLO_Online 將深度學習最火的目標檢測做成線上服務 第一次接觸 YOLO 這個目標檢測專案的時候,我就在想,怎麼樣能夠封裝一下讓普通人也能夠體驗深度學習最火的目標檢測專案,不需要關注技術細節,不需要裝很多軟體。只需要網頁就能體

在樹莓派下的opencv用(C++)對視訊人臉檢測人臉模糊處理

#include "opencv2/objdetect.hpp" #include "opencv2/highgui.hpp" #include "opencv2/imgproc.hpp" #include <iostream> #include &