适用于移动端或者边缘计算的轻量人脸检测和关键点检测模型,模型仅仅1M多。主要基于RetinaFace结构简化,删除了前面几个大特征图上的Head,因此小目标的人脸检测可能会有影响,在一般应用场景下影响不大。
这里速度最快的是mobilenet_v2_0.1,效果如图:
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
https://blog.csdn.net/IEEE_FELLOW/article/details/108420007
https://blog.csdn.net/IEEE_FELLOW/article/details/108438428