基於深度學習的目標檢測

基於深度學習的目標檢測

普通的深度學習監督算法主要用來作分類,分類的目標是要識別出圖中所示是一隻貓。而在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

目前來講,基於區域提名的方法依然佔據上風,但端到端的方法速度上優點明顯,後續的發展拭目以待。rest

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系列
相關文章
相關標籤/搜索