自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

什么是最好的面部檢測器? | Dlib、OpenCV DNN、Yunet、Pytorch-MTCNN和RetinaFace

人工智能 人臉識別
選擇面部檢測模型時的主要權衡是準確性和性能之間的平衡,但還有其他因素需要考慮。

我正在處理的面部識別問題,需要選擇一個面部檢測模型。面部檢測是面部識別流水線的第一步,準確識別圖像中的面部至關重要。Garbage in, garbage out。

然而,眾多的選項讓我感到不知所措,而且關于這一主題的零散寫作還不夠詳細,無法幫助我決定選擇哪種模型。比較各種模型花費了我很多精力,因此我認為傳達我的研究可能會幫助處于類似情況的人們。

面部檢測器的選擇要點是什么? 

選擇面部檢測模型時的主要權衡是準確性和性能之間的平衡。但還有其他因素需要考慮。關于面部檢測模型的大多數(shù)文章要么是模型創(chuàng)建者寫的,通常發(fā)表在期刊上,要么是那些在代碼中實現(xiàn)模型的人寫的。在這兩種情況下,作者自然會對他們所寫的模型持有偏見。在一些極端情況下,這些文章實際上是該模型的宣傳廣告。

很少有文章比較不同模型的性能表現(xiàn)。進一步增加混亂的是,每當有人寫關于像RetinaFace這樣的模型時,他們討論的是該模型的特定實現(xiàn)。模型本身實際上是神經(jīng)網(wǎng)絡架構,不同的實現(xiàn)可能會導致不同的結果。更復雜的是,這些模型的性能還取決于后處理參數(shù),如置信度閾值、非極大值抑制等。

每個作者都將自己的模型描述為“最好”,但我很快意識到“最好”取決于上下文。沒有客觀上最好的模型。決定哪個面部檢測模型最合適的兩個主要標準是準確性和速度。

沒有一個模型能同時具備高準確性和高速度,這是一個權衡。我們還必須查看原始準確性之外的指標,大多數(shù)基準測試基于原始準確性(正確猜測/總樣本量),但原始準確性不是唯一需要關注的指標。假陽性與真陽性的比率以及假陰性與真陰性的比率也是重要的考慮因素。用技術術語來說,這種權衡是精度(最小化假陽性)和召回率(最小化假陰性)之間的權衡。這篇文章深入討論了這個問題。

測試模型 

有一些現(xiàn)有的用于基準測試的面部檢測數(shù)據(jù)集,如WIDER FACE,但我總是喜歡看看這些模型在我的數(shù)據(jù)上表現(xiàn)如何。所以我隨機選取了1064幀電視節(jié)目樣本來測試這些模型(±3%的誤差范圍)。在手動標注每張圖像時,我盡量選擇盡可能多的面部,包括部分或幾乎完全遮擋的面部,以給模型帶來真正的挑戰(zhàn)。因為我最終要對檢測到的面部進行面部識別,所以我想測試每個模型的極限。

數(shù)據(jù)和標注可以從下面鏈接進行下載:

  • https://drive.google.com/uc?export=download&id=1OPAT47OXjgmjKlAY2irQLf4GNoHyMlhX(數(shù)據(jù))
  • https://drive.google.com/uc?export=download&id=1UbrndfOvvzFIdU-w3Kw8qrFM6D_ZljJZ(標注)

將各種模型分為兩類是有幫助的;那些運行在GPU上的模型和那些運行在CPU上的模型。一般來說,如果你有兼容CUDA的GPU,應該使用基于GPU的模型。我有一個NVIDIA 1080 TI顯卡,具有11GB內存,這使我能夠使用一些大規(guī)模的模型。然而,我的項目規(guī)模巨大(我指的是成千上萬的視頻文件),所以對速度極快的基于CPU的模型很感興趣?;贑PU的面部檢測模型不多,所以我決定只測試最受歡迎的一個:YuNet。由于其速度,YuNet構成了我的基線比較。一個GPU模型必須比其CPU對應的模型準確得多,以證明其較慢的處理速度是合理的。

CPU模型 

YuNet 

YuNet是為性能而開發(fā)的,其模型大小僅為較大模型的一小部分。例如,YuNet只有75,856個參數(shù),而RetinaFace則有27,293,600個參數(shù),這使得YuNet可以在“邊緣”計算設備上運行,而這些設備不足以運行較大的模型。

  • 論文地址:https://doi.org/10.1007/s11633-023-1423-y
  • 代碼地址:https://github.com/ShiqiYu/libfacedetection
  • 預訓練模型:https://github.com/opencv/opencv_zoo

作為一個CPU模型,YuNet的表現(xiàn)比我預期的要好得多。它能夠毫無問題地檢測到大面部,但在檢測較小面部時有些困難。

能夠檢測到即使在斜角度的大面部。邊界框有些偏差,可能是因為圖像需要調整為300x300才能輸入到模型中。

YuNet幾乎找到了所有面部,但也包括了一些假陽性。

當限制為圖像中的最大面部時,準確性大大提高。

如果性能是主要考慮因素,YuNet是一個很好的選擇。它甚至足夠快,可以用于實時應用,而GPU選項則不能(至少在沒有一些嚴重硬件的情況下)。

YuNet使用固定的300x300輸入尺寸,因此時間差異是由于將圖像調整為這些尺寸導致的。GPU模型 

Dlib 

Dlib是一個C++實現(xiàn),帶有Python包裝器,保持了準確性、性能和便利性之間的平衡。Dlib可以直接通過Python安裝,也可以通過Face Recognition Python庫訪問。然而,Dlib的準確性和性能在upsampling參數(shù)上有很強的權衡。當上采樣次數(shù)設置為0時,模型速度更快但準確性較低。

無上采樣

上采樣=1

Dlib模型的準確性隨著進一步的上采樣而增加,但任何高于上采樣=1的值都會導致我的腳本崩潰,因為它超出了我的GPU內存(順便說一下,我的內存是11GB)。

Dlib的準確性相對于其(缺乏)速度來說有些令人失望。然而,它在最小化假陽性方面表現(xiàn)非常好,這是我的優(yōu)先事項。面部檢測是我面部識別流水線的第一部分,因此最小化假陽性數(shù)量將有助于減少下游的錯誤。為了進一步減少假陽性數(shù)量,我們可以使用Dlib的置信度輸出來過濾低置信度的樣本。

假陽性和真陽性之間的置信度差異很大,我們可以利用這一點來過濾前者。我們可以查看置信度分布來選擇一個更精確的閾值,而不是選擇一個任意的閾值。

95%的置信度值在0.78以上,因此排除低于該值的所有內容可以將假陽性數(shù)量減少一半。

雖然通過置信度過濾減少了假陽性數(shù)量,但并沒有提高整體準確性。我會考慮在最小化假陽性數(shù)量是主要關注點時使用Dlib。但除此之外,Dlib在準確性上并沒有比YuNet大幅增加,無法證明其更高的處理時間是合理的;至少對我的用途來說是這樣。

OpenCV DNN 

OpenCV面部檢測模型的主要吸引力在于其速度。然而,其準確性令人失望。雖然與其他GPU模型相比,它速度非??欤词故荰op 1準確性也僅略好于YuNet的整體準確性。我不清楚在什么情況下我會選擇OpenCV模型進行面部檢測,尤其是因為它很難正常工作。

Pytorch-MCNN 

MTCNN模型的表現(xiàn)也很差。盡管它的準確性略高于OpenCV模型,但速度要慢得多。由于其準確性低于YuNet,沒有 compelling reason to select MTCNN。

RetinaFace 

RetinaFace以其作為開源面部檢測模型中最準確的聲譽而聞名。測試結果支持了這一聲譽。

它不僅是最準確的模型,而且許多“錯誤”實際上并不是實際錯誤。RetinaFace真的測試了“假陽性”這個類別,因為它檢測到了一些我沒有看到的面部,沒有標注的因為我認為它們太難了,或者沒有考慮是“面部”。

它在這張《Seinfeld》片段中的鏡子中檢測到了部分面部。

它在《Modern Family》的背景圖像中找到了面部。

它在識別人臉方面如此出色,以至于找到了非人臉。

學習到RetinaFace并不算太慢是一個驚喜。雖然它不如YuNet或OpenCV快,但與MTCNN相當。雖然它在低分辨率下比MTCNN慢,但它擴展得相對較好,可以同樣快速地處理更高分辨率。RetinaFace擊敗了Dlib(至少在需要上采樣時)。它比YuNet慢得多,但準確性顯著提高。

通過過濾掉較小的面部,可以排除RetinaFace識別的許多“假陽性”。如果我們刪除最低四分位的面部,假陽性率會大幅下降。

最低四分位的邊界是0.0035

雖然RetinaFace非常準確,但其錯誤確實有特定的偏差。雖然RetinaFace容易識別小面部,但它在檢測較大、部分遮擋的面部時存在困難,這在查看面部尺寸相對于準確性時尤為明顯。

這對我的用途來說可能是個問題,因為圖像中面部的大小與其重要性密切相關。因此,RetinaFace可能會錯過最重要的情況,例如以下示例。

RetinaFace未能檢測到這張圖像中的面部,但YuNet做到了。

結論 

根據(jù)我的測試(我想強調這些測試并不是世界上最嚴格的測試;所以要保留一點懷疑態(tài)度),我只會考慮使用YuNet或RetinaFace,具體取決于我的主要關注點是速度還是準確性??赡茉谖医^對想要最小化假陽性數(shù)量時會考慮使用Dlib,但對于我的項目來說,只能選擇YuNet或RetinaFace。

完整的項目代碼在這里:https://github.com/astaileyyoung/CineFace

責任編輯:趙寧寧 來源: 小白玩轉Python
相關推薦

2010-12-28 11:17:50

chkrootkitrootkit檢測器

2022-04-05 20:54:21

OpenCVPython人臉檢測

2020-09-22 20:14:51

人工智能

2024-06-18 10:20:00

YOLO目標檢測

2024-07-24 10:12:47

2022-03-11 10:18:04

Meta死鎖Android

2024-01-15 14:03:00

2018-05-08 14:25:22

Pythondlib人臉檢測

2024-08-26 08:16:13

2023-07-26 09:00:00

人工智能AI檢測

2010-12-24 10:26:19

2023-10-23 12:05:17

2010-12-22 21:52:12

rkhunter

2024-03-19 11:52:28

2009-04-01 22:10:55

2014-01-09 09:42:56

Python語言檢測器

2009-03-25 15:21:17

2024-08-01 09:00:00

目標檢測端到端

2024-12-13 09:17:45

2014-04-16 14:00:01

墨跡空氣檢測器曝光
點贊
收藏

51CTO技術棧公眾號