人脸关键点检测
New update
最近优化了一下算法,有了比较大的改进,最后的结果也不错,在WFLW 上应该算是SOTA了,NME 3.95.
一. 几个优化点
- 思路取自目标检测.
- 损失函数,adaptive wing loss +wing loss.
- 代码也大概重构了一下子,采用onnxruntime 推理,模型转换也会更方便。
- 工程直接调用也更方便,pip install 就行
next step:
如果时间充分,可能再做一下其他数据集。
二. 简介
2d人脸关键点检测目前已经属于解决的比较好的问题了。也是落地的相对比较好的项目之一。
学术上广泛使用的数据集是300W 以及300VW, 为68个关键点。商业化应用的是各厂商自己标注的大规模数据集,肯定表现要更好。
预训练模型:仓库的pretrained 目录下
本文主要给大家一个思路,如何做一个表现相对稳定的人脸关键点检测算法。效果可以见下图demo。
demo
三. Metric
WLFW test set.
WFLW | NME | Flops(G) | Params(M) | Pose | Exp. | Ill. | Mu. | Occ. | Blur | pretrained |
---|---|---|---|---|---|---|---|---|---|---|
Student@128 | 4.80 | 0.35 | 3.25 | 8.53 | 5.00 | 4.61 | 4.81 | 5.80 | 5.36 | skps |
Teacher@128 | 4.17 | 1.38 | 11.53 | 7.14 | 4.32 | 4.01 | 4.03 | 4.98 | 4.68 | skps |
Student@256 | 4.35 | 1.39 | 3.25 | 7.53 | 4.52 | 4.16 | 4.21 | 5.34 | 4.93 | skps |
Teacher@256 | 3.95 | 5.53 | 11.53 | 7.00 | 4.00 | 3.81 | 3.78 | 4.85 | 4.54 | skps |
四. 结构
该文的实现,比较简单,思路取自目标检测。 heatmap 负责预测哪个grid 是正样本,另外一个head 预测具体的坐标。坐标采用anchor point 的方式encode, 这个方式可以很好的缓解量化误差的问题。
而且heatmap方式对比直接回归有更好的位置信息,对于坐标回归的方式,GAP这个操作还是很影响精度的。
而且heatmap 对于数据更高效,也不需要额外的数据采样进行扩充。思路更简单了。
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.