最近正要看Contextual Action Recognition with R*CNN,學習基於動態圖像圖像的行爲識別,所以要惡補下它所需要的知識。
也就是目標檢測常見的幾種算法。
1、首先目標檢測是什麼?
在給定的圖片中找到物體的所在位置,並且分辨出物體的類別。這實際上是兩個任務。
圖像識別:image ----> cat/dog
圖像定位:image ---->(x,y,w,h)
2、實現目標檢測的幾種方法:
1)傳統的目標檢測方法
大概思路是:採用classification和regression相結合的方式,對一張圖片,用各種大小的框(遍歷整張圖片)將圖片截取出來,輸入到CNN,然後CNN會輸出這個框的得分(classification)以及這個框圖片對應的x,y,h,w(regression)。
問題:基於滑動窗口的選擇策略沒有針對性,窗口冗餘,時間複雜度高
檢測多個物體很難進行。
2)候選區域+深度學習分類
R-CNN
爲了防止基於滑動窗口的選擇策略沒有針對性,我們可以實現在途中找出目標可能出現的位置(利用顏色,紋理,邊緣等等),即候選區域。
簡要步驟:
(1) 輸入測試圖像
(2) 利用選擇性搜索Selective Search算法在圖像中從下到上提取2000個左右的可能包含物體的候選區域Region Proposal
(3) 因爲取出的區域大小各自不同,所以需要將每個Region Proposal縮放(warp)成統一的227x227的大小並輸入到CNN,將CNN的fc7層的輸出作爲特徵
(4) 將每個Region Proposal提取到的CNN特徵輸入到SVM進行分類
它的缺點也非常明顯,對每個候選框都要進行CNN特徵提取和SVM分類,計算量很大。
Fast R-CNN
原來的方法:許多候選框(比如兩千個)-->CNN-->得到每個候選框的特徵-->分類+迴歸
現在的方法:一張完整圖片-->CNN-->得到每張候選框的特徵-->分類+迴歸
(1) ROI pooling layer實際上是SPP-NET的一個精簡版,SPP-NET對每個proposal使用了不同大小的金字塔映射,而ROI pooling layer只需要下采樣到一個7x7的特徵圖。對於VGG16網絡conv5_3有512個特徵圖,這樣所有region proposal對應了一個7*7*512維度的特徵向量作爲全連接層的輸入。
(2) R-CNN訓練過程分爲了三個階段,而Fast R-CNN直接使用softmax替代SVM分類,同時利用多任務損失函數邊框迴歸也加入到了網絡中,這樣整個的訓練過程是端到端的(除去region proposal提取階段)。
Faster R-CNN
對Fast的加速,加入一個提取邊緣的神經網絡,也就說找到候選框的工作也交給神經網絡來做了。
所以,rgbd在Fast R-CNN中引入Region Proposal Network(RPN)替代Selective Search,同時引入anchor box應對目標形狀的變化問題。
30基於深度學習的迴歸方法
YOLO/SSD 以後再說