人脸是个人重要的生物特征,业界很早就对人脸图像处理技术进行了研究。人脸图像处理包括人脸检测、人脸识别、人脸检索等。人脸检测是在输入图像中检测人脸的位置、大小;人脸识别是对人脸图像身份进行确认,人脸识别通常会先对人脸进行检测定位,再进行识别;人脸检索是根据输入的人脸图像,从图像库或视频库中检索包含该人脸的其它图像或视频。
传统人脸检测、识别在特征提取、精确度、可扩展性方面均有诸多不足,进入深度学习时代后,逐渐被深度学习技术所取代。
Social Face Classification(社交人脸分类,简称SFC)数据集是从一个流行的社交网络中收集的人脸数据集,包括440万张经过标记的人脸,来自4030人,每个人有800到1200张人脸图像,其中每个身份的最新5%的脸图像被排除在外进行测试。这是根据图像的时间戳来完成的,以模拟通过老化进行的连续识别。
Labeled Faces in the Wild(经标注的自然条件人脸,简称LFW)包含5749位名人的13323张网络照片,这些照片分为6000对人脸,分为10组。常用作无约束环境中进行人脸验证的基准数据集。
YouTube Faces(YTF)收集了1595个主题的3425个YouTube视频(LFW中名人的子集)。这些视频被分成5000个视频对和10个分割,用于评估视频级别的人脸验证在SFC中,人脸识别是由人来标记的,通常包含大约3%的错误。SFC数据集照片在图像质量、光线和表情方面的变化甚至比LFW和YTF中名人的网络图像更大,后者通常是由专业摄影师而不是智能手机拍摄的。
Large-scale CelebFaces Attributes (CelebA)数据集是由中国香港中文大学汤晓鸥教授实验室公布的大型人脸识别数据集。该数据集包含有200K张人脸图片,人脸属性有40多种,主要用于人脸属性的识别。
2015年由中国香港中文大学发布,包含32203张图像、393703张人脸,在面部的尺寸、姿势、遮挡、表情、妆容和光照上都有很大的变化,自发布后广泛应用于评估性能比传统方法更强大的卷积神经网络。
Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks(基于多任务级联卷积网络的联合人脸检测与对准,MTCNN),是一个优秀的人脸检测模型,该模型通过三个阶段精心设计的深度卷积网络,以粗略到精细的方式检测面部位置。
第一阶段:通过浅层CNN快速生成候选窗口。
第二阶段:通过更复杂的CNN拒绝大量非面部窗口来细化窗口。
第三阶段:使用更强大的CNN再次细化结果并输出五个面部标志位置。
MTCNN利用三项任务来训练CNN探测器:
① 面部分类。学习目标被制定为二类分类问题。 对于每个样本,使用交叉熵损失函数:
其中pip_ipi是网络产生的概率,表明样本是网络产生的概率,表明样本xix_ixi是一个人脸。 符号 yidet∈{0,1}y^{det}_i∈\{0,1\}yidet∈{0,1}表示真实标签。
② 边界框回归。对于每个候选窗口,我们预测它与最近的真实值之间的偏移(即边界框的左边,顶部,高度和宽度)。 学习目标被指定为回归问题,我们对每个样本使用欧几里德损失xix_ixi:
其中y^ibox\hat{y}_i^{box}y^ibox 是真实坐标。 有四个坐标,包括左上角,高度和宽度,因此yibox∈R4y^{box}_i∈ \mathbb{R}^4yibox∈R4.
③ 面部标记定位。类似于边界框回归任务,面部标记检测被公式化为回归问题,我们最小化欧几里德损失:
其中 y^ilandmark\hat{y}_i^{landmark}y^ilandmark是从网络获得的面部标记坐标,yilandmarky_i^{landmark}yilandmark是第i个样本的真实坐标。 有五个面部标志,包括左眼,右眼,鼻子,左嘴角和右嘴角,因此yilandmark∈R10y_i^{landmark} \in \mathbb{R}^1 0yilandmark∈R10.
④ 多源训练。由于在每个CNN中使用不同的任务,因此在学习过程中存在不同类型的训练图像,例如面部,非面部和部分对齐的面部。 在这种情况下,不使用一些损失函数(即,等式(1) - (3))。 例如,对于背景区域的样本,仅计算LidetL_i{det}Lidet,而另外两个损失设置为0.这可以直接使用样本类型指示符来实现。 然后整体学习目标可以表述为:
其中ܰN是训练样本的数量,aja_jaj表示任务重要性。 在P-Net和R-Net中使用(adet=1,abox=0.5,alandmark=0.5)(a_{det}=1,a_{box}=0.5,a_{landmark}=0.5)(adet=1,abox=0.5,alandmark=0.5),而在O-Net中使用(adet=1,abox=0.5,alandmark=1)(a_{det}=1,a_{box}=0.5,a_{landmark}=1)(adet=1,abox=0.5,alandmark=1)以获得更准确的面部标记本地化. βij∈{0,1}\beta_i^j \in\{0,1\}βij∈{0,1} 是样本类型指示器。
孪生网络(Siamese network)又称“连体网络”,有两个结构相同(两个网络可以是CNN,也可以是LSTM等),且共享权值的子网络。分别接受两个输入x1,x2x_1, x_2x1,x2,将其转换为某种向量Gw(x1),Gw(x2)G_w(x_1), G_w(x_2)Gw(x1),Gw(x2),再通过某种距离度量的方式计算两个输出向量的距离EwE_wEw.如下图所示:
"孪生网络"一词的由来:
十九世纪泰国出生了一对连体婴儿,当时的医学技术无法使两人分离出来,于是两人顽强地生活了一生,1829年被英国商人发现,进入马戏团,在全世界各地表演,1839年他们访问美国北卡罗莱那州后来成为“玲玲马戏团” 的台柱,最后成为美国公民。1843年4月13日跟英国一对姐妹结婚,恩生了10个小孩,昌生了12个,姐妹吵架时,兄弟就要轮流到每个老婆家住三天。1874年恩因肺病去世,另一位不久也去世,两人均于63岁离开人间。两人的肝至今仍保存在费城的马特博物馆内。从此之后“暹罗双胞胎”(Siamese twins)就成了连体人的代名词,也因为这对双胞胎让全世界都重视到这项特殊疾病。
孪生网络主要用于单样本或样本较少的模型训练,用于衡量两个输入数据的相似程度。孪生网络有两个输入(x1和x2x_1和x_2x1和x2),将两个输入到两个相同且权重共享的网络中,这两个网络分别将输入映射到新的空间,形成输入在新的空间中的表示。通过Loss的计算,评价两个输入的相似度。例如:
例如,在人脸比对中,如果输入的两幅人脸图像X1和X2X_1和X_2X1和X2为同一个人,那么映射到新的空间的两个向量距离足够小;反之,如果X1和X2X_1和X_2X1和X2不为同一个人,两个向量距离足够大。
孪生网络采用对比损失函数(contrastive loss),其表达式如下:
其中,DWD_WDW被定义为姐妹孪生网络的输出之间的欧氏距离。DWD_WDW欧式距离公式如下:
Triplet Network是Siamese Network的一种延伸,要解决的问题与Siamese Network的基本一致,主要用于单样本或样本较少的模型训练。与孪生网络不同的是,Triplet Network采用三个样本为一组:一个参考样本(也称为锚点样本),一个同类样本(正样本),一个异类样本(负样本)。Triplet Network网络将输入映射到某个特征空间中,使得参考样本与正样本距离足够小、与负样本足够大。
Triplet Network结构图如下所示:
DeepFace是Facebook研究人员推出的人脸验证模型,是深度学习技术应用于人脸识别的先驱。模型深度9层,超过1.2亿个参数。在LFW数据集上识别率达到97.25%,接近人类识别能力。
和大多数模型一样,DeepFace采用基准点检测器指导对齐过程。在该模型中,使用了一个相对简单的基准点检测器,经过多次迭代来优化输出。在每一次迭代中,通过训练支持向量回归器(SVR)从图像描述中预测点的结构来提取基准点。
对齐步骤:
DeepFace网络结构如下图所示:
以上三层主要提取底层特征,例如简单边沿、纹理。
DeepFace在LFW数据集上实验准确率与效果图ROC(Receiver Operating Characteristic)曲线如下所示:
DeepFace还在视频级人脸验证数据集上进行了进一步验证。YouTube视频帧的图像质量通常比网络照片差,主要是由于运动模糊或观看距离。为每对训练视频创建50对帧,每个视频一对,并根据视频训练对标记这些帧是否相同。DeepFace取得了91.4%的准确度,将先前的最佳方法的误差减少了50%以上。如下图所示:
单核Intel 2.2GHz CPU,DeepFace每幅图像运行0.33秒,包括图像解码、人脸检测和对齐、前馈网络和最终分类输出。
FaceNet是Google研究人员2015年推出的人脸识比对模型。其思想是将人脸照片转换为128-D的向量,判断向量之间的距离(差异),如果距离大于某个值,则认为不是同一个人的人脸图像;如果距离小于某个值,则认为是同一个人的人脸图像。
https://discover304.top/2021/ebooks/AI%E5%9B%BE%E4%B9%A6/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/img/FaceNet_%E5%9B%BE1.png
FaceNet模型结构如下图所示:
网络结构一:22层,140M(1.4亿)个参数,1.6B(16亿)次左右浮点运算
网络结构二:基于GoogLeNet的初始模型。参数量减少了约20倍(约为6.6M~7.5M),每个图像需要220M次浮点运算。
下表是不同压缩率的JPEG图像和不同分辨率图像的正确率: