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上找得到。

原文地址:https://www.cnblogs.com/wuhh123/p/11697766.html