首頁>科技>

Ultra-Light-Fast-Generic-Face-Detector-1MB1MB輕量級通用人臉檢測模型

作者表示該模型設計是為了邊緣計算裝置以及低功耗裝置(如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.6Pytorch1.2CUDA10.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的人臉檢測效果圖:

如果實際的生產場景是中距離、大面和小面,建議使用輸入尺寸輸入尺寸: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上找得到。

最新評論
  • 整治雙十一購物亂象,國家再次出手!該跟這些套路說再見了
  • 今年的雙十一,將上演三國混戰