10年後再看Robust Real-Time Face Detection(一)
這篇論文是人臉檢測上的經典之作。 作者是PAUL VIOLA。相較於其他的人臉檢測演算法, 該篇論文中提到的演算法的主要有點就是在保證較高的人臉檢測率的前提下, 實現了超高的檢測速度。 真正做到了實時性(Real Time), 當之無愧。 可以說之前的各種人臉檢測演算法均無法達到實時性應用的要求。 這篇論文的發表可以說是奠定人臉檢測走向實時的工程應用的基石。 說是開山之作一點也不過分。 下面主要學習拜讀一下牛人的論文, 並實現穩中的演算法。
在這篇文章的摘要中, PAUL VIOLA 主要介紹了這篇論文Robust Real-Time Face Detection在人臉檢測領域主要有三大貢獻:
(1) 首先引入了積分圖(Integral Image)的概念。這一概念至關重要。 雖然積分圖並不是由Viola 首先提出的, 但是真正將積分圖推廣, 並被大家廣泛認識的一定是PAUL VIOLA了。 對給定的於任何一幅影象, 我們都可以計算出與之對應的一個唯一積分影象。 可以說積分圖是原始影象的新的影象表示(a new image representation )。 後面我們會知道, 正是因為我們提前計算出了積分影象, 所以在後面極其迅速(O(1), 也就是常數的時間內)計算出我們的檢測器(detector)所需要的特徵(Haar-like features)。 可以說, 沒有積分圖的存在, 文章中的實時性(real-time)將會是空談。
(2)第二個貢獻是通過使用AdaBoost學習演算法, 從大量的潛在的候選特徵(Haar-like features)集合中選出需要的, 少量的關鍵視覺特徵(critical visual features)。 這樣, 我們的分類器就變得簡單而高效。關鍵視覺特徵由於數量少, 從而我們的訓練的速度也很快, 這又從另一個方面保證了實時性(Real - Time)。 為什麼需要Adaboost 學習演算法?? 原因是我們通過滑動我們的影象子視窗, 計算出的Haar-like features(類似Haar特徵)的總的特徵個數是相當的巨大, 會遠遠的超過原影象本身的畫素的總數。 所以為了達到實時性的目的, 我們必須需要藉助於Adaboost 學習演算法, 從這麼大的特徵集合中選出少量的關鍵特徵集。 也就是說, 在每一階段的自舉(boosting的過程中), 我們都會選擇一個新的弱分類器(a new weak classifier,)。 這一個階段也可以視為特徵選擇的過程。
(3)第三個貢獻就是通過採用將弱分類器級聯的方法, 組合出一個強分類器。 也就是說每一級的分類器都將本級分類器認為是影象的背景區域(無人臉區域)丟棄掉, 以便下一級的分類器能夠將主要的計算力和精力放在更像是人臉的區域(promising face-like regions)上去。這一步, 實時性體現在減小分類器的複雜性, 一級一級的提練影象, 減少無關的圖象中的資料。 值得一提的是, 通過在資料庫上學習, 我們在這裡採用學習得到的一個face detection attentional operator, 該運算元能夠濾除掉影象中50%的部分, 但是卻可以儲存下99% 的人臉區域。 相當可觀。 這些子視窗(sub-windows)不會被最開始的那個分類器(initial classifier)拒絕, 但是卻會被後面級聯的分類器處理。 每一級分類器都比其前一級複雜。 所以凡是被某一級的分類器拒絕掉的子視窗都不會被後面的分類器處理。 不難看出, 該級聯分類器檢測過程其實是一個退化的決策樹的過程(a degenerate decision tree)。 作者在論文中採用的分類器的個數為38個。 儘管分類器的數目很多, 但是由於採用了這種級聯的結構卻導致檢測速度的提升。
通過上面的簡要介紹, 我們不難發現, 我們自始至終通過一些方法來提高我們的檢測速度。 實際上該演算法的精度也是相當好的。據論文所說, 即使是在一個普通的筆記本上, 我們的檢測速度能夠達到每秒15幀影象(文中提到執行在700 MHz Intel Pentium III的筆記本上, 影象大小為384 by 288 pixel images,檢測的是a frontal face detection,也就是正臉), 當時實現的false positive rates能夠達到最新的發表成果達到的標準, 但是其檢測的速度卻是後者難以望其項背的)。 更何況論文發表於2004年, 距離現在將近10年了, 考慮到摩爾定律帶來的計算機執行速度的提升, 即使論文發表10年後的今天, 我們依然能夠驚歎於演算法的簡約, 優雅之處。 在接下來的幾天, 將重點介紹這篇人臉檢測領域走向實用的開山之作。