快捷搜索: 王者荣耀 脱发

人脸关键点检测face_landmark

不经意间瞄了一眼日历,惊觉2020年已所剩无几,回望即将过去的一年,不禁感叹唏嘘。时光带走了很多的烦恼和美好,也带来了很多困惑和收获。怎样才能不被淹没在时间的洪流里呢,唯有在风浪中保持清醒和方向,而不断地学习和输出就是那支驾驭风浪的桨。

从系统设计一头扎进算法的漩涡,经过了一阵子的蒙圈,然后一点一点摸索着理清思路和方向。在知识爆炸的时代,最好的积累就是把每一步记录下来,变成自己的脚印。前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家,感兴趣的朋友可以去了解一下。

前些天调研了人脸检测算法,这几天在做人脸关键点定位和人脸对齐。在网上找了一个开源的人脸对齐项目,本地做了适当适配后验证OK,本篇就单纯记录这个对齐算法的实现。

项目地址:

该项目基于Tensorflow2.0,比较简单灵活。下面是一些Demo图片:

项目运行环境:

    tensorflow2.0 tensorpack (for data provider) opencv python 3.6

数据集:

训练使用的是300W的数据集,数据集地址:

该数据集涵盖了大量变化的人脸数据,包括不同的主题、姿势、光照、遮挡等,数据集采用68点标注,如下:

数据按照如下格式存放:

├── 300VW
│   ├── 001_annot
│   ├── 002_annot
│       ....
├── 300W
│   ├── 01_Indoor
│   └── 02_Outdoor
├── AFW
│   └── afw
├── HELEN
│   ├── testset
│   └── trainset
├── IBUG
│   └── ibug
├── LFPW
│   ├── testset
│   └── trainset

训练

如果想要训练自己的模型,下载完数据集后,需要首先运行如下命令来生成训练和验证的JSON文件:

python make_json.py

需要注意的是,make_json.py文件中,需要正确配置数据集的路径,否则无法生成正确的train.json和val.json。

data_dir=300W      ########points to your director,300w

完成以上步骤后,运行如下命令进行模型训练:

python train.py

默认情况下,会使用ShuffleNetV2_1.0进行训练,如果想要修改网络,可在train_config.py文件中的如下位置进行配置:

模型使用Demo

可使用训练出来的模型进行推理,如果不想自己训练,也可以直接下载已训练好的模型: (提取码:rt7p)

运行如下命令行进行Demo测试:

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

其中,./model/keypoints是模型的存放位置,模型存放格式如下:

./model/
  └── keypoints
      ├── saved_model.pb
      └── variables
          ├── variables.data-00000-of-00002
          ├── variables.data-00001-of-00002
          └── variables.index

也可以先将模型转换为tflite格式,然后使用tflite模型进行推理。模型转换命令:

python ./tools/convert_to_tflite.py

tflite模型推理命令:

python vis.py --model ./model/converted_model.tflite

下面是使用下载下来的模型的一些Demo结果:

经验分享 程序员 微信小程序 职场和发展