超超超轻量人脸检测和关键点识别算法

适用于移动端或者边缘计算的轻量人脸检测和关键点检测模型,模型仅仅1M多。主要基于RetinaFace结构简化,删除了前面几个大特征图上的Head,因此小目标的人脸检测可能会有影响,在一般应用场景下影响不大。

这里速度最快的是mobilenet_v2_0.1,效果如图:

WiderFace验证集测试

Models Easy Medium Hard Model Size
mobilenetv1_0.25 0.91718 0.79766 0.3592 1.6 M
mobilenetv2_0.1 0.85330 0.68946 0.2993 1.3 M
mobilenetv3_small 0.93419 0.83259 0.3850 2.8 M
efficientnet-b0 0.93167 0.81466 0.37020 16.4 M
mobilenetv2_0.1_lite 0.18020 0.097561 0.04066 254.9 k
mobilenetv2_0.1_lite_2fpn 0.20808 0.112657 0.04695 337.8 k
mobilenetv2_0.1_lite_3fpn 0.80379 0.716958 0.34924 426 k
mobilenetv2_0.1_lite_3pan 0.83309 0.77181 0.5301 643.7 k
mobilenetv2_0.1_lite_4pan 0.83965 0.791419 0.5964 813 k

最终使用Mobilenet+PANet实现了一个大小仅仅813k,效果还不错的人脸检测模型,效果如图:

训练数据

使用了带关键点的widerface数据集训练,链接:https://pan.baidu.com/share/init?surl=jIp9t30oYivrAvrgUgIoLQ (ruck)

模型训练

下载骨干网络权重:https://pan.baidu.com/s/1zhyL9ULuIi1KdtXzhSQ4yQ 提取码: urei

这里实验了四个轻量骨干网络mobilenetv1, mobilenetv2, mobilenetv3, efficientnetb0.

新建weights文件夹并放入上面下载的权重,结构如:

./weights/
      mobilenet0.25_Final.pth
      mobilenetV1X0.25_pretrain.tar
      efficientnetb0_face.pth
      mobilenetv3.pth
      mobilenetv2_0.1_face.pth
      ...

设置你的训练参数(e.g. batch_size, min_sizes and steps etc..) ,见配置文件data/config.py和train.py.

  CUDA_VISIBLE_DEVICES=0,1,2,3 python train.py --network mobilenetv1
  CUDA_VISIBLE_DEVICES=0 python train.py --network mobilenetv1

模型评估

python test_widerface.py --trained_model weight_file --network mobilenetv1(or mobilenetv2, mobilenetv3, efficientnetb0)

然后

cd ./widerface_evaluate
python setup.py build_ext --inplace
python evaluation.py

完整项目代码

见我的github: https://github.com/midasklr/LightWeightFaceDetector

Android部署

https://blog.csdn.net/IEEE_FELLOW/article/details/108420007

人脸识别

https://blog.csdn.net/IEEE_FELLOW/article/details/108438428

Guess you like

Origin blog.csdn.net/IEEE_FELLOW/article/details/108184760