GitHub |
您所在的位置:网站首页 › nice图像 › GitHub |
【Demo】基于CNN实现对人脸的性别和年龄预测(2023.10.10 更新)
更新说明 2023.10.10
特征提取主干由 ResNet50 替换为 Swin-Small, 性别和年龄预测分支由少量卷积替换为 MLP
性别预测比较准确, 年龄预测误差较大, 原因及解决思路下面单独说明
更新了 README 中的说明
权重文件欢迎移步 Release 页面下载
更新说明 2022.04.07
深度学习框架由 Keras 替换为 PyTorch
模型结构由少量的卷积层替换为成熟的 ResNet 作为主干,并将年龄预测和性别预测统一到一个模型中,采用双分支输出结构。
目前在验证集的性别预测准确率为 91%
实际体验差强人意,但与去年 5 月份的试水版本相比,效果会更好
【2022.4.22】模型权重已上传 click to download ,玩得愉快~
【2022.4.29】删除了代码仓库中的权重文件,如有需要,欢迎移步 Release 页面下载~
如何使用
训练, 离线评估, 在线推理 相关命令见 ./scripts/ 目录下的脚本
使用的 IMDB-WIKI(wiki_crop.tar) 数据集可由此下载; 该链接指向的数据集文件已经是 IMDB-WIKI 数据集团队官方按照人脸区域裁剪过的了, 因此不需要进一步裁剪, 详细说明可移步数据集主页
安装所需的第三方库 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
将 wiki_crop.tar 解压到任意目录下, 然后使用脚本 ./preprocess/prepare_dataset.py 来准备训练所需的相关文件
模型结构
性别预测分支使用交叉熵损失函数
年龄预测分支使用均方差损失函数
模型使用 timm 库实现 (https://github.com/huggingface/pytorch-image-models)
注: ResNet-50 已替换为 Swin-Small, Conv1 和 Conv2 已替换为 MLP. 训练加载了 timm库 提供的 ImageNet-21k 预训练权重 关于年龄预测误差过大的说明由于使用了完整的原始的 wiki_crop 数据集, 而从数据集主页可见下图: 该图曲线说明数据集中图片主体的年龄集中在 30 岁左右 (数据不均衡), 所以训练的模型 (更何况存在过拟合的模型) 会倾向于将年龄预测为该时间段。 解决思路为: 将年龄模型和性别模型分开,训练年龄模型时:对 30 岁左右的样本欠采样, 对剩余年龄段过采样 模型效果训练过程的记录, 从曲线上可以发现模型训练到后面显然已经过拟合了 :), 不过由于使用的权重保存策略是 val_loss 最低点, 所以无伤大雅 (不想重新训练一遍了) 这是对一张组合图像的处理结果(组合的四张图片选自 IMDB-WIKI 数据集的原始图像) 测试视频 剪辑自: https://www.di.ens.fr/~laptev/download/drinking.avi |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |