简介
通过PaddlePaddle框架复现了论文 Real-time Convolutional Neural Networks for Emotion and Gender Classification 中提出的两个模型,分别是SimpleCNN和MiniXception。利用 imdb_crop数据集训练模型,进行人脸性别分类,准确率均达到96%。
| 模型 | 准确率 | 输入尺寸 |
|---|---|---|
| SimpleCNN | 96.00% | (48, 48, 3) |
| MiniXception | 96.01% | (64, 64, 1) |
Requirements
scipy==1.2.1
paddlepaddle==2.1.2
numpy==1.20.1
opencv-python==3.4.10.37
pyyaml~=5.4.1
visualdl~=2.2.0
tqdm~=4.62.0
数据准备
我们在数据集imdb_crop (密码 mu2h)上训练模型,数据集也可以在这里下载。下载和解压数据后,不用对数据再做别的处理了,编辑配置文件conf.yaml和conf2.yaml,两者分别是SimpleCNN和MiniXception的配置文件,把 imdb_dir设置成数据集所在的目录。不用划分训练集和测试集,程序会自动划分,即使你不训练只测试。我们采取的数据集划分方式和论文作者的一样,先根据文件名对图片进行排序,前80%为训练集,后20%为测试集。
训练
在配置文件conf.yaml和conf2.yaml里进行相关配置,mode设置成train,其它选项根据个人情况配置。
执行脚本
python train_gender_classfifier.py path_to_conf
比如
python train_gender_classfifier.py ./conf.yaml
path_to_conf 是可选的,默认是 ./conf.yaml,即训练SimpleCNN。
测试
在配置文件conf.yaml和conf2.yaml里进行相关配置,mode设置成val,另外要配置model_state_dict和imdb_dir。训练和测试的imdb_dir是一样的,都是数据集解压后所在的目录,不用对数据进行任何修改。训练和测试的imdb_dir虽然一样,但是训练和测试取的是数据集的不同部分,在上文的数据准备中有提到数据集划分的方式。
执行脚本
python train_gender_classfifier.py path_to_conf
等结果就行了。
指标可视化
你可以通过 visuadl 可视化训练过程中指标(比如损失、准确率等)的变化。可以在配置文件里设置日志的输出目录log_dir,在训练的过程中,每个epoch的准确率、损失、学习率的信息会写到日志中,分train和val两个文件夹。
当要查看指标时,执行以下命令
visualdl --logdir your_logdir --host 127.0.0.1
your_logdir是你设置的日志目录。
然后在浏览器中访问
下面展示我们的模型的指标曲线图。



