一个成熟的人脸识别系统通常由人脸检测、人脸最优照片选取、人脸对齐、特征提取、特征比对几个模块组成。
从应用场景看,人脸识别应用主要分为1:1和1:N。1:1就是判断两张照片是否为同一个人,主要用于鉴权。而1:N的应用,首先得注册N个ID的人脸照片,再判断一张新的人脸照片是否是某个ID或者不在注册ID中。1:1和1:N,其底层技术是相同的,区别在于后者的误识率会随着N的增大而增大,如果设置较高的相似度阈值,则会导致拒识率上升。拒识和误识二者不可兼得,所以评价人脸识别算法时常用的指标是误识率小于某个值时(例如0.1%)的拒识率。
人脸识别最为关键的技术点就是人脸的特征提取,直到2014年deepface首次将深度学习的引入,这项技术才得到了质的突破,使得人脸识别技术真正走到了商业可用阶段。目前的研究主要集中在网络结构的改进和损失函数的改进上。随着研究的深入,目前人脸识别技术上的壁垒正在被打破,而人脸数据库的资源是业内巨头保持领先的另一个重要武器。
MTCNN、RSA等基于深度学习的方法在人脸检测的任务中展现出了惊人的效果,对于遮挡、大角度的人脸变化、极端的光照情况都能较好的应对。
不同于学术界使用更复杂的网络来提高人脸检测在困难数据集上的精度,在实际商用场景中,更需要关注于人脸检测算法的实时性和对计算资源的消耗。因为检测出的低质量人脸照片对后续的人脸识别工作帮助甚微,而算法的性能优化却可以让人脸识别的应用场景大大增加。
举例以苏宁线下门店部署的高清摄像头为例,在购物高峰时段每分钟有几百人涌入门店,需要在一个画面中检测出20多个人脸并进行跟踪,这对算法提出了很高挑战。
考虑到苏宁人脸应用丰富的场景,光是线下门店就有几千家,为了降低服务成本,我们采用了“端+云”的解决方案。人脸检测、人脸跟踪、人脸最优照片选取的逻辑放在前端进行,而人脸的建模、人脸比对的服务放在中心服务器进行。同时为了进一步降低成本,通过与摄像头硬件厂商的深度合作,可以将人脸检测、人脸跟踪、人脸最优照采集的算法逻辑放在嵌入式设备,节省服务器的同时也提高了系统的稳定性。
图2 人脸识别服务系统架构
对于前端设备的选择,有很多因素要考虑,一个很大的误区是普通安防摄像头就可以满足人脸的采集。安防摄像头通常置于棚顶,一般距离地面都有2.7米以上,在行人经过最佳采集位置时很难采集到正脸,而且镜头分辨率较低,成像噪声大,即使采集到了人脸也无法满足人脸识别应用的需求。从识别的准确率考虑,通过实验发现要保证人脸识别的准确率,人脸照片中双眼瞳距之间要大于80个像素,这就意味着在选择摄像头时要充分考虑焦距和分辨率两个指标。
对于人脸最优照片采集,这更多的是一个工程化的工作,其对最终的产品表现也有很重要的影响。通常要考虑人脸的朝向、人脸的模糊程度、人脸的面部表情、是否存在遮挡等因素给采集的人脸图像做一个质量打分。要结合场景应用考虑算法的复杂度,比如在一些场景中,可以完整跟踪一个人的人脸轨迹,并从中选择最优的一张照片;而在一些实时性要求比较高的场景中,则要快速做出相应,一旦发现高质量的人脸照片,立即触发上传逻辑。
即使只上传人脸照片到云端,在如此多的人脸应用场景中,对网络的带宽以及响应的速度还是提出了很高的挑战。为了降低计算、带宽、存储的资源消耗,我们会对进行特征提取的人脸照片尺寸和大小进行优化。考虑到后续人脸提取的神经网络会对人脸进行归一化,我们认为人脸大小在满足比对要求时控制在150个像素是比较合适的。
同时对图片质量的压缩也是非常必要的。经我们测试,75%的jpeg压缩率对人脸识别的性能影响可以忽略,却可以节约几倍的带宽资源。除了常用的jpeg、png图像编码,苏宁还使用WebP图像压缩格式,可以使带宽资源的占用进一步降低20%~30%。
softmaxLoss其实人脸识别与imagenet的图像分类比赛并没有本质的区别,苏宁在早期拍照购物中累积的商品识别项目经验很多都可以用在人脸识别的项目中,比如早期的VGG net、Inception、后来的ResNet这些网络结构在图像分类中取得的成功同样可以在人脸识别中复现。
图3softmaxLoss结构
图3是一个典型神经网络输出层softmaxLoss的结构。其lossfunction为
其中xi表示第i个样本属于第yi类的人脸照片所提取的特征,wj表示最后一层全链接层属于第j个类别的权重,b为偏置bias,m和n分别对应batch size和分类的类别数。
不同于imagenet这种close-set的分类任务,人脸识别问题实际上是在一个open-set上进行测评,所以是一个特征提取的问题,需要找到一个合适的特征度量空间,softmaxLoss训练的分类器虽然可以将相似样本成功划分,却不能保证类内的聚拢。为了解决这个问题,学术界提出了一系列方法来聚拢类内距离,增大类间距离,从而学到一个泛化能力更强的特征表示。
人脸聚类的工作已经有很多,比如Center loss、Contrastive loss、Triplet loss。重点介绍我认为一个突破性的工作sphereface,这个工作提出将weights归一化,同时将bias置0,把问题转化为角度约束,表示更加清晰,变为,从公式中可以很明确的看到影响模型的三个要素:weights的模长、feature的模长、对θ加margin。
图4 人脸聚类margin几何示意图
weightsnormalization,即,其实这种操作之前就有人研究过,不过更多是把其看作weightdecay,一种为了避免过拟合的L2正则惩罚,并没有从几何角度更多解读它。其进行反向传播对权重w进行更新时,当其中一类样本过少的时候,会导致其样本对梯度影响不明显,导致该类别的权重学习不充分,权重的L2norm较小[1]。由于softmaxloss的决策边界是,bias置零后为,两向量正交,如果其中一个权重学习的不充分,L2norm较小时,决策边界也会向该w倾斜,这会降低分类器的性能,如图5所示。
图5 weights normalization对决策边角的影响
苏宁在实际项目中也遇到了训练样本不均衡的问题,我们通过镜像、随机扰动等方式增加照片数较少类的样本。这种data augmentation虽然可以增加该类别的训练样本,却不能有效的增大该类别样本的凸包,对分类器的性能提升有限,而我们通过weightsnormalization则使学到的决策边界更加平衡,可以进一步提升分类器性能。
再来看一下featurenormalization,文章[2][3]对feature的L2-norm都有比较细致的分析,发现高质量正面人脸得到的featureL2-norm比较大,而模糊低质量人脸得到的featureL2-norm比较小。
这也比较好解释,当一张人脸照片质量比较低的时候,能够区分人脸的这些神经元无法被充分激活,得到的feature自然比较小。
从weightsnormalization的分析中可以看出featurenormalization对决策边界其实没有影响,无外乎样本是分布在球体表面还是分布在一个锥体里。但是其对loss的作用结果是不同的,进行featurenormalization后再scale到一个比较大的值,通过softmax后其分布会变得更加集中,在反向传播的时候,其权重的更新会得到加强,从而加强训练的模型对低质量人脸的识别能力。
在线下场景的实际落地效果看,受应用场景的条件限制,很难保证采集人脸照片的高质量,而通过featurenormalization训练的模型在实际应用中泛化能力更强。
Sphereface提出angularmargin是一种全局约束,m=4的约束条件太强,很多样本无法满足max intra-class angle < min inter-class angle的分类条件,对大数据集训练时较难收敛,loss反而增大。AM-softmax[4]和ArcFace[5]的margin条件则相对宽松。AM-softmax中的margin实现与bias很像,所不同的是margin只作用于本类别的targetlogit。而ArcFace则进一步将margin的大小与θ关联起来。
人脸识别最具挑战的场景就是大规模的1:N的人脸应用,而目前市面上的成熟商业产品还几乎没有,以前这种需求集中在公安系统,其实在智慧零售中也需要大规模1:N人脸识别能力。
苏宁线下门店人脸识别应用的难度又进一步增加:首先这是一个非用户配合的场景;其次苏宁有几亿会员,这个N是很恐怖的;再次,从业务上希望能够对用户进行分组,能够去除店员的信息,识别出VIP会员,还要能对新用户进行挖掘,同时要能做到黑名单的安防布控;除此之外,有几千家门店的数据推流,系统的流量也是很大的。要设计这样的解决方案是非常恐怖的。
这里不过多讨论系统架构的复杂,单从1:N的开放场景的模型设计介绍一下苏宁的实战经验。在N如此大的情况,要求误识率很低,又要保证模型对相似人的分辨能力,甚至能区分双胞胎,仅靠前面提到的全局margin是很困难的。除了将人脸按地区区域分组降低N的比对范围,我们另一个实际经验是通过tripletloss进一步增加localmargin。
在苏宁这样规模的应用场景里,其实人脸数据的来源和规模不是问题,前面提到的全局margin在这样的超大规模数据集中显得有些乏力,tripletloss则可以通过三元训练样本的选择技巧来增加局部margin。
不过我们实践发现现有的tripletloss是作用在欧式空间的,好不容易通过global angular margin学到的特征子空间再映射到欧式空间性能反而会有下降,为了解决这个问题,我们将Dist(A,P)+margin
本文由威海网络公司半岛科技转载整理2018.04.24