前面有测试过基于 caffe 的性别和年龄估计 - 论文阅读 - 基于CNN的年龄和性别分类 这里学习下 Github 中基于 Tensorflow 的性别和年龄估计.
Github - Age-Gender-Estimate-TF 路径
该实现采用 Tensorflow 来实现性别和人脸年龄估计.
- 首先采用 dlib 对图片进行人脸检测与人脸对齐.
- 然后, 采用深度 CNN 来估计年龄和性别.
该实现可以一次性估计图片中多个人脸. 如:
<h2>1. 依赖环境</h2>
- CentOS7, Python2.7.14 (Python3 可能存在 Bug)
- tensorflow==1.4
- dlib==19.7.99
- cv2
- matplotlib==2.1.0
- imutils==0.4.3
- numpy==1.13.3
- pandas==0.20.3
<h2>2 数据集准备</h2>
/path/to/project/data/imdb_crop/00/somepictures
/path/to/project/data/imdb_crop/01/somepictures
....
/path/to/project/data/imdb_crop/99/somepictures
- 制作 tfrecords 数据集: 运行以下 python 脚本, 可将图片转化为 tfrecords.
python convert_to_records_multiCPU.py --imdb --nworks 8
<p>--imdb - 使用 imdb 格式数据集 --nworks 8 - 采用 8 个 CPU 核来并行地转化数据集. 由于需要先对图片中人脸进行检测和对齐, 非常耗时. 所以推荐多 CPU 核并行计算. 32 cores 的 Intel E5-2667 v4 耗时接近 50 分钟.
<h2>3 模型训练</h2>
将图片转化为 tfrecords 后, 可以得到类似于下面的路径:
/path/to/project/data/train/train-000.tfrecords
......
/path/to/project/data/test/test-000.tfrecords
这里采用 FaceNet 网络结构, 其基于 inception-resnet-v1 提取特征.
采用 facenet 中预训练模型, 来加速网络训练.
为了将预训练模型适用于这里, 对预训练模型进行了转换.
可以从下面下载转化后的预训练 facenet 断点权重.(可选, 也可以从零开始网络训练)
[1] - mega.nz
或
[2] - BaiduPan
解压得到:
/path/to/project/models/checkpoint
/path/to/project/models/model.ckpt-0.data-00000-of-00001
/path/to/project/models/model.ckpt-0.index
/path/to/project/models/model.ckpt-0.meta
- 开始模型训练
python train.py --lr 1e-3 --weight_decay 1e-5 --epoch 6 --batch_size 128 --keep_prob 0.8 --cuda
--cuda - 采用 GPU 训练模型
- 采用 tensorboard 可视化训练
tensorboard --logdir=./train_log
<h2>4 模型测试</h2>
- 测试得到的所有训练模型:
python test.py --images "./data/test" --model_path "./models" --batch_size 128 --choose_best --cuda
--cuda - 采用 GPU 进行测试 --choose_best - 测试所有的训练模型,并返回最佳模型.
- 仅测试得到的最新的训练模型:
python test.py --images "./data/test" --model_path "./models" --batch_size 128 --cuda
- 在图片上测试得到的模型
python eval.py --I "./demo/demo.jpg" --M "./models/" --font_scale 1 --thickness 1
--I - 测试图片路径 --font_scale 1 --thickness 1 - 表示当图片中的文本标签过小或过大时, 来调整文本大小和宽度.
作者也提供了训练好的模型以供下载, 用于测试.
[BestModel - BaiduPan]
- 对来自 Web Cam 的图片测试模型: 预训练模型: [Demo - mega.nz] [Demo - BaiduPan]
为了得到源自 Web Cam 的图片, 在运行 demo.py 时, 可能需要卸载 cv2, 并重新进行 Source 安装.
python demo.py
<h2>Reference</h2>
[1] - Face Alignment with OpenCV and Python
[2] - davidsandberg/facenet
[3] - IMDB-WIKI – 500k+ face images with age and gender labels
[4] - Dex: Deep expectation of apparent age from a single image - ICCV2015
[5] - [Deep expectation of real and apparent age from a single image without facial landmarks - IJCV2016]