1. 程式人生 > >目標檢測網路介紹

目標檢測網路介紹

RCNN:區域性卷積神經網路。

結構分為:候選區域生成(採用selective search方法),特徵提取網路(多個卷積層、relu,以及池化層),分類器(SVM),迴歸修正位置結構(線性脊迴歸器)。

流程為:

先在輸入影象上進行SS,生成多層次的候選區域,

在候選區域上進行特徵提取,

然後進行分類判斷,

最後對候選區域位置進行修正。

Fast RCNN:快速區域性卷積神經網路。

候選區域生成仍然採用SS方法,將分類器以及迴歸修正結構替換成網路中的視窗分類層和視窗位置修正層,與特徵提取網路結構結合,成為新的網路結構,理論上加快了速度。

候選區域生成在整個結構中的位置後所改變,不再是放在最開始就在影象上使用SS,而是一開始將影象一體化送入特徵提取網路,最後在特徵提取輸出層上進行SS,生成候選區域。(候選區域生成仍然獨立於其他部分,可以獨立變動)

Faster RCNN:

候選區域的生成替換為RPN(區域生成網路),讓區域生成網路與剩餘的網路結合起來。區域生成網路的位置有所改變,

一開始就進行特徵提取,提取出原始的特徵,然後經過候選區域生成網路生成候選區域,由候選區域與之前的特徵進行分類以及位置判斷。

YOLO:

進行全域性卷積,而不是區域性卷積,物體位置與類別處理並不分開,從原理上來說就非常不一樣,分類與位置查詢不再是分開的。物體位置視窗的中心格子負責分類,每個格子輸出預測類的物體位置方框的預測。YOLO網路最終的全連線層的輸出維度是 S*S*(B*5 + C)。每個格子輸出B個bounding box(包含物體的矩形區域)資訊,以及C個物體屬於某種類別的概率資訊。

疑問:B是預先設定好的?還是檢測出來的?如何檢測的?

解答:這個地方指的是全連線層的輸出。多層卷積之後得到特徵,而經過全連線層可以得到位置與類別。

SSD:

用一個修剪過的高質量分類網路的前置結構作為前面的基礎網路,然後在後面加上輔助結構,輔助結構用以分類和定位。在基礎結構後面,用卷積層得到大小逐級遞減的特徵圖,每一層都輸出box regression以及各類別的得分,這樣可以得到多範圍的卷積特徵。每一層的卷積模型都不一樣

疑問:各個卷積層是串聯還是並聯?

串聯

疑問:在卷積後的特徵層上使用bounding box能很好地返回到原圖上嗎?

可以,卷積之後對應的位置不變

YOLO最後是使用兩層的全連線層來預測box位置以及類別判斷,SSD使用卷積層。感覺SSD相比RCNN系列更接近YOLO,都是全域性卷積,並且一次迴歸。其特點是在基礎結構之後的多尺度卷積得到的特徵圖。

RFCN:

認為圖片分類與位置檢測存在較難調和的矛盾。圖片分類需要平移不變性,目標檢測需要平移變動。

整體架構是基於faster RCNN,進行全域卷積,然後將所有的卷積部分移到ROI池化之前,同時在池化之前通過將ROI區域分割,並組合的是分割之後的特徵圖,來儲存ROI的位置資訊,使其不至於在ROI池化的時候丟失位置資訊,池化之後投票決定結果。

下面兩張圖是faster_RCNN 與RFCN都適用的

疑問:劃分ROI為k*k個特徵塊是如何體現了位置資訊的保留的?

“k^2(C+1)個feature map的物理意義: 共有k*k = 9個顏色,每個顏色的立體塊(W*H*(C+1))表示的是不同位置存在目標的概率值(第一塊黃色表示的是左上角位置,最後一塊淡藍色表示的是右下角位置)。共有k^2*(C+1)個feature map。每個feature map,z(i,j,c)是第i+k(j-1)個立體塊上的第c個map(1<= i,j <=3)。(i,j)決定了9種位置的某一種位置,假設為左上角位置(i=j=1),c決定了哪一類,假設為person類。在z(i,j,c)這個feature map上的某一個畫素的位置是(x,y),畫素值是value,則value表示的是原圖對應的(x,y)這個位置上可能是人(c=‘person’)且是人的左上部位(i=j=1)的概率值。”

理解為:將ROI區域分塊之後,每一塊對應每一類都有一張特徵圖,這張圖表示了這個位置可能是該類物體這個位置的概率。

疑問:ROI池化會丟失位置資訊,其他卷積層的池化會嗎?為什麼池化前卷積會減少計算量?

所以RFCN相對於faster RCNN的改進有兩點:通過將卷積層移至ROI池化之前,減少計算量;

通過ROI劃分,保留位置資訊,提高準確率。