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

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

 

作者表示該模型設計是爲了邊緣計算設備以及低功耗設備(如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 Set Medium Set Hard Set
libfacedetection v1(caffe) 0.65 0.5 0.233
libfacedetection v2(caffe) 0.714 0.585 0.306
官方 Retinaface-Mobilenet-0.25 (Mxnet) 0.745 0.553 0.232
version-slim 0.765 0.662 0.385
version-RFB 0.784 0.688 0.418

 

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

模型 Easy Set Medium Set Hard Set
libfacedetection v1(caffe) 0.741 0.683 0.421
libfacedetection v2(caffe) 0.773 0.718 0.485
官方 Retinaface-Mobilenet-0.25 (Mxnet) 0.879 0.807 0.481
version-slim 0.757 0.721 0.511
version-RFB 0.851 0.81 0.541

 

看看在樹莓派推理速度

 

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

模型 1核 2核 3核 4核
libfacedetection v1 28 16 12 9.7
官方 Retinaface-Mobilenet-0.25 (Mxnet) 46 25 18.5 15
version-slim 29 16 12 9.5
version-RFB 35 19.6 14.8 11

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

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

模型 模型文件大小(MB)
libfacedetection v1(caffe) 2.58
libfacedetection v2(caffe) 3.34
官方 Retinaface-Mobilenet-0.25 (Mxnet) 1.68
version-slim 1.04
version-RFB 1.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的人臉檢測效果圖:

 

  • 如果實際的生產場景是中距離、大面和小面,建議使用輸入尺寸輸入尺寸: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大小輸入進行預測推理,對小臉更敏感,誤報會增加。

 

  • 每個場景的最佳結果都需要調整輸入分辨率,以便在速度和精度之間取得平衡。

  • 過大的輸入分辨率會提高小人臉的召回率,但也會增加大、近距離人臉的誤報率,推理速度會成倍增加。

  • 輸入分辨率過小會顯著加快推理速度,但會大大降低小人臉的召回率。

  • 製作場景的輸入分辨率應儘量與模型訓練的輸入分辨率一致,上下浮動不宜過大。

 

相關數據集論文源碼下載地址:關注“圖像算法”微信公衆號

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章