基於深度學習的目標檢測


基於深度學習的目標檢測

普通的深度學習監督算法主要用來做分類,分類的目標是要識別出圖中所示是一只貓。而在ILSVRC(ImageNet Large Scale Visual Recognition Challenge)競賽以及實際的應用中,還包括目標定位和目標檢測等任務。其中目標定位不僅僅要識別出來是什么物體(即分類),而且還要預測物體的位置,位置一般用邊框(bounding box)標記。而目標檢測實質是多目標的定位,即要在圖片中定位多個目標物體,包括分類和定位。

簡單來說,分類,定位和檢測的區別如下:

  1. 分類:是什么?
  2. 定位:在哪里?是什么?(單個目標)
  3. 檢測:在哪里?分別是什么?(多個目標)

目標檢測對於人類來說並不困難,通過對圖片中不同顏色模塊的感知很容易定位並分類出其中的目標物體,但對於計算機來說,面對的是RGB像素矩陣,很難從圖像中直接得到“狗”和“貓”這樣的抽象概念並定位其位置,再加上有時候多個物體和雜亂的背景混雜在一起,使得目標檢測更加困難。在傳統視覺領域,目標檢測就是一個非常熱門的研究方向,一些特定目標的檢測,比如人臉檢測和行人檢測已經有非常成熟的技術了。普通的目標檢測也有過很多的嘗試,但是效果總是差強人意。

傳統的目標檢測一般使用滑動窗口的框架,主要包括三個步驟:

  1. 利用不同尺寸的滑動窗口框住圖中的某一部分作為候選區域;
  2. 提取候選區域相關的視覺特征。比如人臉檢測常用的Harr特征;行人檢測和普通目標檢測常用的HOG特征等;
  3. 利用分類器進行識別,比如常用的SVM模型

傳統的目標檢測中,多尺度形變部件模型DPM(Deformable Part Model)是出類拔萃的,連續獲得VOC(Visual Object Class)2007到2009的檢測冠軍,DPM把物體看成多個組成部分(比如人臉的鼻子、嘴巴等),用部件間的關系來描述物體,這個特性非常符合自然界很多物體的非剛體特征。DPM可以看做是HOG+SVM的擴展,很好的繼承了兩者的優勢。在人臉檢測、行人檢測等任務上取得了不錯的效果,但是DPM相對復雜,檢測速度也很慢,從而也出現了很多改進的方法。正當大家熱火朝天的改進DPM性能的時候,基於深度學習的目標檢測橫空出世,迅速蓋過了DPM的風頭,很多之前研究傳統目標檢測算法的研究者也開始轉向深度學習。

基於深度學習的目標檢測發展起來以后,其效果也一直難以突破。2013年R-CNN誕生了,VOC2007測試集的mAP被提升至48%,2014年通過修改網絡結構又飆升至66%,同時ILSVRC2013測試集的mAP也被提升至31.4%

R-CNN是Region-based Convolutional Neural Networks的縮寫,中文翻譯是基於區域的卷積神經網絡,是一種結合區域提名(Region Proposal)和卷積神經網絡(CNN)的目標檢測方法。R-CNN是第一個真正可以工業級應用的解決方案,這也和深度學習本身的發展類似,神經網絡、卷積網絡都不是什么新概念,但在本世紀突然真正變得可行,而一旦可行之后再迅猛發展也不足為奇了。

R-CNN這個領域目前研究非常活躍,先后出現了R-CNN,SPP-Net,Fast R-CNN,Faster R-CNN,R-FCN,YOLO,SSD等研究。這些創新工作其實很多時候是把一些傳統視覺領域的方法和深度學習結合起來了,比如選擇性搜索(Selective Search)和圖像金字塔(Pyramid)等

深度學習相關的目標檢測方法大致可以分為兩派:

  1. 基於區域提名的:如R-CNN,SPP-Net,Fast R-CNN,Faster R-CNN,R-FCN;
  2. 端到端(End-to-End):無需區域提名的,如YOLO,SSD

目前來說,基於區域提名的方法依然占據上風,但端到端的方法速度上優勢明顯,后續的發展拭目以待。

1.1基於區域提名的方法

本小節主要介紹區域提名的方法,包括R-CNN,SPP-Net,Fast R-CNN,Faster R-CNN,R-FCN

1.1.1 R-CNN

如前面所述,早期的目標檢測,大都使用滑動窗口的方式進行窗口提名,這種方式本質是窮舉法,R-CNN采用的是Selective Search

以下是R-CNN的主要步驟:

    1. 區域提名:通過Selective Search從原始圖片提取2000個左右區域候選框;
    2. 區域大小歸一化:把所有候選框縮放成固定大小(原文采用227×227);
    3. 特征提取:通過CNN網絡,提取特征;
    4. 分類與回歸:在特征層的基礎上添加兩個全連接層,再用SVM分類來做識別,用線性回歸來微調邊框位置和大小,其中每個類別單獨訓練一個邊框回歸器。

事實上,R-CNN有許多缺點:

    1. 重復計算:R-CNN雖然不再是窮舉,但依然有兩千個左右的候選框,這些候選框都需要進行CNN操作,計算量依然很大,其中有不少其實是重復計算;
    2. SVM模型:而且是線性模型,在標注數據不缺的時候顯然不是最好的選擇;
    3. 訓練測試分為多步:區域提名,特征提取,分類,回歸都是斷開的訓練過程,中間數據還需要單獨保存;
    4. 訓練的空間和時間代價很高:卷積出來的特征需要先存在硬盤上,這些特征需要幾百G的存儲空間;
    5. 慢:前面的缺點導致R-CNN出奇的慢,GPU處理一張圖片需要13秒,CPU上則需要53秒。
1.1.2 SPP-Net

SPP-Net,其主要思想是去掉原始圖像上的crop/warp等操作,換成了在卷積特征上的空間金字塔池化層(Spatial Pyramid Pooling,SPP),為何要引入SPP層,主要原因是CNN的全連接要求輸入圖片是大小一致的,而實際的輸入圖片往往大小不一,如果直接縮放到統一尺寸,很有可能有的物體會充滿整個圖片,而有的物體可能只能再到圖片的一角。傳統的解決方案是進行不同位置的裁剪,但這些裁剪技術都可能會導致一些問題的出現,比如crop會導致物體不全,warp導致物體被拉伸后變形嚴重,SPP就是為了解決這個問題的。SPP對整圖提取固定維度的特征,再把圖片均分成4份,每份提取相同的維度特征,再把圖片均勻分成16份,以此類推,可以看出,無論圖片大小如何,提取出來的維度數據都是一致的,這樣就可以統一送至全連接層了。SPP的思想在后來的R-CNN模型中也被廣泛用到。

SPP-Net網絡,其實實質是在最后一層卷積層后加了一個SPP層,將維度不一的卷積特征轉換為維度一致的全連接輸入。

SPP-Net做目標檢測的主要步驟為:

  1. 區域提名:用Selective Search從原圖中生成2000個左右的候選窗口;
  2. 區域大小縮放:SPP-Net不再做區域大小歸一化,而是縮放到min(w,h)=s,即統一長寬的最短邊長度,s選自{480,576,688,864,1200}中的一個,選擇的標准是使得縮放后的候選框大小與224×224最接近;
  3. 特征提取:利用SPP-Net網絡結構提取特征
  4. 分類與回歸:類似R-CNN,利用SVM基於上面的特征訓練分類器模型,用邊框回歸來微調候選框的位置。

SPP-Net解決了R-CNN區域提名時crop/warp帶來的偏差問題,提出了SPP層,使得輸入的候選框可大可小,但其他方面依然和R-CNN一樣,因而依然存在不少問題,這就有了后面的Fast R-CNN

1.1.3 Fast R-CNN

Fast R-CNN是要解決R-CNN和SPP-Net兩千個左右候選框帶來的重復計算問題,其主要思想為:

  1. 使用一個簡化的SPP層——RoI(Region of Interesting)Pooling層,操作與SPP類似
  2. 訓練和測試是不再分多步:不在需要額外的硬盤來存儲中間層的特征,梯度能夠通過RoI Pooling層直接傳播;此外,分類和回歸用Multi-task的方式一起進行;
  3. SVD:使用SVD分解全連接層的參數矩陣,壓縮為兩個規模小很多的全連接層

Fast R-CNN的主要步驟如下:

  1. 特征提取:以整張圖片為輸入利用CNN得到圖片的特征層;
  2. 區域提名:通過Selective Search等方法從原始圖片提取區域候選框,並把這些候選框一一投影到最后的特征層;
  3. 區域歸一化:針對特征曾上的每個區域候選框進行RoI Pooling操作,得到固定大小的特征表示;
  4. 分類和回歸:然后通過兩個全連接層,分別用softmax多分類做目標識別,用回歸模型進行邊框位置與大小的精確定位和微調。

Fast R-CNN比R-CNN的訓練速度(大模型)快8,8倍,測試時間快213倍,比SPP-Net訓練速度快2.6倍,測試速度快10倍左右。

1.1.4 Faster R-CNN

Fast R-CNN使用Selective Serach來進行區域提名,速度依然不夠快。Faster R-CNN則直接利用RPN(Region Proposal Networks)網絡來計算候選框。RPN以一張任意大小的圖片為輸入,輸出一批矩形區域提名,每個區域對應一個目標分數和位置信息。

Faster R-CNN的主要步驟如下:

  1. 特征提取:同Fast R-CNN,以整張圖片為輸入,利用CNN得到圖片的特征層;
  2. 區域提名:在最終的卷積特征層上利用k個不同的矩形框(Anchor Box)進行提名,k一般取9;
  3. 分類和回歸:對每個Anchor Box對應的區域進行object/non-object二分類,並用k個回歸模型(各自對應不同的Anchor Box)微調候選框位置與大小,最后進行目標分類。

總之,Faster R-CNN拋棄了Selective Search,引入了RPN網絡,使得區域提名,分類,回歸一起共用卷積特征,從而得到了進一步的加速。但是Faster R-CNN需要對兩萬個Anchor Box先判斷是否是目標(目標判定),然后再進行目標識別,分成兩步。

1.1.5 R-FCN

前面的目標檢測方法都可以細分為兩個子網絡:

  1. 共享的全卷積網絡;
  2. 不共享計算的RoI相關的子網絡(比如全連接網絡)

R-FCN則是將最后的全連接層之類換為了一個位置敏感的卷積網絡,從而讓所有的計算都可以共享。具體來說,先把每個區域提名划分為K×K個網格,比如R-FCN原文中k的取值為3,則對應的九個網格分別表示:左上top-left,上中top-center,右上top-right,...........,右下bottom-right,對應的九宮格,每個Grid都有對應的編碼,但預測時候會有C+1個輸出,C表示類別數目,+1是因為有背景類別,全部的輸出通道數量為K^2 * (C+1).需要注意的是九宮格,但是Pooling時候只有一個起作用,比如bottom-right層只有右下角的小塊起作用,那么問題來了,這一層的其他8個框有什么作用呢?答案是她們可以作為其他RoI(偏左或者偏上的RoI)的右下角。

R-FCN的步驟:

  1. 區域提名:使用RPN(Region Proposal Network,區域提名網絡),RPN本身是全卷積網絡結構;
  2. 分類和回歸:利用和RPN共享的特征進行分類。當做bbox回歸時,則將c設置為4

1.2 端到端的方法

本節介紹端到端(End-to-End)的目標檢測方法,這些方法無需區域提名,包括YOLO和SSD.

1.2.1 YOLO

YOLO的全拼是You Only Look Once,顧名思義就是只看一次,進一步把目標判定和目標識別合二為一,所以識別的性能有了很大的提升,達到每秒45幀,而在快速版的YOLO(Fast YOLO,卷積層更少)中,可以達到每秒155幀。針對一張圖片,YOLO的處理步驟為:

  1. 把輸入圖片縮放到448*448大小
  2. 運行卷積網絡;
  3. 對模型置信度卡閾值,得到目標位置和類別

YOLO將448*448大小的圖切成S*S的網格,目標中心點所在的擱置負責該目標的相關檢測,每個網絡預測B個邊框及其置信度,以及C種類別的概率。YOLO中S = 7 ,B = 2,C取決於數據集中物體類別數量,比如VOC數據集就是C = 20,對於VOC數據集來說,YOLO就是把圖片統一縮放到448*448,然后每張圖片平均划分為7*7=49個小格子,每個格子預測2個矩形框及其置信度,以及20中類別的概率。

YOLO簡化了真個目標檢測的流程,速度提升也很大,但是YOLO還是有不少可以改進的地方,比如S*S的網格就是一個比較啟發式的策略,如果兩個小目標同時落入一個格子中,模型也只能預測一個;另一個問題是Loss函數對不同大小的bbox未做區分。

1.2.2 SSD

SSD的全拼是Single Shot MultiBox Detector,沖着YOLO的缺點來的。SSD的網絡分為兩部分,前面是用於圖像分類的標准網絡,后面的網絡是用於檢測的多尺度特征映射層,從而達到檢測不同大小的目標,SSD在保持YOLO高速的同時效果也提升了很多,主要是借鑒了Faster R-CNN中的Anchor機制,同時使用了多尺度。但是從原理依然可以看出,Default Box的新裝以及網格大小是事先固定的,那么對特定圖片小目標的提取會不夠好。

1.3 總結

基於深度學習的目標檢測總體上分為兩派:

  1. 基於區域提名的R-CNN系列;
  2. 無需區域提名的YOLO,SSD系列

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM