心情
最近比较郁闷,自己的小论文已经投了快8个月了,从去年的AAAI,CVPR,到现在在审的TCSVT,AAAI由于页数超限被拒,CVPR因为一个正面和2个负面评价被拒,TCSVT还前途未卜,真的很郁闷。心情不好,论文也不太想看,撸撸代码放松一下心情。写了一个性别年龄识别器玩玩。
具体步骤
- 从网上收集一些关于性别人脸数据集(8000张)和关于年龄的人脸数据集(10000张),
- 采用inception_v3网络,对于分类网络,我修改最后的连接层的输出单元个数;对于回归网络,我在inception_v3网络结构上增加了一层深度可分离卷积(Conv2d_depth_wise),其实也不太清楚有什么用,就想试着修改一下原有的经典网络,加载原有的预训练权重。采用交叉熵损失函数用于分类网络(性别分类),采用SmoothL1Loss用于回归网络(年龄预测),均采用Adam优化器。
- 编写数据加载器,图像预处理等。
- 进行网络训练,同时进行验证
- 实现简单的应用;使用本地摄像头采集图像数据,通过facenet_pytorch 或者opencv的人脸级联器来实现人脸检测,我这里使用facenet_pytorch, 检测到的人脸图像送入训练好的网络中进行推理,得到推理结果(权重分布),通过softmax获得其概率分布,当概率大于阈值(0.7),识别正确,最后将识别结果和图像一同显示出来。
效果图
靠脸来预测年龄,其实是很荒谬的,但是它可以预测脸部肌肤的活力程度,性别预测还算靠谱吧,大多数情况下是可以识别出来的。
源代码地址
https://github.com/justDoIt1314/SiameseNetForFace