目錄
1、場景需求
人臉檢測可能是一個比較老的話題,你會發現網上有一大堆的state-of-art人臉檢測算法。但是本文關注的是輕量級的人臉檢測算法,主要的目的是將其應用到ARM等一些嵌入式設備中,在滿足性能的同時獲得實時的檢測速度。通過大量的篩選之後,你會發現真正適合於ARM端的人臉檢測算法屈指可數。下面就讓我們進入正題吧。
2、libfacedetection
2.1 相關鏈接
2.2 算法簡介
- 這是一個開放算法包,用於基於cnn 的圖像人臉檢測。cnn 模型已轉換爲c源文件中的靜態變量。源代碼不依賴於任何其他庫。你需要的只是一個C++編譯器。您可以在Windows、Linux、ARM 和任何平臺上編譯源代碼,並使用C++編譯器。
- SIMD指令用於加快檢測速度。如果使用Intel CPU 或Neon for ARM,則可以啓用AVX2。
2.3 算法效果展示
2.4 算法性能展示
上圖展示了部分該算法的檢測速度,640x480分辨率的圖片在CPU上使用多線程可以獲得81fps,基本上可以滿足現實場景中的一些需要。除此之外,該算法在Cortex-A53 (ARMv8) 64-bit SoC @ 1.4GHz上使用多線程後的運行時間爲174.89ms左右;如果使用ARM多核+NEON+INT8量化等有望達到實時的運行速度。
3、Ultra-Light-Fast-Generic-Face-Detector-1MB
3.1 相關鏈接
3.2 算法簡介
該模型是針對邊緣計算設備基於libfacedetection 替換壓縮網絡設計的輕
量人臉檢測模型。該模型具有以下的特點:
- 在模型大小上,默認FP32 精度下(.pth)文件大小爲1.04~1.1MB,推理框
架int8 量化後大小爲300KB 左右; - 在模型計算量上,320x240 的輸入分辨率下90~109 MFlops 左右;
- 模型有兩個版本,version-slim(主幹精簡速度略快),version-RFB(加入了
修改後的RFB 模塊,精度更高); - 提供320x240、640x480 不同輸入分辨率下使用widerface 訓練的預訓練模型,
更好的工作於不同的應用場景; - 支持onnx 導出,便於移植推理。
3.3 算法效果展示
3.4 算法性能展示
上圖展示了該算法的運行速度和模型大小。通過觀察,我們可以得出該算法模型大小僅有1M左右,小於libfacedetection算法;除此之外,320x240大小的輸入在ARM A72x4的設備上的運行時間是11ms左右,運行的速度大概是100fps,達到了實時性的要求。
4、BlazeFace
4.1 相關鏈接
4.2 算法簡介
BlazeFace,一種輕量級且性能良好的人臉檢測器,專門用於ARM GPU 推理。它在ARM設備上以 200–1000+fps 的速度運行。這種超實時性能使其能夠應用於任何需要精確的面部感興趣區域作爲任務特定模型(如 2d/3d 面部關鍵點或幾何估計、面部特徵或表情分類和麪部區域分割)增強現實等。我們的貢獻包括一個輕量級的特徵提取網絡,但不同於 MobileNetV1/V2,一個 基於SSD的GPU 友好的anchor機制,和一個改進的 分辨率策略替代NMS。
4.3 算法效果展示
4.4 算法性能展示
上圖展示了該算法的運行速度,通過觀察我們可以得出:1)改進的BlazeFace算法比原始的MobileNet-V2速度更快,大約提升了3倍左右;2)BlazeFace的檢測速度很快,在Huawei P20上面的運行時間是5.8ms。
5、FaceBoxes
5.1 相關鏈接
5.2 算法簡介
FaceBoxe是一種新的人臉檢測方法,稱之爲 FaceBoxe,它在速度和準確度上都具有優異的性能。此外,FaceBoxes 的檢測速度和人臉的個數無關。該算法在單核 CPU 上的運行速度是 20FPS,在 VGA 分辨率的 GPU 上面的速度是 125FPS。
5.3 算法效果展示
5.4 算法性能展示
上圖展示了FaceBoxe算法的性能。與MTCNN相比,該算法具有更高的mAP值;除此之外,該算法在E5-2660V3CPU上面可以獲得20fps的運行速度,如果採用OpenVIO進行優化加速之後,應該可以獲得更加驚豔的效果。
6、RetinaFace
6.1 相關鏈接
6.2 算法簡介
RetinaFace 是一種魯棒的單階段人臉檢測算法,該算法聯合外部監督和自監督的多任務學習來在不同尺度的人臉圖片上進行精確定位,通過使用輕量級骨幹網,RetinaFace 可以實時運行在單個 CPU 核上。
6.3 算法效果展示
6.4 算法性能展示
上圖展示了RetinaFace算法的性能。通過觀察我們可以發現,當使用MobileNet-v2作爲Backbones時,640x480的輸入圖片在ARM上的運行時間爲61.2ms,即運行的速度爲16fps,這個速度基本可以滿足某些場景的需要。
7、LFFD
7.1 相關鏈接
7.2 算法簡介
LFFD 是一種用於邊緣器件的輕量且快速的人臉檢測算法。LFFD 在準確度和時延上都有很大的平衡,不僅模型體積小,而且具有較快的推理速度,同時可以獲得較高的準度。在實際應用中,我們已經將其部署在雲和邊緣設備(如nvidia jetson 系列和基於ARM 的嵌入式系統)中。實際上,LFFD 是一個通用的檢測框架,適用於多個類型的檢測,如人臉檢測、行人檢測、頭部檢測、車輛檢測等。一般來說,長邊和短邊的平均比率小於5 的對象適合使用該算法進行檢測。
7.3 算法效果展示
7.4 算法性能展示
上圖展示了LFFD算法的性能。640x480的圖片輸入到ARM設備中,該算法的運行時間爲4114.15ms,和前面的幾個算法相比,這個算法的運行速度相對來說比較慢,我測試過該算法在Android設備上面的速度,還是可以滿足 一些對時間要求不是很苛刻的場景。
8、EagleEye
8.1 相關鏈接
8.2 算法簡介
EagleEye,在低功耗的設備上在速度和精度之間達到了很好的折衷。EagleEye 具有低的 FLOPS 的同時具有低的容量。論文中提出了五種策略來提升算法的速度和精度,主要包括卷積分解、設計了一個高效的上下文模塊,Focal loss 等。
8.3 算法效果展示
8.4 算法性能展示
上圖展示了EagleEye算法的性能。精度方面而言,該算法比MTCNN的mAP值高出了2個點;速度方面而言,640x480的輸入在ARM設備中的運行時間爲20fps,基本能夠滿足現實場景的需要;模型大小方面而言,該算法的模型參數爲0.23M,模型大小爲1M左右,內存佔用率爲13.9M。
參考資料
[1] libfacedetection
[2] Ultra-Light-Fast-Generic-Face-Detector-1MB
[3] blazeface
[4] FaceBoxes
[5] RetinaFace
[6] LFFD
[7] EagleEye
注意事項
[1] 該博客是本人原創博客,如果您對該博客感興趣,想要轉載該博客,請與我聯繫(qq郵箱:[email protected]),我會在第一時間回覆大家,謝謝大家的關注.
[2] 由於個人能力有限,該博客可能存在很多的問題,希望大家能夠提出改進意見。
[3] 如果您在閱讀本博客時遇到不理解的地方,希望您可以聯繫我,我會及時的回覆您,和您交流想法和意見,謝謝。
[4] 本文測試的圖片可以通過該鏈接進行下載。網盤鏈接- 提取碼:xh2i。
[5] 本人業餘時間承接各種本科畢設設計和各種小項目,包括圖像處理(數據挖掘、機器學習、深度學習等)、matlab仿真、python算法及仿真等,有需要的請加QQ:1575262785詳聊,備註“項目”!!!