出品 | 智东西公开课
讲师 |中国科学院计算技术研究所副研究员、中科视拓联合创始人 张杰
编辑 | 王鑫
提醒 | 本文附有完整PPT下载,关注并回复对话框“CV03”
导读:
9月10日,「智东西公开课」策划推出计算机视觉应用系列课第一季第3讲,主题为《姿态鲁棒人脸识别关键技术及其在智慧园区中的应用》,
在本次讲解中,张杰老师首先介绍全自动人脸识别的流程和大姿态人脸识别的挑战,然后分别从损失函数的设计和姿态鲁棒的人脸识别两个角度对姿态鲁棒人脸识别技术进行深入解析,最后介绍了在智慧园区中的应用案例并进行了总结与展望。
本文为此次公开课的实录
张杰:大家好,我是来自中科视拓有限公司和中科院计算所的张杰,今天我给大家分享的课程主题是《姿态鲁棒人脸识别关键技术及其在智慧园区中的应用》。以下是本次的课程提纲:
1.全自动人脸识别基本计算流程
2.姿态变化给人脸识别带来的挑战
3.姿态鲁棒人脸识别技术解析
4.姿态鲁棒人脸识别在智慧园区中的应用
全自动人脸识别基本计算流程
自动人脸识别的经典流程分为三个步骤:人脸检测、面部特征点定位(又称Face Alignment人脸对齐)、特征提取与分类器设计。一般而言,狭义的人脸识别指的是"特征提取+分类器"两部分的算法研究。其中特征提取是人脸识别任务中极其重要的部分,本次重点介绍人脸特征提取方面的工作进展,然后再介绍人脸识别导向的人脸对齐技术在解决大姿态人脸识别方面的相关工作。
姿态变化给人脸识别带来的挑战
大姿态下的人脸识别挑战主要是姿态的变化,同一个人的人脸表观存在巨大差异,人脸识别模型在大姿态情况下性能会急剧下降。从图片可以看出,左边的一列图中两个人的姿态比较相近,在人脸表观上也比较接近,人脸识别精度就较高。右边一列图包括一张准正面的人脸和一张侧面90度的人脸,他的人脸表观相似度就会比较低,这时候人脸识别的性能就会急剧下降。
姿态鲁棒人脸识别技术解析
-损失函数设计:Metrc Learing & Margin Based Classification
首先值得一提的是2014年Facebook发表在CVPR2014上的一个叫DeepFace的工作。这个工作首次利用400多万的人脸数据训练深度卷积网络,当时在LFW上达到了97.25%,一个逼近人类的识别精度。
这个工作有两个贡献点,首先是在人脸对齐方面,引入了3D人脸模型,对有姿态的人脸进行了分片的仿射变换实现对齐;第二个贡献点是在人脸表示的环节,利用一个9层的卷积神经网络,在包含4000多人、四百多万张人脸数据上学习人脸的表示。这个工作在卷积神经网络中引入了一个叫Local Connected的卷积结构,也就是在每个空间位置学习单独的卷积核,缺点是导致参数的膨胀,后来这个结构也没有流行起来。
DeepID家族,这个可以看作是DL时代人脸识别领域的一组代表性的工作。最早的DeepID的网络包含了4个卷积层,采用Softmax损失函数、人脸分块、融合多个模型,在LFW中达到了97.45%的精度。另外DeepID2在DeepID网络的基础上,同时考虑了分类损失和确认损失这两个Loss,这两个损失分别采用Softmax Loss和 Contrastive Loss来实现,最终在LFW上达到了99.15%的精度。DeepID2+网络则是在DeepID2的基础上增加了每一层的辅助损失函数,精度最终达到了99.47%。
接下来要跟大家分享的是Google发表于CVPR2015的工作FaceNet。
FaceNet采用了22层深层卷积网络和海量的人脸数据(800多万人的2亿多张图像)以及常用于图像检索任务的Triplet Loss损失函数。值得一提的是,由于人脸类别数达到800万类,如果使用Softmax loss,输出层节点将达到800万个,需要占用大量的显存,简单使用Softmax是难以训练的。而Triplet Loss则不需要占用大量的显存, 所以作者就提出了用Triplet Loss进行学习。
从图片下方可以看到Triplet Loss的的核心思想就是让正例样本和反例样本(正例样本就是同一个人的样本,反例样本就是不同人的样本)的距离足够远,远到Margin α这么一个程度。如果它们之间的距离不够远,我们可以通过损失函数拉远他们的距离。
这里有个非常重要的环节,就是如何选择三元组,从右边的图可以看到有三种不同类型的samples,分别是Easysample、Hardsample、Semi-hardsample。
Easysample就是说正例样本到Anchor的距离远小于负类样本到Anchor的距离,这样的样本不需要拿来进行网络的优化学习。
Hardsample是指正例样本到Anchor的距离大于neg样本到Anchor的距离,这样的样本是非常困难的,如果直接选择这样的样本进行学习,可能会造成网络不收敛或者陷入局部极值的问题,尤其是当数据有噪声的时候,很可能会导致网络被训练坏。
Semihard的样本则是pos到achor的距离小于neg到anchor的距离,但是他们的差距还不够大(也就是在margin阿尔法以内),FaceNet 中是随机选取Semi-hard triplets 进行训练的, 取得较好的实验结果。在LFW数据集上平均精度达到了99.63%。
下面着重介绍下Margin Based Classification相关的损失函数设计工作,首先要提到的是CenterLoss。从右边这张图可以看到,通过传统的Softmax尽管可以完美的进行分类,但是类内特征的分布不够紧凑,所以作者就提出了要让每一个类的类内尽量收缩到比较紧凑的结构,这样可以提升分类的效果。在图片下方的公式里,前面一项就是传统的 Softmax分类的概率,右边是他提出来的CenterLoss这一项。
在结合使用这两个损失函数,我们可以认为第1项 Softmax交叉熵负责增加类间的距离,CenterLoss负责减小类内的距离,这样学习到的特征的判别度会更高。
Large-Margin Softmax :这个损失函数的设计和前面CenterLoss有点不一样,CenterLoss可以看作是在传统Softmax的基础上加了一个正则项,约束它们类内要收缩的紧,这个工作直接对Softmax进行了改进。传统的softmax的目的是使得WT1x>WT2x,
即 ∥W1∥∥x∥cos(θ1)>∥W2∥∥x∥cos(θ2,从而得到 x (来自类别1)正确的分类结果。
作者提出large-magrin softmax loss的动机是希望通过增加一个变量 m,从而产生一个决策余量,能够更加严格地约束上述不等式,L-Softmax loss中,m是一个控制距离的变量,它越大训练会变得越困难,也就是margin的概念。
通过右上角这张可视化的图可以看到传统的Softmax得到的特征类内比较分散,而我们加了Large-Margin以后,它的类内收缩会更加紧凑。但是可以看到他跟CenterLoss最终呈现的分布情况还是不一样的。CenterLoss的约束直接让类内收缩,所以呈现的是一种类内收缩的效果。Large-Margin Softmax是让分类面尽量拉开,所以可以看到分类面之间拉的尽量开的效果。
SphereFace:这个工作是发表在CVPR2017上面的一个方法。L-softmax尽管引入了margin的概念,但没有对参数矩阵||W||进行归一化,SphereFace提出的A-Softmax在large margin softmax loss的基础上添加了两个限制条件||W||=1和b=0,使得预测结果主要取决于W和x之间的角度,进而提升人脸识别效果。
Normface:这个工作之前大家可能关注度会稍微少一点,它是发表在ACM MM 2017上面的。
动机:如上图所示,按照欧式距离的度量方法来计算,那么f1和f2的欧式距离是小于f2和f3的欧式距离,也就是f1和f2的相似度远大于f2和f3的相似度,但事实并不是如此。说明度量方式不够好,比如余弦的角度就是一种不错的度量方式。人脸识别测试通常采用余弦夹角进行度量,这使得训练(欧式空间度量)和测试(余弦空间度量)过程存在一个gap,为此,作者提出将||W||和特征向量同时进行归一化,即如公式所示,W和f都是归一化后的特征,s为尺度常量因子。
尽管SphereFace将参数矩阵||W||归一化,但特征向量没被归一化时,预测结果并不是仅取决于W和x之间的角度。但NormFace做到了。不足之处在于NormFace没有引入margin的概念。
在CVPR 2018上,作者提出CosFace的方法,Coseface可以看成再Normface基础上通过引入超参数m,引入Margin,m可以控制惩罚的力度。cos(θ)-m 比 cos(θ) 更小,所以损失函数值比 Normface 里面的值更大,进而可以学习到更好的人脸识别特征(类间拉的更开,类内更紧凑)
Arcface:跟Cosface不一样的是Arcface直接在角度空间最大化分类界限。从图片上面的公式可以看到,Arcface是直接在角度空间进行分类界限最大化的优化学习,而Cosface是在余弦空间来实现最大化分类界限的学习。
右上角这张图的横坐标为 θ 为特征与类中心的角度,纵坐标为损失函数分子指数部分的值(不考虑 s),其值越小损失函数越大。可以看出,例如 Sphereface 的损失函数在 m=2或 4 的时候,施加太强的约束反而会降低模型性能,且训练不易收敛。
Arcface和Cosface相比,θ ∈ [30° , 60°]给的惩罚相对比较高,也就是说Arcface比较着重优化θ ∈ [30° , 60°]的样本,从而可以有效地提升人脸模型识别的精度。而Cosface在θ∈[0° , 30°]相应的惩罚会比较高,但是这样的样本的价值并不大。最终Arcface在 MegaFace测试集上首选识别率达到了98.36%,是当时最好的一个结果。
最下面这张图很好的总结了这几种Margin Based损失运作的过程。从左往右看,首先是对这个特征进行范数的归一,然后对分类面的矩阵进行归一化,从原来的欧式空间转入到了余弦夹角的空间。接下来SphereFace、Arcface和Cosface分别从不同的角度引入Margin,也就是m1、m2和m3最终引入的方式就是把这几个融合起来就变成了图上的结果。最后再对这个特征进行Re-scale,送入Softmax进行分类。
这几个工作的核心出发点都是一样的,就是在Softmax基础上引入Margin的概念,但是引入的角度不一样。最后在我们实际的实验过程中发现Arcface的效果会更好一些。
-姿态鲁棒人脸识别方法:人脸识别导向的显示人脸对齐方法
介绍完了损失函数设计方面的工作,下面有针对性的来介绍下姿态鲁棒的人脸识别方法,这里面会介绍几大类从显示人脸对齐方面做的一些工作。
第一个工作就是叫SPAE,这是我们课题组提出来的一个方法,通过使用Auto-Encoder网络将人脸进行正面化的操作,进而提升人脸识别模型在大姿态下的鲁棒性,考虑到使用单个Auto-Encoder网络很难很好的将不同大姿态下的人脸进行矫正。这个方法使用多个栈式堆叠的Auto-Encoder网络将侧面姿态的人脸逐步矫正到正面状态。
具体来说就是把一个90度人脸先通过Auto-Encoder网络转到60度,然后再从60度转到45度,然后逐步转到正面的人脸图像。该方法在Multiple和FERET两个数据集上均取得很好的结果。不足之处在于没有将人脸识别特征表示和人脸正面化同时考虑,没有实现整体学习。
DR-GAN:这个方法是基于生成对抗网络来设计的。生成对抗网络由生成网络G和判别网络D构成,论文建立了一个带有编码-解码结构的G,如图所示,编码器的输入是任意姿态的人脸,解码器的输出是网络生成的特定姿态的人脸。
G输入是人脸图像,姿态编码c及一个随机噪声z,生成足以迷惑D的特定姿态人脸。Genc学习得到的人脸特征表示,再与c和z串联,输入到Gdec生成人脸图像。D主要用于预测身份ID及姿态。D的任务是让生成的人脸和真实的人脸具有不同的ID,这样使得G生成更真实的带指定姿态的人脸。
此外,如右上角图所示,该方法还可以输入多幅图像,生成每个图像的特征表示及系数,所有特征表示通过系数组合成一个表示,Gdec使用这个表示合成人脸图像。使用姿态解耦后的特征向量f(x)进行人脸识别,最终提升人脸识别的精度。
总结一下,DR-GAN的核心出发点就是把人的身份信息的特征和表示人姿态的特征进行解藕,解耦以后得到带有身份信息的特征f(x)更适合做人脸识别。
LDF是一个显示人脸正面化的方法,也是我们课题组提出来的一个方法。LDF分两个阶段,第一阶段是学习从侧面到正面姿态pixel-level的偏移场,这个偏移场是使用卷积神经网络进行学习的。当然,由于它的维度比较高,所以我们在做的时候先使用了3D MM的模型,然后生成了一些偏移场,拿生成的比较粗的偏移场进行网络参数的初始化。在得到正面化的人脸之后,第二阶段使用卷积神经网络来学习人脸特征的表达。前后两个部分我们是端到端进行训练的,在MultiPie数据集上取得了当时非常好的结果。
总结:这个工作也是从学习偏移场出发,结合深度学习网络,实现了姿态鲁棒的人脸识别。
下面介绍下发表在CVPR2018上的一个方法叫PIM。这个方法包含人脸正面化的FFN网络和人脸特征学习网络DNN,在结构上和前面LDF有点类似,但是在细节上还是不一样的,如图所示左边是FFN网络,右边是DLN网络。这个方法有三个创新的地方:
(1)PIM是一个新奇统一的深度框架,包括了人脸正面化(Face Frontalization sub-Net, FFN)和一个特征学习(Discriminative Learning sub-NetDLN)。
(2)FFN是一个设计好的双通道GAN网络来同时感知全局和局部的细节。
(3)DLN是人脸识别中通用的卷积神经网络,然后使用enforced的交叉熵来优化网络,进而得到一个非常好的人脸提取器。
具体地,FFN是一个双通道的GAN网络,能够同时感知全局的人脸信息和局部的人脸细节。从图上可以看到,上路网络就是基于两眼、鼻子和嘴巴这4个Patch作为输入,然后进行人脸矫正,矫正后得到的人脸会包含更多的细节信息。
下路使用全局人脸作为输入,矫正后可以得到的脸部包含更多的全局信息。把全局信息和局部细节信息结合以后,得到的人脸图像可以保证有足够的判别信息,该方法当时在几个主流数据库上面都取得了非常好的结果。
最后介绍我们近期提出的一个人脸对齐和人脸特征联合学习的方法DFN:考虑到人脸识别最终用的是特征,所以我们考虑在特征层面进行人脸对齐,把特征层面的对齐和人脸识别特征的抽取进行联合学习。和之前介绍的人脸正面化的方法相比,DFN不需要恢复正面的人脸,所以相对来说更加简洁高效,该方法还可以处理任意姿态下的人脸识别问题。在测试的过程中,也不需要姿态信息作为输入。那么如何在这个特征层面进行人脸对齐呢?我们就针对deformable conv进行了改进,来实现人脸识别导向的人脸特征对齐。
传统的deformable conv是用在物体检测任务上的,而我们知道一般的物体,比如猫和狗都是非刚体的物体,变化的自由度比较多,人脸相对来说是一个比较刚性的物体,具有很强的结构性。考虑到这一点,我们就想到在学习偏移场的时候,方向的变化上面也应该具备一致性。为此我们就提出了DFN方法,通过学习偏移场,在浅层特征上对人脸进行对齐。和LDF不一样的是该方法在特征层面进行对齐,而不需要使用偏移场将侧面人脸对齐到准正面人脸。特征层面的对齐比人脸图像对齐更加高效。
此外我们还提出了DCL和ICL两个损失函数来指导偏移场生成器的学习。DCL损失函数,是用来提升偏移场局部方向的一致性;ICL损失函数用来最小化类内特征的差异,两种损失一起作用后,就可以实现不同姿态下人脸特征的对齐。
这里展示的是DCL损失的具体实现,核心思想是让偏移场里面的每一个方向向量和均值方向尽量靠近,这样他们最终得到的偏移场就会具有一定的方向一致性。
ICL损失的目标是让不同姿态下的同一个人的人脸特征尽量的靠近。值得一提的是,ICL损失跟 Contrastive Loss还是有一些区别的,ICL的目标是用于约束偏移场,而不是约束在特征提取上面。另外ICL是作用在中间层的特征而不是网络的倒数第2层。
我们在MegaFace数据集上进行了实验,这个实验主要是来评价对齐操作在ResNet哪一个阶段引入会更好一些。分别在第1、2、3、4阶段引入deformable conv模块,从结果上看在浅层stage 1引入会取得更好的结果。
这和我们的直观感受也是一样的,因为我们需要在浅层的时候对带有细节的信息进行对齐,然后才能够促进后面深层特征的学习。也就是说浅层的地方我们进行了一些特征层面的对齐,后面在高层的语义特征方面再去着重地学习和身份相关的人脸识别特征。
这张图展示的是在引入不同损失的情况下对人脸识别精度的影响。可以看到在引入ICL和DCL Loss以后,人脸识别的精度都可以得到提升。如果同时引入ICL和DCL Loss的话,可以进一步提升人脸识别的精度。
我们也跟Contrastive Loss进行了对比,可以看到我们的方法比Contrastive Loss取得的结果更好一些。另外我们也使用更深的ResNet网络,比如ResNet152这样的结构,进一步论证我们方法的有效性。可以看到使用更深的ResNet的网络,可以在MegaFace上达到更好的精度,得到首选识别率82.11%的结果。
最后我们还在MultiPie数据集做了实验,MultiPie数据集是有不同姿态下的人脸图像的,包括90°、75°、60°、45°、30°和15°等不同角度的图像类型。
从实验结果看,我们的方法取得了非常好的效果,尤其是在大姿态下(90°),我们方法显著优于PIM。这里的可能原因是PIM是一个人脸正面化的方法,在90°的条件下人脸正面化的效果就不会特别理想,我们的方法是在特征层面进行对齐的,所以针对大姿态人脸的处理效果会更好一些。
这张图片展示的是不同姿态下的人脸图像,分别经过baseline和DFN抽取特征,特征的可视化结果。从可视化结果可以看出,DFN方法在不同姿态下得到的特征会更加相似,这样可以在一定程度上解决姿态对于人脸识别的影响。
我们在DFN分上面做了一个扩展,如果数据集上有姿态信息,其实可以利用姿态信息对DFN进行扩展,进一步提升模型的精度。
从这张图上可以看到,网络输入是三个分支,分别为同一个人的不同姿态人脸和不同人的同一个姿态人脸或者相近姿态的人脸。我们提出了Pose triplets Loss,简称PTL损失,来约束同一个人不同姿态的人脸特征尽量接近、不同的人同一个姿态的人脸特征尽量拉远。
这个工作在MultiPie上取得了一个更好的结果,从最后两行可以看到分别在大姿态75°和90°下都得到了更好的识别效果。
姿态鲁棒人脸识别在智慧园区中的应用
最后来介绍人脸识别技术在智慧园区上的一些应用。
其实智慧园区缩小一点看就是智能楼宇,放大一点看就是智慧城市。从这三个角度出发会有一系列的应用需求,包括智能安防、智能办公、智能政务和智能生活等。
智慧园区的核心功能主要有几个方面:
(1)资源管理:包括管理员、员工等各个方面的管理;
(2)人员通行:包括考勤、访客、迎宾、门禁等方面的应用需求;
(3)会议管理,比如会议室的预约和管理;
(4)消防管理:包括门禁部署点位管理、一键消防开门、远程开门等;
(5)前台管理:包括访客预约、访客通行记录查看等。
典型的智慧园区的核心场景有4个:
(1)刷脸通行:在智能楼宇的大厅布置人脸识别闸机来实现刷脸进楼的应用;
(2)会议预约并签到:可以通过人脸识别进行会议室的预约、使用等;
(3)车辆管理:通过停车场出入口管理,实现无人化管理;
(4)视频监控管理:在园区的内部和周边安装监控摄像头来检测和分析在岗人员的情况,以及监视周边是否有黑名单人员靠近,人群聚集自动报警等。
智慧园区的技术框架主要分4个层面:
(1)应用层:涉及到人员通行管理、视频监控的系统、车辆管理的系统;
(2)中间层:包含了各种管理的环节,包括报警、设备、人员考勤等方面;
(3)底层算法层:包括了Seetaface的引擎、其他的包括基于人体车辆分析的算法,还有一些流媒体解析的算法。我们有一个叫SeeTaaS的深度学习平台,可以支持这些底层算法的研发。
(4)设备与信号传输层:这里包括终端设备、服务器与局域网配置两大块。终端设备主要包括一体机:者壁挂式的一体机和立式的一体机等;服务器与局域网的配置包含静态和动态的比对服务器、流媒体解析器、路由器、交换机等。
下面我来介绍人员通行管理系统,这个系统的特点是秒速识别、通行记录随时可以查阅、需要可以高稳定性运行的硬件设备、可定制开发即用户会根据他的需求进行定制。
算法是来自于中科视拓SeeTaaS深度学习平台,可以通过不断的升级来适应不同的需求。从右边这张图可以看到后台有人脸比对服务器,通过Internet就可以跟人脸识别一体式的闸机、人脸识别壁挂式一体机、人脸识别智能摄像头、普通PC机进行连接,实现在不同地域、不同场景下刷脸通行的应用。
接下来介绍下访客与迎宾系统,该系统的工作流程主要分为4步:
(1)访客在微信公众平台上提交预约申请;
(2)审批预约申请;
(3)访客在约定时间到达被访单位,在前台访客机、门禁上核验身份证。若提示人证一致,并显示预约详情,则放行;
(4)访客到达摄像头前,将自动识别访客身份并显示在迎宾屏幕上,同时配以定制化欢迎词。
会议签到系统包含会议室预约、参会人员的基本信息与照片注册、便于智能化管理。
视频监控系统上做黑名单预警、人群聚集告警、行人轨迹分析、员工在岗分析、周界入侵告警等应用。
总结与展望
最后做一个简单的总结,首先,网络结构的不断演化,推动了人脸特征学习的进步。随着网络结构的不断的改进,逐步强化人脸识别特征的学习,学到的特征也越来越鲁棒。
其次,损失函数的设计将人脸识别的性能推到了更高点,显示人脸对齐又进一步提升大姿态下人脸识别的精度。最后,人脸识别技术成功地应用于智慧园区等各类的解决方案中,可以说人脸识别技术在智慧园区中得到了广泛的应用。未来我们也会逐步扩大它的应用,具有很广阔的应用前景。
展望:对于网络结构的学习,我们也做了一些初步的探索,使用NASNet搜索出来的结构,进行网络人脸识别网络的训练,可以得到更好的人脸识别的结果。
无监督、半监督的人脸识别,现在也是学术界和工业界都非常关注的问题,我们其实也有大量的无监督和弱监督的人脸识别数据,以后如何把这些数据利用起来,提升人脸识别的精度将非常值得我们关注。
3D结合2D方法,将进一步提升人脸识别的准确性,在各大主流手机里面可能都声称可以进行3D的人脸识别。但真正的3D人脸识别是从另外一个角度出发的,这方面也有一系列的工作,以后有机会可以跟大家再进行交流。
此外,我们的SeeFace2.0已经开源了,它具有以下特点:
(1)采用标准C++开发,全模块均不依赖任何第三方库;
(2)支持x86架构(Windows、Linux)和ARM架构(Android);
(3)SeetaFace2支持的上层应用包括但不限于人脸门禁、无感考勤、人脸比对等。想尝试的朋友们可以到开源地址上面去下载。
我今天的分享就到这里,谢谢大家。
END
你的每一个“在看”,我都当成了喜欢