目標檢測:介紹及傳統方法


計算機視覺中關於圖像識別有四大類任務:

  1. 分類-Classification:解決"是什么?"的問題,即給定一張圖片或一段視頻判斷里面包含什么類別的目標。
  2. 定位-Location:解決"在哪里?"的問題,即定位出這個目標的的位置。
  3. 檢測-Detection:解決"是什么?在哪里?"的問題,即定位出這個目標的的位置並且知道目標物是什么。
  4. 分割-Segmentation:分為實例的分割(Instance-level)和場景分割(Scene-level),解決"每一個像素屬於哪個目標物或場景"的問題。

一、目標檢測常見算法

除了圖像分類之外,目標檢測要解決的核心問題是:

1.目標可能出現在圖像的任何位置。

2.目標有各種不同的大小。

3.目標可能有各種不同的形狀。

如果用矩形框來定義目標,則矩形有不同的寬高比。由於目標的寬高比不同,因此采用經典的滑動窗口+圖像縮放的方案解決通用目標檢測問題的成本太高。

目前學術和工業界出現的目標檢測算法分成3類:

1. 傳統的目標檢測算法:Cascade + HOG/DPM + Haar/SVM以及上述方法的諸多改進、優化;

2. 候選區域/窗 + 深度學習分類:通過提取候選區域,並對相應區域進行以深度學習方法為主的分類的方案,如:

R-CNN(Selective Search + CNN + SVM)

SPP-net(ROI Pooling)

Fast R-CNN(Selective Search + CNN + ROI)

Faster R-CNN(RPN + CNN + ROI)

R-FCN等系列方法;

3. 基於深度學習的回歸方法:YOLO/SSD/DenseBox 等方法;以及最近出現的結合RNN算法的RRC detection;結合DPM的Deformable CNN等

   

傳統目標檢測流程:

1)區域選擇(窮舉策略:采用滑動窗口,且設置不同的大小,不同的長寬比對圖像進行遍歷,時間復雜度高)

2)特征提取(SIFT、HOG等;形態多樣性、光照變化多樣性、背景多樣性使得特征魯棒性差)

3)分類器分類(主要有SVM、Adaboost等)

二、傳統的目標檢測算法

2.1 圖像識別的任務

這里有一個圖像任務:既要把圖中的物體識別出來,又要用方框框出它的位置。

這個任務本質上就是這兩個問題:一:圖像識別,二:定位。

1)圖像識別(classification):

輸入:圖片

輸出:物體的類別

評估方法:准確率

2)定位(localization):

輸入:圖片

輸出:方框在圖片中的位置(x,y,w,h)

評估方法:檢測評價函數 intersection-over-union(簡單來講就是模型產生的目標窗口和原來標記窗口的交疊率)。

卷積神經網絡CNN已經幫我們完成了圖像識別(判定是貓還是狗)的任務,我們只需要添加一些額外的功能來完成定位任務即可。定位的問題的解決思路有哪些?

思路一:看做回歸問題

看做回歸問題,我們需要預測出(x,y,w,h)四個參數的值,從而得出方框的位置。

步驟1:

  • 先解決簡單問題, 搭一個識別圖像的神經網絡

  • 在AlexNet VGG GoogleLenet上fine-tuning一下:

步驟2:

  • 在上述神經網絡的尾部展開(也就說CNN前面保持不變,我們對CNN的結尾處作出改進:加了兩個頭:"分類頭"和"回歸頭")

  • 成為classification + regression模式

步驟3:

  • Regression那個部分用歐氏距離損失

  • 使用SGD訓練

步驟4:

  • 預測階段把2個頭部拼上

  • 完成不同的功能

這里需要進行兩次fine-tuning

第一次在ALexNet上做,第二次將頭部改成regression head,前面不變,做一次fine-tuning

Regression的部分加在哪?

有兩種處理方法:

  • 加在最后一個卷積層后面(如VGG)

  • 加在最后一個全連接層后面(如R-CNN)

regression太難做了,應想方設法轉換為classification問題。

regression的訓練參數收斂的時間要長得多,所以上面的網絡采取了用classification的網絡來計算出網絡共同部分的連接權值。

思路二:取圖像窗口

  • 還是剛才的classification + regression思路

  • 咱們取不同的大小的"框"

  • 讓框出現在不同的位置,得出這個框的判定得分

  • 取得分最高的那個框

根據得分的高低,我們選擇了右下角的黑框作為目標位置的預測。

注:有的時候也會選擇得分最高的兩個框,然后取兩框的交集作為最終的位置預測。

疑惑:框要取多大?

取不同的框,依次從左上角掃到右下角。非常粗暴啊。

總結一下思路:

對一張圖片,用各種大小的框(遍歷整張圖片)將圖片截取出來,輸入到CNN,然后CNN會輸出這個框的得分(classification)以及這個框圖片對應的x,y,h,w(regression)。

這方法實在太耗時間了,做個優化。原來網絡是這樣的:

優化成這樣:把全連接層改為卷積層,這樣可以提提速。

2.2 物體檢測(Object Detection

當圖像有很多物體怎么辦的?那任務就變成了:多物體識別+定位多個物體。那把這個任務看做分類問題?

看成分類問題有何不妥?

  • 你需要找很多位置, 給很多個不同大小的框

  • 你還需要對框內的圖像分類

  • 當然, 如果你的GPU很強大, 恩, 那加油做吧…

三、傳統目標檢測的主要問題

1)基於滑動窗口的區域選擇策略沒有針對性,時間復雜度高,窗口冗余

2)手工設計的特征對於多樣性的變化沒有很好的魯棒性

以下是各種選定候選框的方法的性能對比。

四、評價指標

APmAPP-R曲線

准確率-召回率曲線(P-R曲線):以召回率為橫坐標,精確率為縱坐標,用不同的閥值,統計出一組不同閥值下的精確率和召回率。

AP(average precision)——P-R曲線下的面積;

mAP(mean average precision)——多個類別AP的平均值。

ROC曲線、AUC

ROC曲線:用不同的閥值,統計出一組不同閥值下的TPR(真陽率)和FPR(假陽率)的關系。

AUC(Area Under Curve):ROC曲線下的面積。

ROC曲線優點:當測試集中的正負樣本的分布變化的時候,ROC曲線能夠保持不變。在實際的數據集中經常會出現類不平衡(class imbalance)現象,即負樣本比正樣本多很多(或者相反),而且測試數據中的正負樣本的分布也可能隨着時間變化。

IOU(Intersection over Union):是一種測量在特定數據集中檢測相應物體准確度的一個標准,一般來說,這個score > 0.5 就可以被認為一個不錯的結果了。

Fps (Frames Per Second):每秒處理圖像的幀數

FLOPS:每秒浮點運算次數、每秒峰值速度

主要來自:https://blog.csdn.net/v_JULY_v/article/details/80170182

附件:

最新情況,建議看我的后續文章,或者逛逛:https://github.com/hoya012/deep_learning_object_detection#2014


免責聲明!

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



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