人脸关键点检测 face keypoint detect

人脸关键点检测

2d人脸关键点检测目前已经属于解决的比较好的问题了。也是落地的相对比较好的项目之一。
学术上广泛使用的数据集是300W 以及300VW, 为68个关键点。商业化应用的是各厂商自己标注的大规模数据集,肯定表现要更好。

source :github
预训练模型:

  • 百度网盘 (code rt7p)
  • google drive

tensorflow2.0 版本的已经release, 新tensorflow 对于学习更加友好,结构更清晰,如果仍然需要在tf1下工作,切换到tf1 分支,根据readme进行即可。

本文主要给大家一个思路,如何做一个表现相对稳定的人脸关键点检测算法。效果可以见下图demo。

demos

神仙姐姐和你的热巴
|||

video 视频链接
some samples, from 300W:
人脸关键点检测 face keypoint detect_第1张图片

结构

该文的实现,主要是使用wing loss,多任务学习以及基于头部姿态以及眼睛和嘴巴姿态的数据增强。

模型只使用了300w 和300vw的数据,没有额外的数据以及标注。

  • 在300w数据集中,包括现实采集的数据普遍存在一个问题!正脸较多,睁眼以及闭嘴的数据较多,超过80%,这是典型的数据不平衡问题
  • 解决办法是在数据预处理阶段,对数据进行平衡,本文使用的方法是根据关键点计算眼睛和嘴巴的状态,和头部的姿态,并估计出所占数据集的比例,通过过采样的方式,扩充整个数据集。使得训练出的模型能够对不同的姿态,以及脸部的状态能有比较好的泛化能力。
  • wing loss 能够更好针对脸部关键点的拟合问题,因为脸部关键点一般不存在离群点,对于loss比较小的采用比较强的惩罚会更加促进模型的拟合。

Train

主要的原理就是上个章节所叙述,具体实现可以去看代码。

  • 1.下载数据,
    下载300w和300vw的数据,并将300vw的视频解析为300w同样的格式,一张图片对应一个pts文件。更改make_txt.py中data_dir 指向的目录,run
    python make_json.py
    会产生train.json 和val.json

  • 2 run python train.py

visualization

python vis.py --model ./model/keypoints

ps

  1. 一般人脸关键点检测是人脸检测的后续步骤,检测算法可以参考
    dsfd-tensorflow
    faceboxes

  2. 后续计划整理一个更加完整的工程并持续维护,主要包括人脸检测以及人脸关键点。包括准确和性能trade off 的模型。同时也欢迎有新的意见,问题,或者有什么提升的手段都可以交流,
    just mail me [email protected]

你可能感兴趣的:(DL,face,algorithm,tensorflow2)