不经意间瞄了一眼日历,惊觉2020年已所剩无几,回望即将过去的一年,不禁感叹唏嘘。时光带走了很多的烦恼和美好,也带来了很多困惑和收获。怎样才能不被淹没在时间的洪流里呢,唯有在风浪中保持清醒和方向,而不断地学习和输出就是那支驾驭风浪的桨。
从系统设计一头扎进算法的漩涡,经过了一阵子的蒙圈,然后一点一点摸索着理清思路和方向。在知识爆炸的时代,最好的积累就是把每一步记录下来,变成自己的脚印。前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家,感兴趣的朋友可以去这里了解一下。
前些天调研了人脸检测算法,这几天在做人脸关键点定位和人脸对齐。在网上找了一个开源的人脸对齐项目,本地做了适当适配后验证OK,本篇就单纯记录这个对齐算法的实现。
项目地址:https://github.com/610265158/face_landmark
该项目基于Tensorflow2.0,比较简单灵活。下面是一些Demo图片:
项目运行环境:
- tensorflow2.0
- tensorpack (for data provider)
- opencv
- python 3.6
数据集:
训练使用的是300W的数据集,数据集地址:i·bug - resources - Facial point annotations
该数据集涵盖了大量变化的人脸数据,包括不同的主题、姿势、光照、遮挡等,数据集采用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
可使用训练出来的模型进行推理,如果不想自己训练,也可以直接下载已训练好的模型:model (提取码: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结果: