您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)如何進(jìn)行OpenCV及Dlib的人臉檢測比較分析,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
人臉檢測是計(jì)算機(jī)視覺最典型的應(yīng)用之一,早期OpenCV的logo就是Haar人臉檢測的示意圖。
很多人的第一個OpenCV學(xué)習(xí)目標(biāo)就是跑通Haar級聯(lián)人臉檢測,Dlib庫在業(yè)內(nèi)開始流行很大程度上是因?yàn)槠銱OG-SVM人臉檢測比OpenCV Haar的好,而近年來OpenCV和Dlib均已包含基于深度學(xué)習(xí)的人臉檢測算法實(shí)現(xiàn)。
Haar-Cascade,HOG-SVM,深度學(xué)習(xí)正是代表著人臉檢測乃至目標(biāo)檢測的三個時代。
昨天Learn OpenCV網(wǎng)站博主Vikas Gupta博士發(fā)表文章,對OpenCV與Dlib中四種人臉檢測算法實(shí)現(xiàn)進(jìn)行了比較分析,包含C++/Python的代碼示例,且對精度和速度都進(jìn)行了量化。
1. OpenCV Haar Cascade人臉檢測
算法無需贅言。
代碼示例:
優(yōu)點(diǎn)
1)幾乎可以在CPU上實(shí)時工作;
2)簡單的架構(gòu);
3)可以檢測不同比例的人臉。
缺點(diǎn)
1)會出現(xiàn)大量的把非人臉預(yù)測為人臉的情況;
2)不適用于非正面人臉圖像;
3)不抗遮擋。
2. OpenCV DNN 人臉檢測
從OpenCV3.3版本后開始引入,算法出自論文《SSD: Single Shot MultiBox Detector》(https://arxiv.org/abs/1512.02325)。使用ResNet-10作為骨干網(wǎng)。
OpenCV提供了兩個模型:
1)原始Caffe實(shí)現(xiàn)的16位浮點(diǎn)型版本(5.4MB);
2)TensorFlow實(shí)現(xiàn)的8位量化版本(2.7MB)。
Vikas Gupta的代碼包含了這兩種模型。
模型加載代碼示例:
檢測測試代碼示例:
優(yōu)點(diǎn)
1)在這四種方法中是最準(zhǔn)確的;
2)在CPU上能夠?qū)崟r運(yùn)行;
3)適用于不同的人臉方向:上,下,左,右,側(cè)面等。
4)甚至在嚴(yán)重遮擋下仍能工作;
5)可以檢測各種尺度的人臉。
缺點(diǎn)
作者認(rèn)為沒有什么大的缺點(diǎn)^_^
(52CV君不敢妄提缺點(diǎn),但認(rèn)為不能使用NVIDIA GPU絕對是個遺憾)
3. Dlib HoG人臉檢測
代碼示例:
優(yōu)點(diǎn)
1)CPU上最快的方法;
2)適用于正面和略微非正面的人臉;
3)與其他三個相比模型很??;
4)在小的遮擋下仍可工作。
缺點(diǎn)
1)不能檢測小臉,因?yàn)樗?xùn)練數(shù)據(jù)的最小人臉尺寸為80×80,但是用戶可以用較小尺寸的人臉數(shù)據(jù)自己訓(xùn)練檢測器;
2)邊界框通常排除前額的一部分甚至下巴的一部分;
3)在嚴(yán)重遮擋下不能很好地工作;
4)不適用于側(cè)面和極端非正面,如俯視或仰視。
4. Dlib CNN人臉檢測
算法來自論文《Max-Margin Object Detection》(https://arxiv.org/abs/1502.00046)。
代碼示例:
優(yōu)點(diǎn)
1)適用于不同的人臉方向;
2)對遮擋魯棒;
3)在GPU上工作得非???;
4)非常簡單的訓(xùn)練過程。
缺點(diǎn)
1)CPU速度很慢;
2)不能檢測小臉,因?yàn)樗?xùn)練數(shù)據(jù)的最小人臉尺寸為80×80,但是用戶可以用較小尺寸的人臉數(shù)據(jù)自己訓(xùn)練檢測器;
3)人臉包圍框甚至小于DLib HoG人臉檢測器。
5. 四種方法精度比較
作者在FDDB數(shù)據(jù)庫中測評了四種人臉檢測算法實(shí)現(xiàn)的精度,結(jié)果如下:
可以看到Dlib的兩種方法效果都不怎么好,作者發(fā)現(xiàn)原來Dlib訓(xùn)練使用的數(shù)據(jù)集的人臉包圍框較小,導(dǎo)致按照FDDB的評價標(biāo)準(zhǔn)不公平。
另外,Dlib無法檢測小臉也拉低了分?jǐn)?shù)。
6. 速度比較
軟硬件環(huán)境:
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,測試結(jié)果如下:
可以看到除了MMOD 其他方法都達(dá)到實(shí)時,而MMOD方法的GPU計(jì)算是最快的。
7. 分情況檢測結(jié)果示例
7.1跨尺度檢測
7.2 非正面人臉
7.3 遮擋
8 總結(jié)推薦
如何在應(yīng)用中選擇人臉檢測算法呢?作者認(rèn)為應(yīng)該首先嘗試OpenCV DNN方法與Dlib HOG方法,然后再做決定。
一般情況
在大多數(shù)應(yīng)用程序中,我們無法知道圖像中人臉尺寸的大小。因此,最好使用OpenCV-DNN方法,因?yàn)樗浅?焖偾曳浅?zhǔn)確,即使對于小尺寸的人臉也是如此。它還可以檢測各種角度的人臉。所以O(shè)penCV-DNN是首選。
中到大尺寸的圖像
Dlib HOG是CPU上最快的方法。但它不能檢測到小臉(<70x70)。因此,如果知道程序不會處理非常小的人臉(例如自拍照),那么基于HOG的人臉檢測器是更好的選擇。
此外,如果你可以使用GPU(NVIDIA家的),那么MMOD人臉檢測器是最好的選擇,因?yàn)樗贕PU上非???,并且還提供各種角度的檢測。
高分辨率圖像
由于在高分辨率圖像中,這些算法的速度都會很慢,而如果縮小圖像尺寸,HOG/MMOD可能會失敗,同時OpenCV-DNN卻可以檢測小臉,所以對于高分辨率圖像推薦縮小圖像再使用OpenCV-DNN的方法。
上述就是小編為大家分享的如何進(jìn)行OpenCV及Dlib的人臉檢測比較分析了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。