Github推薦一個國內牛人開發的超輕量級通用人臉檢測模型


Ultra-Light-Fast-Generic-Face-Detector-1MB

1MB輕量級通用人臉檢測模型

 

Github推薦一個國內牛人開發的超輕量級通用人臉檢測模型

 

 

 

作者表示該模型設計是為了邊緣計算設備以及低功耗設備(如arm)設計的實時超輕量級通用人臉檢測模型。它可以用於arm等低功耗計算設備,實現實時的通用場景人臉。

檢測推理同樣適用於移動終端或pc機。

作者加入widerface測試代碼,完善部分測試數據及添加MNN、NCNN C++推理代碼等。

  • 從模型大小來看,默認的fp32精度(.pth)文件大小為1.04~1.1MB,推理幀int8約為300KB。
  • 在模型計算中,320x240的輸入分辨率約為90~109mflops。
  • 該模型有兩個版本,版本slim(簡化速度稍快)、版本rfb(帶有修改后的rfb模塊,精度更高)。
  • 提供使用320x240和640x480不同輸入分辨率的Widerface培訓的預培訓模型,以便更好地在不同的應用場景中工作。
  • 支持onxx導出,易於移植推理。

 

作者測試過PC運行環境

  • Ubuntu16.04、Ubuntu18.04、Windows 10(inference)
  • Python3.6
  • Pytorch1.2
  • CUDA10.0 + CUDNN7.6

 

我們來看下速度、精度和模型大小對比數據

訓練集是使用Retinaface提供的清潔過的Wideface標記以及Wideface數據集生成的,以生成VOC訓練集(PS:以下測試結果由我本人測試,結果可能有所不同)。

Widerface測試情況

寬面測試集中的測試精度(單標度輸入分辨率:320*240)

模型Easy SetMedium SetHard Setlibfacedetection v1(caffe)0.650.50.233libfacedetection v2(caffe)0.7140.5850.306官方 Retinaface-Mobilenet-0.25 (Mxnet)0.7450.5530.232version-slim0.7650.6620.385version-RFB0.7840.6880.418

 

寬面測試集中的測試精度(單刻度輸入分辨率:VGA 640*480)

模型Easy SetMedium SetHard Setlibfacedetection v1(caffe)0.7410.6830.421libfacedetection v2(caffe)0.7730.7180.485官方 Retinaface-Mobilenet-0.25 (Mxnet)0.8790.8070.481version-slim0.7570.7210.511version-RFB0.8510.810.541

 

看看在樹莓派推理速度

樹莓pi 4b mnn推理測試時間(ms)(arm/a72x4/1.5ghz/輸入分辨率:320x240/int8量化)

模型1核2核3核4核libfacedetection v12816129.7官方 Retinaface-Mobilenet-0.25 (Mxnet)462518.515version-slim2916129.5version-RFB3519.614.811

我們來看看模型大小數據比較

幾種主流開源輕量級人臉檢測模型的大小比較:

模型模型文件大小(MB)libfacedetection v1(caffe)2.58libfacedetection v2(caffe)3.34官方 Retinaface-Mobilenet-0.25 (Mxnet)1.68version-slim1.04version-RFB1.11

 

生成voc格式的訓練數據集和訓練流程

一、下載wideface官方網站數據集或下載我提供的培訓集並將其提取到./data文件夾:

(1)過濾掉10px*10px面后干凈的wideface數據壓縮包

(2)完整的未過濾小面寬面數據壓縮包

(注:如果下載上述(1)中的過濾包,則無需執行此步驟)

二、由於寬空間中有許多小而不清晰的面,不利於有效模型的收斂,因此需要進行過濾。訓練時,默認值是過濾10像素x 10像素的臉大小。

運行./data/wide_face_2_voc_add_landmark.py

python3 ./data/wider_face_2_voc_add_landmark.py

程序運行並完成后,將在./data目錄中生成更寬的

“u face_add_lm_10_10”文件夾。解壓后文件夾數據和數據包(1)相同。完整的目錄結構如下:

 data/
retinaface_labels/
test/
train/
val/
wider_face/
WIDER_test/
WIDER_train/
WIDER_val/
wider_face_add_lm_10_10/
Annotations/
ImageSets/
JPEGImages/
wider_face_2_voc_add_landmark.py

 

三、VOC訓練集已准備就緒,在項目的根目錄中有兩個腳本

train_mb_tiny_fd.sh和train_mb_tiny_rfb_fd.sh。

四、前者用於訓練slim版本模型,后者用於訓練rfb版本模型。已設置默認參數。有關微調,請參閱./train.py中每個訓練超參數的說明。

運行train_mb_tiny_fd.sh和train_mb_tiny_rfb_fd.sh

sh train_mb_tiny_fd.sh 或者 sh train_mb_tiny_RFB_fd.sh

 

我們來看看幾張分辨率為640*480的人臉檢測效果圖:

 

Github推薦一個國內牛人開發的超輕量級通用人臉檢測模型

 

 

Github推薦一個國內牛人開發的超輕量級通用人臉檢測模型

 

 

Github推薦一個國內牛人開發的超輕量級通用人臉檢測模型

 

 

  • 如果實際的生產場景是中距離、大面和小面,建議使用輸入尺寸輸入尺寸:320(320x240)分辨率訓練,並使用320x240圖像尺寸輸入進行預測推理,例如使用提供的預訓練模型。用於推理的mb_tiny_rfb_fd_train_320.pth輸入。
  • 如果實際的生產場景是中長距離、小面和大量面,建議:
  • (1)最優:輸入大小輸入大小:640(640x480)分辨率訓練,並使用相同或更大的輸入大小進行預測推理,如使用提供的訓練前模型mb_tiny_rfb_fd_train_640.pth進行推理,誤報率更低。
  • (2)次優:輸入大小輸入大小:320(320x240)分辨率訓練,並使用480x360或640x480大小輸入進行預測推理,對小臉更敏感,誤報會增加。

 

  • 每個場景的最佳結果都需要調整輸入分辨率,以便在速度和精度之間取得平衡。
  • 過大的輸入分辨率會提高小人臉的召回率,但也會增加大、近距離人臉的誤報率,推理速度會成倍增加。
  • 輸入分辨率過小會顯著加快推理速度,但會大大降低小人臉的召回率。
  • 制作場景的輸入分辨率應盡量與模型訓練的輸入分辨率一致,上下浮動不宜過大。

相關數據集及代碼大家可以在Github上找得到。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM