[譯] OpenCV vs Dlib 人臉檢測比較分析
我愛計算機視覺 標星,更快獲取CVML新技術
人臉檢測是計算機視覺最典型的應用之一,早期OpenCV的logo就是Haar人臉檢測的示意圖。
很多人的第一個OpenCV學習目標就是跑通Haar級聯人臉檢測,Dlib庫在業內開始流行很大程度上是因為其HOG-SVM人臉檢測比OpenCV Haar的好,而近年來OpenCV和Dlib均已包含基於深度學習的人臉檢測演算法實現。
Haar-Cascade,HOG-SVM,深度學習正是代表著人臉檢測乃至目標檢測的三個時代。
昨天Learn OpenCV網站博主Vikas Gupta博士發表文章,對OpenCV與Dlib中四種人臉檢測演算法實現進行了比較分析,包含C++/Python的程式碼示例,且對精度和速度都進行了量化。
先來看看作者釋出的視訊:
1. OpenCV Haar Cascade人臉檢測
演算法無需贅言。
程式碼示例:
優點
1)幾乎可以在CPU上實時工作;
2)簡單的架構;
3)可以檢測不同比例的人臉。
缺點
1)會出現大量的把非人臉預測為人臉的情況;
2)不適用於非正面人臉影象;
3)不抗遮擋。
2. OpenCV DNN 人臉檢測
從OpenCV3.3版本後開始引入,演算法出自論文《SSD: Single Shot MultiBox Detector》(https://arxiv.org/abs/1512.02325)。使用ResNet-10作為骨幹網。
OpenCV提供了兩個模型:
1)原始Caffe實現的16位浮點型版本(5.4MB);
2)TensorFlow實現的8位量化版本(2.7MB)。
Vikas Gupta的程式碼包含了這兩種模型。
模型載入程式碼示例:
檢測測試程式碼示例:
優點
1)在這四種方法中是最準確的;
2)在CPU上能夠實時執行;
3)適用於不同的人臉方向:上,下,左,右,側面等。
4)甚至在嚴重遮擋下仍能工作;
5)可以檢測各種尺度的人臉。
缺點
作者認為沒有什麼大的缺點^_^
(52CV君不敢妄提缺點,但認為不能使用NVIDIA GPU絕對是個遺憾)
3. Dlib HoG人臉檢測
程式碼示例:
優點
1)CPU上最快的方法;
2)適用於正面和略微非正面的人臉;
3)與其他三個相比模型很小;
4)在小的遮擋下仍可工作。
缺點
1)不能檢測小臉,因為它訓練資料的最小人臉尺寸為80×80,但是使用者可以用較小尺寸的人臉資料自己訓練檢測器;
2)邊界框通常排除前額的一部分甚至下巴的一部分;
3)在嚴重遮擋下不能很好地工作;
4)不適用於側面和極端非正面,如俯視或仰視。
4. Dlib CNN人臉檢測
演算法來自論文《Max-Margin Object Detection》(https://arxiv.org/abs/1502.00046)。
程式碼示例:
優點
1)適用於不同的人臉方向;
2)對遮擋魯棒;
3)在GPU上工作得非常快;
4)非常簡單的訓練過程。
缺點
1)CPU速度很慢;
2)不能檢測小臉,因為它訓練資料的最小人臉尺寸為80×80,但是使用者可以用較小尺寸的人臉資料自己訓練檢測器;
3)人臉包圍框甚至小於DLib HoG人臉檢測器。
5. 四種方法精度比較
作者在FDDB資料庫中測評了四種人臉檢測演算法實現的精度,結果如下:
可以看到Dlib的兩種方法效果都不怎麼好,作者發現原來Dlib訓練使用的資料集的人臉包圍框較小,導致按照FDDB的評價標準不公平。
另外,Dlib無法檢測小臉也拉低了分數。
6. 速度比較
軟硬體環境:
Processor : Intel Core i7 6850K – 6 Core
RAM : 32 GB
GPU : NVIDIA GTX 1080 Ti with 11 GB RAM
OS : Linux 16.04 LTS
Programming Language : Python
影象大小300*300,測試結果如下:
可以看到除了MMOD 其他方法都達到實時,而MMOD方法的GPU計算是最快的。
7. 分情況檢測結果示例
7.1跨尺度檢測
7.2 非正面人臉
7.3 遮擋
8 總結推薦
如何在應用中選擇人臉檢測演算法呢?作者認為應該首先嚐試OpenCV DNN方法與Dlib HOG方法,然後再做決定。
一般情況
在大多數應用程式中,我們無法知道影象中人臉尺寸的大小。因此,最好使用OpenCV-DNN方法,因為它非常快速且非常準確,即使對於小尺寸的人臉也是如此。它還可以檢測各種角度的人臉。所以OpenCV-DNN是首選。
中到大尺寸的影象
Dlib HOG是CPU上最快的方法。但它不能檢測到小臉(<70x70)。因此,如果知道程式不會處理非常小的人臉(例如自拍照),那麼基於HOG的人臉檢測器是更好的選擇。
此外,如果你可以使用GPU(NVIDIA家的),那麼MMOD人臉檢測器是最好的選擇,因為它在GPU上非常快,並且還提供各種角度的檢測。
高解析度影象
由於在高解析度影象中,這些演算法的速度都會很慢,而如果縮小影象尺寸,HOG/MMOD可能會失敗,同時OpenCV-DNN卻可以檢測小臉,所以對於高解析度影象推薦縮小影象再使用OpenCV-DNN的方法。
原文連結:
https://www.learnopencv.com/face-detection-opencv-dlib-and-deep-learning-c-python/
程式碼資料下載:
在“我愛計算機視覺”微信公眾號對話介面回覆“人臉檢測比較”,即可收到該文程式碼、模型與使用資料百度雲下載地址。
人臉檢測開源技術眾多,除了OpenCV和Dlib,你還有什麼推薦嗎?歡迎留言~
長按關注 我愛計算機視覺
Line"/>
【點贊與轉發】 就是一種鼓勵