今天分享的是IJCAI2018关于年龄预测的一个工作,即基于人脸来预测人的年龄。具体工作是:SSR-Net: A Compact Soft Stagewise Regression Network for Age Estimation。
1.关于人脸
在图像识别领域里,人脸技术非常有代表性,达到了极高的精准度,并且应用最为广泛。人脸的基本问题包括人脸目标检测(即定位人脸的目标区域),人脸比对(比如人脸和证件照比对是否同一人),人脸属性(性别、年龄、颜值、是否戴眼镜),人脸关键点等。
年龄是人脸属性预测的一个topic。其基本流程是:
2.摘要:
论文的工作是一个年龄预测模型,它的输入是经过人脸检测得到的人脸目标框,输出是预测的年龄结果。其要点包括:
网络设计尽可能轻量化,满足端上应用的时效性要求。
用分类损失预测年龄的分段(bin),设计了一个可以平移和缩放的软分类目标。
效果:网络大小0.32M,小于主流的mobile-net和dense-net,效果比以上两者要好。
3. 论文工作:
论文首先探讨了年龄问题的4种损失函数及存在的问题:
1) 回归:样本的随机性和分布不均导致易过拟合。
2) 多年龄段分类:硬分类,分段边界处理不好。
3) 学习年龄分布:样本不好标记。
4) Pair-wise的学习:复杂度太高。
论文提出的改进方案是:
1) 多层分段。由粗到细策略,每个阶段执行部分年龄分类,任务量少(Stagewise),产生更少参数和更紧凑的模型。例如文中设计的3-stage,每个stage进行3分类,第三stage可以分出3*3*3=27个bin。因为采用软分类,所以每一个bin的区间不是固定值,而是有一定交叠的自适应值。
预测出的年龄阶段是融合各阶段的分布
其中每一个bin的宽度
, 这里i是bin的索引.
在训练时,最小化平均误差函数,这里
,年龄预测损失函数为:
2) 软分类,引入动态范围,让每个bin可以平移和缩放,且平移和缩放参数采用与input相关的自适应值,能通过网络进行学习。
具体的网络实现了一个3-stage的2-stream网络,网络设计非常紧凑。
2-stream是两个平行的异构网络,为了抽取异构特征(2-stream网络参数数量相同,激活函数和pooling方式不同)。
每个stage进行软分类的缩放和平移量,以及每阶段的预测分布p的产生方式如图b中所示。缩放系数是实数值,而平移量和预测分布是向量,因此做了不同的处理。
在最后的stage,模型的预测结果与真实值产生的误差,会进行梯度回传,同时软分类的参数也会一起得到更新。
4. 效果:
首先和较深的复杂网络结构(如VGG或res-net)相比,还是复杂模型的效果更好一些,但复杂模型大小一般在几百M,无法在端上应用。对比其他轻量级网络,主要是和Mobile-net, dense-net相比,模型更小(0.32M),效果更好。
局限性:人脸属性的主流解决方案中,一般可以用一个分类器同时优化多个人脸属性目标,所以底层选择mobile-net或dense-net更通用,SSR-net的网络结构和损失函数专门为年龄预测定制,通用性稍差一些。
5.项目代码和demo:
项目的github代码地址如下:https://github.com/shamangary/SSR-Net
代码中的Demo可以调用摄像头进行帧维度的实时预测,目标检测用的是LBP和MTCNN(可选,MTCNN效果更佳),支持对比mobile-net , dense-net的结果。代码简洁,非常容易跑通。
实测时发现,随着人脸的移动,预测数值波动比较大,同一个人上一秒预测24岁,下一秒可能是35岁。视角,距离,清晰度会对预测结果产生比较大的影响,也从另一个角度说明年龄预测很难做到非常精准。
另外作者还提供了针对亚洲人脸优化的一个model,即在Megaage-Asian数据集上重新训练的版本。具体地址为:
https://github.com/b02901145/SSR-Net_megaage-asian
网友评论