1. 程式人生 > >基於深度學的目標檢測方法三之基於迴歸的方法

基於深度學的目標檢測方法三之基於迴歸的方法

基於迴歸的方式就是徹底的去掉了region思想,也不使用RPN,直接在一個網路中進行迴歸和分類。其代表的方法主要有YOLO和SSD。由於減少了一個網路同時可以減少一些重複的計算,所以其在速度上有了較大的提升。

  1. YOLO

YOLO的思想是將一幅圖分成SxS個網格,然後讓每個網格負責檢測物體中心落在這個網格上的物體。

                                                   

其中,每個網格負責預測一個物體,輸出這個物體的每個位置座標,以及這個物體每個位置座標對應的conference(這個網格所屬物體的類別概率)。因此輸出的大小是,其中表示網格的個數,表示每個網格預測的候選框個數,表示需要預測的類別數。其中如果有Object則第一項是1,沒有則第一項是0。具體網路結構如下:

 

                                           

根據網路結構得出了每個class的概率和對應的位置。最後根據概率和位置得出聯合函式,根據score的閥值和以及NMS過濾掉一部分的候選框得出對應的值。

對於YOLO來說使用的是7x7的格子,每個格子預測出兩個Bounding box框,因此總共預測出了7X7X2=98個Bounding box。

優缺點:

(1):速度快,其增強版在Tian X GPU上能跑到45fps,簡化版能達到155fps。

(2):對靠的比較近的物體以及小物體效果不好,因為預設的每一個格子只檢測一個物體。

(3):由於格子是方正的,所對於一些不常見的形狀泛化能力較差。

YOLOV2(YOLO9000)

YOLOV2主要是在YOLO上進行了大規模的改進,提高了MAP值,保證了速度,是目前在速度方面做得最好的模型。其具體改進方面如下:

(1):過擬合方面:去掉了dropout層,根據inception net的思想選擇了Bath Normalization在每一層的輸入進行歸一化,使輸入的資料有相同的分佈,加速學習的效率也避免過擬合。

(2):改變模型的輸入:目前對於一些常見的模型均是在ImageNet上進行預訓練,然後在新的資料集上進行微調的,對於YOLOV1來說存在一個問題就是ImageNet使用的是224X224的解析度作為輸入,但是低解析度不利於檢測,所以訓練檢測模型時直接以448X448作為基礎,這樣直接使用預訓練的解析度遷移就會導致網路對新解析度的適應性變差,因此YOLOV2在ImageNet上訓練分類模型時添加了把448X448轉化為224X224的微調部分,使其在輸入的時候直接適應高解析度,這樣整個模型的MAP提高了約4%。

(3):使用錨點(anchor boxes):在YOLOV1中,由於輸出的圖片被劃分成了7X7的格子,每個格子使用了2個邊框,最後採用全連線的方式直接對邊界框進行預測。由於在選取的時候是根據具體圖片的寬和高進行的,因此對於圖片中的不同寬度比和不同高度比的物體定位較為困難。YOLOV2採用Faster R-CNN中的anchor的思想,對特徵圖中的每個錨點進行預測,預測的預選框形狀是事先預測好的,然後對每一個框預測4個座標值,一個置信度和個類別數(和Faster不一樣,這是直接基於預選框做預測)。在模型的輸入上,使用416X416的輸入經過32倍下采樣之後變成13X13的奇數大小,因為奇數大小在劃分格子的時候整個圖只有一箇中心區域,對於一副圖中,大的物件一般會佔據影象的中心,所以希望用一個區域預測。相對於YOLOV1此時的Box盒子反而變多。

(4):候選框大小:YOLOV2採用對資料集進行聚類的方式,找出對應的5個先驗框作為預測過程中的anchor方法採用的框。

(5):新增passthrough層:即將低層大區域特徵轉化成小區域和高層小區域融合以達到特徵融合的目的解決小目標問題。具體流程如下:

                                          

        

對於一個26X26的特徵,抽取2X2的區域將轉化為通道數(變成4個通道)。

(6):多尺度訓練,由於YOLOV2去掉了全連線層,因此同一個網路可以對不同的輸入尺寸進行訓練。增強了模型的魯棒性,當然改變尺寸也就意味著要對模型輸出後的檢測層進行修改。

(7):使用新的Darknet-19網路結構。

基於上述改進,行成了現在的YOLOV2網路結構圖。其具體如下:

 

YOLO9000的結構和YOLOv2的相同,區別在於YOLO9000可以識別9000類的物品。採用了分類和檢測聯合訓練的策略,在ImageNet上訓練分類,在COCO資料集上訓練檢測,這樣就可以擴充檢測出的類別(因為ImageNet上的類別是比較多的),由於兩個物體種類並不是完全互斥的,因此採用一種層級的方法,建立一個樹結構,在預測時會給出一個區域和樹狀概率圖,根據樹的分支找到對應的概率圖就是所需要的類別。

YOLOV3

YOLOV3更多的是一種總結性的東西,其主要是在YOLOV2的基礎上有以下幾方面的改進:

(1):改變預測函式,使用邏輯迴歸預測即將softmax改為sigmoid。主要是有的物品也許不屬於一類。比如woman即屬於woman也屬於man。

(2):改變網路結構:加入殘差的思想以加深網路的構造,將網路擴深為Darknet-53。

(3):採用FPN的思想,多個尺度相融合來進行預測。

SSD

SSD是一種採用高低尺度相結合的策略,基於迴歸的一種模型,在實現上採用VGG16網路為基礎。去掉最後的全連線層改成卷積層,增加4個卷積層來構造網路結構。然後結合前面部分高緯度的網路結構,總共挑選出5個卷積層分別使用3X3的卷積計算,然後並行生成兩個分支,一個是用來分類的,一個是用來預測邊框的。最後在將所有的分支在通道上進行拼接(類似於inception),最終利用softmax進行分類。其具體流程大概如下:

                                             

    

在該演算法中,需要生成預測框的座標,該預測框的生成方式借鑑了Faster中anchor的思想,在feature map的小格子上(借鑑了YOLO)均有一系列的defeat box(圖中的虛線框),然後對每個defeat box均預測座標值和類別。由於每個feature map的大小不一樣,所以對應的defeat box框的比例也不一樣。

                                 

 

 

 

                                                                   

其中表示第個feature map ,表示最底層 的scale,表示最高層的scale。