計算機視覺中關於圖像識別有四大類任務:
- 分類-Classification:解決"是什么?"的問題,即給定一張圖片或一段視頻判斷里面包含什么類別的目標。
- 定位-Location:解決"在哪里?"的問題,即定位出這個目標的的位置。
- 檢測-Detection:解決"是什么?在哪里?"的問題,即定位出這個目標的的位置並且知道目標物是什么。
- 分割-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)手工設計的特征對於多樣性的變化沒有很好的魯棒性
以下是各種選定候選框的方法的性能對比。
四、評價指標
AP、mAP、P-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