基於CNN目標檢測方法(RCNN,Fast-RCNN,Faster-RCNN,Mask-RCNN,YOLO,SSD)行人檢測,目標追蹤,卷積神經網絡

一、研究意義

        卷積神經網絡(CNN)由於其強大的特徵提取能力,近年來被廣泛用於計算機視覺領域。1998年Yann LeCun等提出的LeNet-5網絡結構,該結構使得卷積神經網絡可以端到端的訓練,並應用於文檔識別。LeNet-5結構是CNN最經典的網絡結構,而後發展的卷積神經網絡結構都是由此版本衍生而來。

        在過去六年中,由於深度學習和卷積網絡的發展和進步,基於圖像的目標檢測和分類能力已經大大提高。而目標檢測是計算機視覺領域一個重要的研究方向,是衆多高級任務的必備前提,包括場景理解,事件識別等。目前,目標檢測也廣泛用於安全監控,自動駕駛,人機交互,增強現實等衆多領域。目標檢測對計算機視覺和產業界實際應用都有十分重要的意義。

        然而, 由於視角、遮擋、姿態等因素引起目標發生形變, 導致目標檢測成爲一個具有挑戰性的任務。設計高準確率高效率的目標檢測算法仍具有重大意義。

二、研究現狀

        如今, 基於卷積神經網絡的目標檢測已經超越傳統目標檢測方法, 成爲當前目標檢測的主流方法。本文根據卷積神經網絡的使用方式,將基於卷積神經網絡的目標檢測分爲兩大類: 基於分類的卷積神經網絡目標檢測和基於迴歸的卷積神經網絡目標檢測。

1. 基於分類的卷積神經網絡目標檢測

        基於分類的CNN也可以成爲two-stage檢測算法,傳統目標檢測方法包含預處理、窗口滑動、特 徵提取、特徵選擇、特徵分類、後處理等步驟,而卷積神經網絡本身具有特徵提取、特徵選擇和特徵分類的功能。那麼,可以 直接利用卷積神經網絡對每個滑動窗口產生的候選區進行二分類,判斷其是否爲待檢測目標。本文將這類方法稱爲基於分 類的卷積神經網絡目標檢測。相比於傳統目標檢測的六個步驟,基於分類的卷積神經網絡目標檢測只有: 窗口滑動,產生候選區域(region proposals),對候選區域圖像分 類,後處理三個步驟,而且窗口滑動和後處理都是固定的方法。因此,該類方法的研究重點在於如何提升卷積神經網絡的特徵 提取能力、特徵選擇能力以及特徵分類能力,以提高圖像識別的準確度。這類算法的典型代表是基於region proposal的R-CNN系算法,如R-CNN,Fast R-CNN,Faster R-CNN等;

 

1.1 R-CNN

        R-CNN是基於region proposal方法的目標檢測算法系列奠基之作,其先進行區域搜索,然後再對候選區域進行分類。在R-CNN中,選用Selective search方法來生成候選區域,這是一種啓發式搜索算法。它先通過簡單的區域劃分算法將圖片劃分成很多小區域,然後通過層級分組方法按照一定相似度合併它們,最後的剩下的就是候選區域(region proposals),它們可能包含一個物體。示意圖如下:

        對於一張圖片,R-CNN基於selective search方法大約生成2000個候選區域,然後每個候選區域被resize成固定大小(227×227)並送入一個CNN模型中,使用AlexNet來提取圖像特徵,最後得到一個4096維的特徵向量。然後這個特徵向量被送入一個多類別SVM分類器中,預測出候選區域中所含物體的屬於每個類的概率值。每個類別訓練一個SVM分類器,從特徵向量中推斷其屬於該類別的概率大小。爲了提升定位準確性,R-CNN最後又訓練了一個邊界框迴歸模型。訓練樣本爲(P,G),其中P=(Px,Py,Pw,Ph)爲候選區域,而G=(Gx,Gy,Gw,Gh)爲真實框的位置和大小。G的選擇是與P的IoU最大的真實框,迴歸器的目標值定義爲:

        在做預測時,利用上述公式可以反求出預測框的修正位置。R-CNN對每個類別都訓練了單獨的迴歸器,採用最小均方差損失函數進行訓練。

        R-CNN是非常直觀的,就是把檢測問題轉化爲了分類問題,但是,由於R-CNN使用計算複雜度極高的selective search提取候區域,並使用SVM來進行分類,並不是一個端到端的訓練模型。R-CNN模型在統一候選區的大小後才能進行特徵提取和特徵分類。並且提取的候選框會在特徵提取的時候會進行重複計算。

1.2 Fast-RCNN

        Fast-RCNN爲了解決特徵提取重複計算問題而誕生,並且Fast-RCNN巧妙的將目標識別與定位放在同一個CNN中構成Multi-task模型。

        Fast-RCNN先用Selective Search找出候選框,’而後整張圖過一次CNN,然後用RoI Pooling,將對應候選框的部分做採樣,得到相同長度的特徵,又經過兩層全連接層之後得到最終的特徵。接着產生兩個分支,一個分支給此特徵分類,另一個分支迴歸此特徵的候選框偏移。Fast-RCNN將分類和迴歸任務融合在一個模型中。

        首先介紹Fast-RCNN核心算法模塊,即RoI Pooling。基於圖像分類任務的卷積神經網絡首先將圖片重新縮放並才裁剪到固定大小,如AlexNet和ResNet將圖片縮放到256尺度並裁剪至224×224大小,然後將裁剪後的圖像輸入至網絡訓練。但對於檢測任務,圖像大小對檢測性能有重要的影響。假設輸入224×224大小的圖像,則很有可能目標對象會因爲分辨率過低而無法檢測。Fast-RCNN的圖像輸入並不對圖像大小限制,而實現這一點的關鍵所在,就是RoI Pooling網絡層。RoIPooling層在任意尺度的卷及網絡特徵層,針對每一個候選框在特徵層的映射區域提取固定尺度的特徵,通過設置不同尺度的RoI Pooling可以提取多尺度特徵。RoIPooling實現原理簡單而言就是通過設定固定尺度計算出每一次採樣的網格大小,然後最大值採樣即可。RoI Pooling使用最大池化將任何有效的感興趣區域內的特徵轉換爲具有H×W(例如,7×7)的固定空間範圍的小特徵圖,其中H和W是RoI Pooling層超參數,獨立於任何特定的ROI。Fast-RCNN定義RoI是一個矩形窗口。每個ROI由定義其左上角(r,c)及其高度和寬度(h,w)的四元組(r,c,h,w)定義。RoI Max Pooling通過將h×w的ROI窗口轉換成大小爲h/H×w/W的子窗口的HxW網格,然後將每個子窗口中的值最大存儲到相應的輸出網格單元中。RoI Pooling是SPP-Net中使用的空間金字塔層的特殊情況,其中只有一個金字塔層。然後RoI pooling層得到的特徵圖送入幾個全連接層中,併產生新的特徵向量,這些特徵向量分別用於一個softmax分類器(預測類別)和一個線性迴歸器上(用於調整邊界框位置)來進行檢測。在實現上是使用兩個不同的全連接層,第一個全連接層有N+1個輸出(N是類別總數,1是背景),表示各個類別的概率值;第二個全連接層有4N個輸出,表示座標迴歸值(tx,ty,tw,th),這個與R-CNN是一樣的,每個類別都預測4個位置座標值。

        Fast R-CNN與R-CNN的另外的一個主要區別點是採用了softmax分類器而不是SVM分類器,而且訓練過程是單管道的,因爲Fast R-CNN將分類誤差和定位誤差合併在一起訓練,定位誤差採用smooth L1 而不是R-CNN中的L2。因此,整個網絡可以端到端的訓練。

        Fast-RCNN提出之後,基於深度學習的目標檢測框架問題已經非常清晰,就是能不能把潛在候選區域的提取納入CNN框架內。Faster-RCNN就是基於此點並提出Region Proposal Net將潛在候選區域提取納入CNN框架內。

1.3 Faster-RCNN

        Faster-RCNN模型引入了RPN(Region Proposal Network)直接產生候選區域。Faster-RCNN可以看成是RPN和Fast RCNN模型的組合體,即Faster-RCNN = RPN + Fast-RCNN。

        對於RPN網絡,先採用一個CNN模型(一般稱爲特徵提取器)接收整張圖片並提取特徵圖。然後在這個特徵圖上採用一個N×N(文中是3×3)的滑動窗口,對於每個滑窗位置都映射一個低維度的特徵(如256-d)。然後這個特徵分別送入兩個全連接層,一個用於分類預測,另外一個用於迴歸。對於每個窗口位置一般設置k個不同大小或比例的先驗框(anchors,default bounding boxes),這意味着每個位置預測k個候選區域(region proposals)。對於分類層,其輸出大小是2k,表示各個候選區域包含物體或者是背景的概率值,而回歸層輸出4k個座標值,表示各個候選區域的位置(相對各個先驗框)。對於每個滑窗位置,這兩個全連接層是共享的。因此,RPN可以採用卷積層來實現:首先是一個n×n卷積得到低維特徵,然後是兩個1×1的卷積,分別用於分類與迴歸。

        RPN採用的是二分類,僅區分背景與物體,但是不預測物體的類別,即class-agnostic。由於要同時預測座標值,在訓練時,要先將先驗框與ground-truth box進行匹配,原則爲:(1)與某個ground-truth box的IoU最高的先驗框;(2)與某個ground-truth box的IoU值大於0.7的先驗框,只要滿足一個,先驗框就可以匹配一個ground-truth,這樣該先驗框就是正樣本(屬於物體),並以這個ground-truth爲迴歸目標。對於那些與任何一個ground-truth box的IoU值都低於0.3的先驗框,其認爲是負樣本。RPN網絡是可以單獨訓練的,並且單獨訓練出來的RPN模型給出很多region proposals。由於先驗框數量龐大,RPN預測的候選區域很多是重疊的,要先進行NMS(non-maximum suppression,IoU閾值設爲0.7)操作來減少候選區域的數量,然後按照置信度降序排列,選擇top-N個region proposals來用於訓練Fast R-CNN模型。RPN的作用就是代替了Selective search的作用,但是速度更快,因此Faster R-CNN無論是訓練還是預測都可以加速。

        Faster-RCNN遵循如下訓練過程:

        第一步:使用ImageNe上預訓練的模型初始化特徵提取網絡並訓練RPN網絡;

        第二步:使用在ImageNet上預訓練的模型初始化Fast-RCNN特徵特徵提取網絡,使用步驟一中訓練好的RPN網絡產生的候選框作爲輸入,訓練一個Fast-RCNN網絡,至此,兩個網絡每一層的參數完全不共享;

        第三步:使用步驟二的Fast-RCNN網絡參數初始化一個新的RPN網絡,但是把RPN,Fast-RCNN共享的特徵提取網絡參數的學習率設爲0,即使學習RPN網絡所特有的參數,固定特徵提取網絡。到此步,兩個網絡已經共享了所有的公共的卷積層;

        第四步:仍然固定共享的那些網絡層,把Fast-RCNN特有的網絡層也加入進來,繼續訓練,微調Fast-RCNN特有的網絡層,到此爲止,RPN與Fast-RCNN網絡完全共享參數,使用Fast-RCNN即可同時完成候選框提取和目標檢測功能。

        其問題主要在於對小尺度目標檢測性能較差,不能有效的將候選區域的特徵在深度CNN提取之後,有效保留小尺度的特徵。分辨率有一定限制,同樣檢測速度還是較慢。

1.4 Mask RCNN

        把原有的Faster-RCNN進行擴展,添加一個分支使用現有的檢測對目標進行並行預測。同時,這個網絡結構比較容易實現和訓練,速度爲5fps,可以很方便的應用到其他的領域,像目標檢測,分割,和人物關鍵點檢測等,並且比現有的算法效果都要好。

        實例分割的難度在於要先對一張圖片所有的目標進行正確的檢測同時還要對每個示例進行分割。檢測的目的是把每一個單個目標分類然後用bounding box標定出來,而實例分割的目的是區分每一個像素爲不同的分類而不用區別不同的目標。Mask R-CNN使用了全連接卷積網絡(FCN)來完成這個預測。這需要訓練數據必須有像素級別的標註,而不是簡單的邊框。

        Faster R-CNN:包含兩個部分,提出RPN區域,找到目標框,對ROI進行分類。核心思想就是把圖片區域內容送給深度網絡,然後提取出深度網絡某層的特徵,並用這個特徵來判斷是什麼物體,把背景也當成一種類別,故如果是判斷是不是20個物體時,實際上在實現是判斷21個類。最後再對是物體的區域進行微微調整。

        Mask Representation:mask 對輸入目標的空間佈局進行編碼。使用m*m的矩陣對每一個ROI進行預測而不是使用向量去進行預測,這樣可以保證ROI當中的空間信息不會損失。

        ROI Align:RoI Pooling就是實現從原圖區域映射到卷積區域最後pooling到固定大小的功能,把該區域的尺寸歸一化成卷積網絡輸入的尺寸。在歸一化的過程當中,會存在ROI和提取的特徵不重合現象出現,作者提出了ROI Align,使用ROI Align層對提取的特徵和輸入之間進行校準。 避免對每一個ROI邊界或者塊進行數字化。使用雙線性內插法計算在ROI 塊當中固定的四個採樣位置得到的輸入特徵值並對結果進行融合。

        因爲FCN會精確預測每個像素的類別,就是輸入圖片中的每個像素都會在標註中對應一個類別。對於輸入圖片中的一個錨框,我們可以精確的匹配到像素標註中對應的區域。但是RoI池化是作用在卷積之後的特徵上,其默認是將錨框做了定點化。例如假設選擇的錨框是(x,y,w,h),且特徵抽取將圖片變小了16倍,就是如果原始圖片是256×256,那麼特徵大小就是16×16。這時候在特徵上對應的錨框就是變成了(x/16,y/16,h/16,w/16)。如果x,y,w,h中有任何一個不被16整除,那麼就可能發生錯位。同樣,如果錨框的長寬不被池化大小整除,那麼同樣會定點化,從而帶來錯位。

        通常這樣的錯位只是在幾個像素之間,對於分類和邊框預測影響不大。但對於像素級別的預測,這樣的錯位可能會帶來大問題。RoI Align層類似於RoI池化層,但是去除掉了定點化步驟,就是移除了所有 。如果計算得到的錨框不是剛好在像素之間,那麼我們就用四周的像素來線性插值得到這個點上的值。

        對於一維情況,假設我們要計算x點的值f(x),那麼我們可以用x左右的整點的值來插值:

        我們實際要使用的是二維差值來估計f(x,y),我們首先x軸上差值得到f(x,y)和f(x,y+1),然後根據這兩個值來差值得到f(x,y)。

        Network Architecture :

        分成三個部分,第一個是主幹網絡用來進行特徵提取,第二個是頭結構用來做邊界框識別(分類和迴歸),第三個就是mask預測用來對每一個ROI進行區分。主幹網絡使用的是50層的深度殘差網絡ResNet50。

        以上方法由於使用了特定的方法提取候選區,替代以滑動窗口方法遍歷搜索的方式,需要候選區的數量較少,使基於卷積神經網絡的目標檢測在準確度和速度上都得到了較大提升。然而這些方法非常依賴候選區提取方法的準確度,如果檢測場景複雜且目標不明顯,候選區提取方法很難捕獲到目標附近的區域,導致檢測不到目標。

2 基於迴歸的卷積神經網絡目標檢測

針對目標檢測重新設計卷積神經網絡的結構,提出了將卷積神經網絡作爲迴歸器,把整幅待檢測圖像看成一個候選區,直接輸入卷積神經網絡,迴歸目標在待檢測圖像中的位置信息。其中最具有代表性的是YOLO算法和SSD算法。

2.1 YOLO算法

        Yolo算法,其全稱是You Only Look Once: Unified, Real-TimeObject Detection。Yolo算法採用一個單獨的CNN模型實現end-to-end的目標檢測,整個系統如圖所示:首先將輸入圖片resize到448x448,然後送入CNN網絡,最後處理網絡預測結果得到檢測的目標。相比R-CNN算法,其是一個統一的框架,其速度更快,而且Yolo的訓練過程也是end-to-end的。

        YOLO的CNN網絡將輸入的圖片分割成S×S網格,然後每個單元格負責去檢測那些中心點落在該格子內的目標。每個單元格會預測B個邊界框(bounding box)以及邊界框的置信度(confidence score)。所謂置信度其實包含兩個方面,一是這個邊界框含有目標的可能性大小,二是這個邊界框的準確度。前者記爲Pr(object),當該邊界框是背景時(即不包含目標),此時Pr(object)=0。而當該邊界框包含目標時,Pr(object)=1。邊界框的準確度可以用預測框與實際框(ground truth)的IOU(intersection over union,交併比)來表徵,記爲IOU(truth/pred) 。因此置信度可以定義爲Pr(object)*IOU(truth/pred)  。YOLO的置信度是兩個因子的乘積,預測框的準確度也反映在裏面。邊界框的大小與位置可以用4個值來表徵:(x,y,w,h),其中(x,y)是邊界框的中心座標,而w和h是邊界框的寬與高。中心座標的預測值(x,y)是相對於每個單元格左上角座標點的偏移值,並且單位是相對於單元格大小的。而邊界框的w和h預測值是相對於整個圖片的寬與高的比例,這樣理論上4個元素的大小應該在[0,1]範圍。這樣,每個邊界框的預測值實際上包含5個元素:(x,y,w,h,c),其中前4個表徵邊界框的大小與位置,而最後一個值是置信度。

        對於分類問題,對每一個單元格其還要給出預測出C個類別概率值,其表徵的是由該單元格負責預測的邊界框其目標屬於各個類別的概率。但是這些概率值其實是在各個邊界框置信度下的條件概率,即 Pr(class|object)。不管一個單元格預測多少個邊界框,其只預測一組類別概率值,這是YOLO算法的一個缺點,在後來的改進版本中,YOLO9000是把類別概率預測值與邊界框是綁定在一起的。同時,我們可以計算出各個邊界框類別置信度(class-specific confidence scores): 

        邊界框類別置信度表徵的是該邊界框中目標屬於各個類別的可能性大小以及邊界框匹配目標的好壞,一般會根據類別置信度來過濾網絡的預測框。

        YOLO的優點,Yolo採用一個CNN網絡來實現檢測,是單管道策略,其訓練與預測都是end-to-end,所以Yolo算法比較簡潔且速度快。第二點由於Yolo是對整張圖片做卷積,所以其在檢測目標有更大的視野,它不容易對背景誤判。另外,Yolo的泛化能力強,在做遷移時,模型魯棒性高。

        YOLO的缺點,首先Yolo各個單元格僅僅預測兩個邊界框,而且屬於一個類別。對於小物體,Yolo的表現會不如人意。Yolo對於在物體的寬高比方面泛化率低,就是無法定位不尋常比例的物體。Yolo的定位不準確也是很大的問題。

2.2 SSD算法

        SSD全稱 :Single Shot MultiBox Detector在R-CNN系列模型裏。Region Proposal和分類是分作兩塊來進行的。SSD則將其統一成一個步驟來使得模型更加簡單並且速度更快。YOLOSSD可以一步到位完成檢測。相比YOLOSSD採用CNN來直接進行檢測,而不是像Yolo那樣在全連接層之後做檢測。它跟Faster R-CNN主要有兩點不一樣,1,對於錨框,不再首先判斷它是不是含有感興趣物體,再將正類錨框放入真正物體分類。SSD裏我們直接使用一個C+1類分類器來判斷它對應的是哪類物體,還是隻是背景。我們不再有額外的迴歸器對邊框再進一步預測,而是直接使用單個迴歸器來預測真實邊框。2,SSD不只是對卷積神經網絡輸出的特徵做預測,它會進一步將特徵通過卷積和池化層變小來做預測。這樣達到多尺度預測的效果。

        (1)採用多尺度特徵圖用於檢測 
        多尺度採用大小不同的特徵圖,CNN網絡一般前面的特徵圖比較大,後面會逐漸採用stride=2的卷積或者pool來降低特徵圖大小,一個比較大的特徵圖和一個比較小的特徵圖,它們都用來做檢測。這樣做的好處是比較大的特徵圖來用來檢測相對較小的目標,而小的特徵圖負責檢測大目標,如圖下圖所示,8x8的特徵圖可以劃分更多的單元,但是其每個單元的先驗框尺度比較小。

        (2)採用卷積進行檢測 
        與Yolo最後採用全連接層不同,SSD直接採用卷積對不同的特徵圖來進行提取檢測結果。對於形狀爲m×n×p的特徵圖,只需要採用3×3×p這樣比較小的卷積核得到檢測值。

        (3)設置先驗框 
        在Yolo中,每個單元預測多個邊界框,但是其都是相對這個單元本身(正方塊),但是真實目標的形狀是多變的,Yolo需要在訓練過程中自適應目標的形狀。而SSD借鑑了Faster R-CNN中anchor的理念,每個單元設置尺度或者長寬比不同的先驗框,預測的邊界框(bounding boxes)是以這些先驗框爲基準的,在一定程度上減少訓練難度。一般情況下,每個單元會設置多個先驗框,其尺度和長寬比存在差異,如下圖所示,可以看到每個單元使用了5個不同的先驗框,圖片中不同物體採用最適合它們形狀的先驗框來進行訓練。

        (4)預測物體類別

        對每一個錨框我們需要預測它是不是包含了我們感興趣的物體,還是隻是背景。使用一個3×3的卷積層來做預測,加上pad=1使用它的輸出和輸入一樣。同時輸出的通道數是num_anchors*(num_classes+1),每個通道對應一個錨框對某個類的置信度。假設輸出是Y,那麼對應輸入中第n個樣本的第(i,j)像素的置信值是在Y[n,:,i,j]裏。具體來說,對於以(i,j)爲中心的第a個錨框。通道 a*(num_class+1) 是其只包含背景的分數,通道 a*(num_class+1)+1+b 是其包含第b個物體的分數。

        (5)預測邊界框

        因爲真實的邊界框可以是任意形狀,我們需要預測如何從一個錨框變換成真正的邊界框。這個變換可以由一個長爲4的向量來描述。同上一樣,我們用一個有num_anchors * 4通道的卷積。假設輸出是Y,那麼對應輸入中第 n 個樣本的第 (i,j) 像素爲中心的錨框的轉換在Y[n,:,i,j]裏。具體來說,對於第a個錨框,它的變換在a*4到a*4+3通道里。

        目標函數和常見的 Object Detection 的方法目標函數相同,分爲兩部分:計算相應的 default box 與目標類別的置信度以及相應的bounding box迴歸結果。

三、存在的問題

        諸如R-CNN一類的依賴於候選的方法,由於使用了特定的方法提取候選區,替代以滑動窗口方法遍歷搜索的方式,需要候選區的數量較少,使基於卷積神經網絡的目標檢測在準確度和速度上都得到了較大提升。然而這些方法非常依賴候選區提取方法的準確度,如檢測場景複雜且目標不明顯,候選區提取方法很難捕獲到目標附近的區域,導致檢測不到目標。目前都是通過實驗來證明卷積神經網絡的有效性,訓練參數的設置大多依靠經驗和實踐,缺乏理論指導和量化分析; 另一方面,需要針對目標檢測設計更加合理的網絡結構,結合回覆式神經網絡提升檢測效率,實現多尺度多類別的目標檢測。R-CNN,Fast-RCNN,Faster-RCNN等,目標檢測的準確度和精度具有優勢,但是很耗時,速度較慢。而類似於SSD好YOLO等算法,其速度快,但是精度性能相對較差。

        主要挑戰存在如下幾點:

        1.小尺度目標檢測。對於基於深度卷積神經網絡的目標檢測,由於深度網絡頂層神經元感受野較大,對於小尺度目標信息保存較不完整,故而小尺度目標檢測性能不高。

        2.計算複雜度。目標檢測算法計算複雜度取決於特徵提取網絡的前向傳播計算時間。網絡特徵表達能力與網絡深度存在較強關係,一般而言,在一定深度範圍內,網絡越深,表達能力越強,目標檢測算法性能越好,但計算開銷隨之增大。

除此之外,深度卷積神經網絡需要大量的人工標註數據進行訓練,訓練數據的獲得對於目標檢測算法同樣至關重要。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章