人脸关键点检测
update
最近闲下来了,准备维护一下好久不维护的仓库,之前代码都是基于tensorflow 来做的,最近几年时间都在用pytorch来做工作,有一些新的想法,一块加入进去。一共有以下几点更新:
- 人脸检测使用了其他开源的模型 Ultra-Light-Fast-Generic-Face-Detector-1MB
- 合并了训练代码到仓库里
- 更新模型为WFLW 98点
- 在关键点的训练中加入了蒸馏训练
- 使用了半精度训练大大加快训练速度
- 推理的demo 使用mnn的模型,推理的代码更简洁一些
- backbone 使用了mobilenetv3
- 能够比较好的响应眼睛的点位,可以参看demo
2d人脸关键点检测目前已经属于解决的比较好的问题了。也是落地的相对比较好的项目之一。
学术上广泛使用的数据集是300W 以及300VW, 为68个关键点。商业化应用的是各厂商自己标注的大规模数据集,肯定表现要更好。
source :github
预训练模型:仓库的pretrained 目录下
本文主要给大家一个思路,如何做一个表现相对稳定的人脸关键点检测算法。效果可以见下图demo。
demo
Metric
WLFW test set.
model | NME | model size (int8 weights) |
---|---|---|
Student | 5.03 | 2.0M |
Teacher | 4.65 | 7.5M |
结构
该文的实现,主要是使用wing loss,多任务学习以及基于头部姿态以及眼睛和嘴巴姿态的数据增强。
- 在数据集中,包括现实采集的数据普遍存在一个问题!正脸较多,睁眼以及闭嘴的数据较多,超过80%,这是典型的数据不平衡问题。
- 解决办法是在数据预处理阶段,对数据进行平衡,本文使用的方法是根据关键点计算眼睛和嘴巴的状态,和头部的姿态,并估计出所占数据集的比例,通过过采样的方式,扩充整个数据集。使得训练出的模型能够对不同的姿态,以及脸部的状态能有比较好的泛化能力。
- wing loss 能够更好针对脸部关键点的拟合问题,因为脸部关键点一般不存在离群点,对于loss比较小的采用比较强的惩罚会更加促进模型的拟合。
Train
训练的话,请在 TRAIN/face_landmark
这个目录下工作
主要的原理就是上个章节所叙述,具体实现可以去看代码。
1 下载数据 并在train_config.py 中指定好数据地址
2 bash run.sh
visualization
`python vis.py --model pks.pth
ps
Just mail me ? 2120140200@mail.nankai.edu.cn , for any question.
版权声明:本文为qq_35606924原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。