当前位置:首页 > 资讯 > 正文

人脸识别面试常见题目总结

项目整体流程图: 人脸识别面试常见题目总结

简单简述一下你做的人脸识别项目的整个流程?

首先利用dlib进行人脸的数据集采集和建立

  1. 通过摄像头采集人脸图像
  2. 建立人脸图像的label信息
  3. 建立个人人脸数据库

数据库初始化

数据库的初始化具体执行的过程就是:

  1. 遍历数据库中所有的图片。

  2. 检测每个图片中的人脸位置。

  3. 利用mtcnn将人脸截取下载。

  4. 将获取到的人脸进行对齐。

  5. 利用facenet将人脸进行编码。

  6. 将所有人脸编码的结果放在一个列表中,同时也会将它们的名字放入列表中,这两个列表中的相同位置的元素都是对应的,

    方便后面根据对应的编码的索引找到名字,然后实时显示在检测结果中。

第6步得到的列表就是【已知的所有人脸】的特征列表,在之后获得的实时图片中的人脸都需要与已知人脸进行比对,这样我们才能知道谁是谁。

实时图片的处理

  1. 人脸的截取与对齐
  2. 利用facenet对矫正后的人脸进行编码
  3. 将实时图片中的人脸特征与数据库中的进行比对

比对过程

  1. 获取实时图片中的每一张人脸特征。
  2. 将每一张人脸特征和数据库中所有的人脸进行比较,计算距离。如果距离小于阈值,则认为其具有一定的相似度。
  3. 获得每一张人脸在数据库中最相似的人脸的序号。
  4. 判断这个序号对应的人脸距离是否小于阈值,是则认为人脸识别成功,他就是这个人。
请简述MTCNN的结构组成

分为网络结构

P-Net,(Proposal Network ):该网络结构主要获得了人脸区域的候选窗口和边界框的回归向量。并用该边界框做回归,对候选窗口进行校准,然后通过非极大值抑制(NMS)来合并高度重叠的候选框。

R-Net,(Refine Network ):该网络结构还是通过边界框回归和NMS来去掉那些false-positive区域。只是由于该网络结构和P-Net网络结构有差异,多了一个全连接层,所以会取得更好的抑制false-positive的作用。

O-Net,(Output Network ):该层比R-Net层又多了一层卷基层,所以处理的结果会更加精细。作用和R-Net层作用一样。但是该层对人脸区域进行了更多的监督,同时还会输出5个地标(landmark)。

什么是在线挖掘困难样本?

即在训练时选择前K个loss较大的样本进行back propagate(bp),而loss较小的样本(easy samples)则认为分类正确不用bp(loss较小可认为学会了,既然学会了就没有必要再学,也就不需要bp了),这里的前K可以是一个百分比,即前K%的hard样本,如70%,这个是MTCNN OHSM 采用的方法,注意K不能太大否则不能达到hard sample mining的作用。

请简述FacNet网络计算流程

首先模型分为两个部分,一个是人脸检测流程,一个是人脸编码流程。

人脸检测流程

使用MTCNN模型检测人脸,整个模型一共是有三个网络,按顺序依次是P-net,R-net,O-net,流程如上。

人脸编码流程

输入一张人脸图片,一般是人脸检测之后通过位置信息抠出来的人脸,并且经过了仿射变换,变成正脸。

什么是仿射变换?

简单的来说,仿射变换就是:线性变换+ 平移

那么线性变换和仿射变换的区别是什么?

线性变换三个要点:

  1. 变换前是直线,变换后依然是直线
  2. 直线比例保持不变
  3. 变换前是原点的,变换后依然是原点

仿射变换的两个要点:

  1. 变换前是直线的,变换后依然是直线
  2. 直线比例保持不变
你还尝试过什么方案优化模型结构?

facenet它的主干网络就是Inception-ResNetV1,还有其他几个优化的网络为:Inception-resnet-A、Inception-resnet-B、Inception-resnet-C;三个模块其实都是Inception和resnet结合的变种残差网络。它们在Inception-ResNetV1中会作为一个block被使用多次,例如5个连续的Inception-resnet-A放在一块使用,因为是残差网络,所以输入和输出是可以直接相加的;因此可以连续使用5个Inception-resnet-A;同理后面两个会被连续调用10次和5次。最后再经过一个全连接dense层,输出128的特征向量,这个特征向量是进行人脸识别的关键,因为相似的人脸它们的特征向量在欧式空间的距离是非常小的,我们就可以通过这个距离小于某个阈值来判断人脸。对得到的128的特征向量进行L2标准化,得到最终的特征向量

Facenet的特点是什么?

与其他的深度学习方法在人脸上的应用不同,FaceNet并没有用传统的softmax的方式去进行分类学习,然后抽取其中某一层作为特征,而是直接进行端对端学习一个从图像到欧式空间的编码方法(Euclidean embedding),然后基于这个编码在嵌入空间(embedding space)用(欧氏距离)L2 distance对比做人脸识别、人脸验证和人脸聚类等。

FaceNet算法有如下要点:

去掉了最后的softmax,而是用三元组计算距离的方式来进行模型的训练。使用这种方式学到的图像表示非常紧致,使用12维。

(特征向量的维度选择问题,维度约小计算越快,但是太小的话很难区分不同图片;维度越大越容易区分不同图片,但是太大训练模型不易收敛,且测试时计算慢,占用空间大。经过实验证明 128 维的特征能够较好的平衡这个问题)

三元组的选择非常重要,选的好可以很快的收敛

MTCNN里面的技术关键点包括
  1. iou(交并比)

  2. nms(非极大值抑制)

  3. convert_to_square(转正方形)

  4. 偏移量计算(生成标签时)

  5. 图像金字塔(侦测时)

  6. 图像坐标反算(侦测时)

IOU是什么?

iou表示两个框重叠的比例,iou越大,表示两个框重叠部分越多,越有可能框的是同一个物体。

P_Net和R_Net:交集比并集人脸识别面试常见题目总结

O_Net:交集比最小框 人脸识别面试常见题目总结

人脸识别面试常见题目总结

O_NET中更多的是出现大框套小框的情况,因此以交集比最小框的比值作为iou。

NMS

nms的作用是去除重复框,流程如下: 人脸识别面试常见题目总结

convert_to_square(转正方形)

在侦测的时候,P_NET的人脸预测框需要先转化为正方形,然后在原图上裁剪出对应的图片,resize为(24,24)之后才能把图片输入R_NET。同样,R_NET的人脸预测框也需要转化为正方形,然后裁剪原图,resize为(48,48),输入O_NET最终预测人脸区域。

人脸识别面试常见题目总结

如图,蓝色框为预测框,红色框为预测框转化成的正方形。 正方形框左上角的坐标值 = 左上角的坐标值+0.5框边长-0.5最大边长。

 

预测框和转化后的正方形框中心点不变。不过在特殊情况,如原图中人脸太靠近图片边缘,预测框转正方形后正方形的边可能超过图片边缘,此时中心点可略作调整,使正方形位于图片内部。

偏移率计算

生成标签的时候需要进行偏移率计算。

标签包括1个类别(正样本为1, 负样本为0,部分样本为2), 4个边框偏移率,10个人脸关键点的坐标值偏移率,即一个15维的向量。

偏移率代表的是真实框相对于建议框的偏移的比率。

offset =(真实框坐标值-建议框坐标值)/建议框的边长

P_NET,R_NET,O_NET的建议框分别为12*12, 24*24, 48*48的正方形 人脸识别面试常见题目总结

图像金字塔

侦测的时候,将原图输入P_NET,可以得到(1, C, H, W)形状的特征图,特征图上的每个点的感受野为1212。1212的区域是很小的,无法预测原图上比较大的人脸,因此可以把原图进行缩放,传入P_NRT,原图上的人脸变小之后,P_NET才能准确预测人脸框。

图像坐标反算

在侦测的时候进行做图像坐标反算,反算分为两个部分:

  1. 根据索引,计算出建议框在原图上的坐标值

最新文章