把照片交给机器,机器会回一个数字,28岁、36岁、44岁……有的时候很准确,有的时候却离谱得很。荒唐到了把二十岁的年纪当成四十年代的年纪。把猫当成大人来对待,把雕像当作活着的人来对待。

这并不是算命、也不是看面相。后面有一套算法在工作。

人的脸部会随着年龄的增长而逐渐衰老,并且有一定的规律性。二十岁的皮肤很紧致,三十岁时眼角出现皱纹,四十岁时法令纹显现出来,五十岁时眼皮下垂,六十岁时脖子变松弛。这些变化并不是偶然发生的。胶原蛋白流失的速度是可以预测的。脂肪垫位移轨迹可以被跟踪到。人的颅骨在成年之后基本上就固定了。软组织一年比一年多一点。

算法就是研究如何用计算机来解决问题的一门学科。

照片识别年龄

训练数据量级会限制识别精度上限。一百万个脸。一千万个人脸,给每个人标注上年龄标签,然后把这些人脸和年龄标签一起扔到神经网络中去。神经网络会自动找出其中的规律来。不用别人告诉它是鱼尾纹。它本身就会发现眼角处的像素分布和人的年龄有很大的关系。鼻唇沟越深就表示人的年龄越大。下颌线清晰度和年龄呈负相关的关系。

输入一张新的照片。网络把人脸分割成了很多小块。每个区块提取特征,比如眼睛周围的纹理密度、额头反射的程度、脸颊下垂的角度等等。

把很多个特征放在一起。拼出一个数字。

但是照片本身的变化很大。

光的角度有很大的影响。顶光可以加深法令纹,而侧光则会突出颧骨。正面柔光可以使皮肤变得光滑细腻,但是不同的人在不同的光线之下,可能会相差十几岁。前置摄像头和后置摄像头是不一样的。广角畸变使脸部变宽;长焦镜头可以压缩物体的空间距离,从而增加画面的纵深感。美颜算法会直接去掉图片中的纹理信息。算法对一张磨皮之后的脸只能瞎猜。

表情干扰识别。大笑挤出眼袋。抿嘴拉长下巴。仰头消除双下巴。低头挤出双下巴。戴眼镜挡住关键区域。帽子遮住发际线。口罩遮住一半特征点。化妆更是重灾区。粉底可以填补毛孔,阴影可以塑造轮廓,高光可以提升凹陷处,整个过程下来,特征全部混乱了。

照片识别年龄

算法对于不同的人种进行识别时存在的偏见是客观存在的。训练数据中如果有八成都来自东亚的脸部特征。遇到非洲人的脸就抓狂了,遇到南亚人的脸也是抓狂。肤色不同、面部结构不同、衰老速度不同。白种人的皱纹来得比较早。黑人的皮肤弹性可以维持很久。亚洲人的脸部脂肪比较厚重。不同的种族老化的进程并不是简单的平移。用一个标准来要求所有的人都是一样的。所以自然会飘。

小孩子、老年人容易把对方弄错。小孩子脸上的变化很快,三个月就一样了。算法见到过的一岁孩子脸还不够多。就认不准。老人的脸已经到了变化的尾声。80岁与90岁的区别主要是皮肤质地不同。纹路更多更密。但是特征空间已经被过度重合了。难度指数提高,区分度也变大了。

技术路线也一直在更新换代中。

最早的使用的是传统的机器学习方法。人工设计特征。Gabor滤波器提取纹理。LBP算子可以提取出局部特征。HOG特征抓形状。手工特征稳定,但是天花板很低。

之后卷积神经网络就进来了。不用人工去设计特征,直接端到端地学习。比如VGG、ResNet等模型都可以实现这一点。EfficientNet。模型越深,抽象能力就越强。DEX算法将年龄回归的问题转化为分类问题。把年龄分成一千种情况,效果要比直接回到稳定的状况好得多。由于年龄并不是一个连续变量。它是离散标量。

目前主流的方法就是用人脸识别模型的特征来进行迁移学习。人脸识别模型可以识别出人脸上的五官位置了。看脸部结构。底层特征也和年龄识别有关。节省了大量的训练费用。使用预训练模型进行微调。几万个标注了人脸的数据就可以得到好的结果。

但是照片年龄识别其实是一种概率推断,并不是精确测量。算法所得到的最大似然估计就是算法给出的年龄。不是测量出来的数据,而是根据自己的想法得出的数据。它会猜测出你是和它见过的一堆三十大龄人的任何一个相似。误差在正负三岁之内为优秀。正负五岁属于正常的范围,而相差十岁以上的情况并不罕见。

应用场景很多,但是并没有宣传得那么神奇。

手机相册按照年龄来分类。大致可以分为青年、中年、老年几个阶段。够用。商场的显示屏会显示来往顾客的人数以及他们的年龄段。今天的客人主要是哪个年龄层的人呢?调整广告内容,安防系统进行年龄筛选,并且辅助缩小范围。社交平台上也做了年龄验证来防止孩子绕过限制。但是这些都是不准确的识别。属于不明确的分类。

最难的就是跨年龄识别了。拿出二十多年前的老照片去见现在的自己。骨结构的变化不大,但是软组织却有很大的改变。算法并没有学习到这个人的衰老过程。只能用颅骨的比例来硬配。准确率突然下降。

另外还有伦理边界的考虑。照片年龄数据就是生物特征信息的一种。和指纹、虹膜一样,由谁来采集、存储和使用以及怎样进行授权都取决于某个人。未成年人的照片怎样才能得到有效的保护?老人的照片如何避免被滥用。法规仍然在追赶技术。

最后要说的是一个很实在的话。人的年纪也很难准确判断。同一个体,在熬夜之前和之后相差五岁,在锻炼前后的差距则为十岁。好的情绪和不好的情绪都写在了脸上。机器不会带有偏见。不会因为发型显得很老而多想五年。不会因为穿得很年轻就减少猜测十年。它只会按照像素规律来判断。

机器识别的天花板就是它只能看到一个画面。人的衰老是一个持续的过程。动态过程。一张照片缺少了时间上的信息。就比如用一张水位线的照片来推测整条河流的流量一样。可以猜测一下大致的情况,但是不太准确。

这件事其实就是一个概率的游戏。算法用的是一个最接近的那个数字。大多数情况下是胜负各半。