在計算機視覺領域,最基本也最經典的乙個問題就是目標識別(object detection):給出一張影象,用detector檢測出影象中特定的object(如人臉)。這方面的**最經典的恐怕要數《rapid object detection using a boosted cascade of ****** features》這篇了,截止目前(2015.4.2)已經引用10834次。matlab的computer vision system toolbox中的vision.cascadeobjectdetector system 以及 opencv中提供的cascade classification 都是基於這篇**的演算法。該演算法的特點是在保證高準確率的基礎上,速度也非常快。本文就結合自己的理解,對這篇**做乙個簡略的閱讀筆記。由於太過經典,網上有各種關於該**的資料可供讀者參詳,本文只是個人筆記,不求詳盡。
首先,目標檢測的基本原理就是先通過訓練集學習乙個分類器,然後在測試影象中以不同scale的視窗滑動掃瞄整個影象;每次掃瞄做一下分類,判斷一下當前的這個視窗是否為要檢測的目標。演算法的核心是分類,分類的核心乙個是用什麼特徵,乙個是用哪種分類器。該**的貢獻也就是在這兩個方面。
我們的分類器是對乙個視窗(如20*20)進行分類,那就需要用到這個視窗的特徵,比如顏色直方圖、sift特徵。本文中用的是 harr-like 特徵。解釋一下。
harr-like 特徵是一類矩形特徵,該文用了以下四種:
特徵值的計算方式是:先分別求灰色矩陣和白色矩陣中的畫素值(對於灰度圖就是它的灰度值)的和,然後兩者相減。由於四種中的每一種又可以有不同的大小,不同的位置,通過計算,可以驗證乙個24*24的視窗中有16萬個這樣的特徵。
首先補充一下為什麼這樣的特徵可以用,舉個例子吧,看下圖,兩個矩形是通過後面的adaboost選出來的最好用的中的兩個。第乙個可以反映出眼睛區域更dark;第二個反映出眼睛比鼻樑上端更dark。
第二個問題是,這麼多特徵,每乙個都要計算矩形裡面的畫素值和,計算量太大了有木有!該**的乙個貢獻是提出了用integral image來重新表示一幅影象,其實是個很簡單的trick,但把計算量一下就縮減了乙個量級。
影象i中的x,y處的畫素值用 i(x,y)表示; 積分影象ii(與i大小一樣)中x,y處的畫素值用ii(x,y)表示。對應位置怎麼轉換呢? 其實就是把原影象中該位置左邊和上邊的所有畫素值加起來。用公式表達:
是個迭代的式子。把原影象逐個畫素掃瞄一遍就得到積分影象。於是,矩形d的畫素值和就可以用4+1-(2+3)
算了,複雜度是o(1)。
第三個問題是,難道我分類器要用這麼多特徵嗎,難道我每次檢測乙個視窗要計算16萬個特徵嗎?這就是該**的第二個貢獻了,用adaboost選擇少數幾個最好用的特徵。
adaboost是一種ensemble分類器,也就是把多個弱分類器結合起來形成乙個強分類器。每個弱分類器的準確率並不高,但最後形成的強分類器的準確率就很高了,而且已經被證明有很大的margin,也就是有很好的泛化能力。
16萬個特徵,用每個特徵做乙個弱分類器,弱分類器使用決策樹這種最簡單的分類器。說白了,就是用乙個固定大小和位置的矩形特徵,在所有正負樣本上訓練,找到乙個閾值讓它的分類錯誤率最低。
所謂adaboost也就是:迭代t次,對於第t次,所有的弱分類器都做一下分類,選擇乙個分類錯誤率最低的弱分類器;迭代t次,就產生t個弱分類器。這t個弱分類器加起來就是最後得到的強分類器。
adaboost的核心的分類器的權重和根據錯誤率做的權重更新,這裡不贅述,比較簡單。
可以看到,最後產生的強分類器使用了t個特徵,而不是全部的16萬個。**中說道,用200個特徵就能產生95%的識別率了。
到這裡,我們的分類器就搞定了,就可以拿來做object detection了。 but, one more thing…
上面得到了分類器,在檢測影象時,對於每個視窗,我們都要計算t個特徵。這固然可以,但是,作者的第三個貢獻就是提出級聯分類器的方法,檢測乙個視窗未必要計算所有這t個特徵。
該方法的assumption是在檢測的所有視窗中,false的佔覺得大多數。
我們前面得到了乙個強分類器。這裡呢,我們需要m個強分類器。從頭到尾串起來。每次檢測乙個視窗,先用第乙個強分類器檢測,如果是false,直接放棄後面m-1個分類器的檢測,該處沒有object;否則就繼續執行第二個強分類器的檢測… 如果中間某個stage(強分類器)結果是false,直接結束,該處沒有object;如果所有m個分類器全部是true,那麼該處有object。 級聯分類器的關鍵是強分類器的次序安排:把簡單的、false negative低的安排在最前面。 這樣可以快速判斷出那些不相關的區域,把更多的計算量用在潛在區域。
這裡以**中的人臉識別實驗為例,做些補充。
遺留問題:級聯分類器的具體訓練和選擇方法。
參考和推薦:
viola p, jones m. rapid object detection using a boosted cascade of ****** features[c]//computer vision and pattern recognition, 2001. cvpr 2001. proceedings of the 2001 ieee computer society conference on. ieee, 2001, 1: i-511-i-518 vol. 1.[[
[[
目標檢測SSD演算法筆記
明確幾個概念 通過feature map cell anchor 生成的矩形框稱之為default box ssd中為8732個 將這些default box與真實的目標框 ground truth 進行iou匹配後得到的大於iou閾值的矩形框稱之為prior box 通過prior box結合難例...
目標檢測學習筆記 DSSD演算法
ssd具有如下主要特點 1 從yolo中繼承了將detection轉化為regression的思路,同時一次即可完成網路訓練 2 基於faster rcnn中的anchor,提出了相似的prior box 3 加入基於特徵金字塔 pyramidal feature hierarchy 的檢測方式 y...
目標檢測演算法綜述筆記
主要參考兩篇綜述 object detection in 20 years a survey recent advances in deep learning for object detection csdn上有翻譯版,對照這翻譯版,能夠更快的理解,注意如果是菜鳥,最好review三遍,三遍是我從...