positive是什么意思

更新时间:2022-11-25 03:34:59 阅读: 评论:0


2022年11月25日发(作者:old school)

⼈脸识别⾯试常见题⽬总结

项⽬整体流程图:

简单简述⼀下你做的⼈脸识别项⽬的整个流程?

⾸先利⽤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,R-Net,O-Net⽹络结构

P-Net,(ProposalNetwork):该⽹络结构主要获得了⼈脸区域的候选窗⼝和边界框的回归向量。并⽤该边界框做回归,对候选窗⼝进

⾏校准,然后通过⾮极⼤值抑制(NMS)来合并⾼度重叠的候选框。

R-Net,(RefineNetwork):该⽹络结构还是通过边界框回归和NMS来去掉那些fal-positive区域。只是由于该⽹络结构和P-Net⽹

络结构有差异,多了⼀个全连接层,所以会取得更好的抑制fal-positive的作⽤。

O-Net,(OutputNetwork):该层⽐R-Net层⼜多了⼀层卷基层,所以处理的结果会更加精细。作⽤和R-Net层作⽤⼀样。但是该层对

⼈脸区域进⾏了更多的监督,同时还会输出5个地标(landmark)。

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

即在训练时选择前K个loss较⼤的样本进⾏backpropagate(bp),⽽loss较⼩的样本(easysamples)则认为分类正确不⽤bp(loss较⼩可

认为学会了,既然学会了就没有必要再学,也就不需要bp了),这⾥的前K可以是⼀个百分⽐,即前K%的hard样本,如70%,这个是

MTCNNOHSM采⽤的⽅法,注意K不能太⼤否则不能达到hardsamplemining的作⽤。

请简述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次。最后再经过⼀个全连接den层,输出128的特征向量,这个特征向量是进⾏⼈脸识

别的关键,因为相似的⼈脸它们的特征向量在欧式空间的距离是⾮常⼩的,我们就可以通过这个距离⼩于某个阈值来判断⼈脸。对得到的

128的特征向量进⾏L2标准化,得到最终的特征向量

Facenet的特点是什么?

与其他的深度学习⽅法在⼈脸上的应⽤不同,FaceNet并没有⽤传统的softmax的⽅式去进⾏分类学习,然后抽取其中某⼀层作为特征,⽽

是直接进⾏端对端学习⼀个从图像到欧式空间的编码⽅法(Euclideanembedding),然后基于这个编码在嵌⼊空间(embedding

space)⽤(欧⽒距离)L2distance对⽐做⼈脸识别、⼈脸验证和⼈脸聚类等。

FaceNet算法有如下要点:

去掉了最后的softmax,⽽是⽤三元组计算距离的⽅式来进⾏模型的训练。使⽤这种⽅式学到的图像表⽰⾮常紧致,使⽤12维。

(特征向量的维度选择问题,维度约⼩计算越快,但是太⼩的话很难区分不同图⽚;维度越⼤越容易区分不同图⽚,但是太⼤训练模型不易

收敛,且测试时计算慢,占⽤空间⼤。经过实验证明128维的特征能够较好的平衡这个问题)

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

MTCNN⾥⾯的技术关键点包括

(交并⽐)

(⾮极⼤值抑制)

t_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最⼤边长。

len_side=max(w,h)

_x1=x1+0.5*w-0.5*len_side

预测框和转化后的正⽅形框中⼼点不变。不过在特殊情况,如原图中⼈脸太靠近图⽚边缘,预测框转正⽅形后正⽅形的边可能超过图⽚边

缘,此时中⼼点可略作调整,使正⽅形位于图⽚内部。

偏移率计算

⽣成标签的时候需要进⾏偏移率计算。

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

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

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

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.根据索引,计算出建议框在原图上的坐标值

如图有4个建议框,分别为红,绿,黄,蓝,每个建议框对应特征图上的⼀个点,⽐如红⾊框对应特征图上(0,0)这个点,绿⾊框对

应特征图上(0,1)这个点。每个建议框和特征图上的点⼀⼀对应,因此,根据特征图上的索引,可以反算得到建议框在原图上的坐

标。

特征图共有5个通道,分别为:

置信度:模型预测出的建议框内含有⼈脸的概率

预测框相对于建议框左上⾓X1的偏移率:offt_x1

预测框相对于建议框左上⾓y1的偏移率:offt_y1

预测框相对于建议框右下⾓X2的偏移率:offt_x2

预测框相对于建议框右下⾓y2的偏移率:offt_y2

[外链图⽚转存失败,源站可能有防盗链机制,建议将图⽚保存下来直接上传(img-RGr6eQI9-16)(images/)]

2.根据偏移率,计算实际预测框在原图上的坐标值

⽹络输出实际预测框相对于建议框的偏移率,因此可以根据建议框在原图上的坐标,加上建议框边长乘以对应的偏移率,得到实际预

测框在原图上的坐标值

FaceNet模型的计算流程

MTCNN的优缺点总结

优点

1.设备要求低:使⽤了级联思想,将复杂问题分解,使得模型能够在⼩型设备上运⾏,⽐如⼈脸监测模型可以在没有GPU的设备上运

⾏。

2.容易训练:三个级联⽹络都较⼩,训练模型时容易收敛。

3.精度较⾼:使⽤了级联思想,逐步提⾼精度。

缺点

1.误检率较⾼:因为采⽤了级联的思想,使得模型在训练过程中的负样本偏少,学到的模型不够100%准确。

2.改进空间⼤:MTCN原论⽂模型在发表时距今已过去好⼏年了,随着技术的不断进步,对于原模型可以做出很多优化。

3.难以检测出倾斜度过⼤的⼈脸

FaceNet模型的优缺点总结

优点

1.直接训练很深的神经⽹络来获得embedding

2.三元组(anchor、pos、neg)设计、筛选、训练⽅法

3.对每张⼈脸产⽣128bytes的特征

faceNet不采⽤landmark,直接⽤CNN来学对齐的那套(facedetection->featureextraction)其他⾛facedetection->face

alignment->featureextraction。

FaceNet并没有像DeepFace和DeepID那样需要对齐。

FaceNet得到最终表⽰后不⽤像DeepID那样需要再训练模型进⾏分类,直接计算距离就好了,简单⽽有效。

提取特征直接计算距离,⽐之前的使⽤PCA+SVM更加简单,训练的损失函数直接针对实际误差,end-to-end⽅式训练都能提⾼精度

只要有个⼈脸的boundingbox就⾏

缺点

针对倾斜度过⼤的⼈脸识别不了,或者效果⽐较差

如下代码是什么意思?

PNet能处理的最⼩图⽚⼤⼩是12×12的,minsize设为20,即要求的最⼩⼈脸图⽚的⼤⼩是20×20的,根据这两个值定义了⼀个

detection_window_size_ratio的值m=12.0/minsize。然后定义了⼀组图⽚的scales公式:Scale=m*factor的N次⽅

factor在这⾥取0.709。输⼊图⽚按照这些scales进⾏缩放,直到最短边的值⼩于12为⽌。从⽽得到了⼀组内容相同,⼤⼩不同的

imagepyramid。注意,这⾥对图⽚进⾏的是resample,并不是crop。

举例:

我们算⼀下:输⼊图⽚的⼤⼩是250×250×3,⾸先要scale,这⾥

,实际输⼊pnet的第⼀张图⽚的⼤⼩是

,经过第⼀层

,输出为

;第⼆层

,输出为

;第三层

,输出为

;第四层

,输出为

,所以输出的featuremap应该形如

第⼀次resample后如果最⼩变没有<12,也能输⼊pnet进⾏训练吗?为什么?

这⾥PNet能处理的最⼩图⽚⼤⼩是12×12的,⼤于12也可以计算,但是会消耗很多时间和计算成本,理论上设置为12最为合适。项⽬

⼯程讲究选择最合适的值来⽤。

如下代码中的函数是什么意思?

minsize=20,m=12/minsize=3/5

250×3/5=150

(3×3/s:1/p:valid)conv

(150−3+1)/1=148

(2×2/s:2/p:same)maxpool

148/2=74

(3×3/s:1/p:valid)conv

(74−3+1)/1=72

(3×3/s:1/p:valid)conv

(72−3+1)/1=70

(70,70)

detect_face_24net和detect_face两个函数的区别是什么?分别在什么情况下⽤到?

detect_face_24net是⽤于数据预处理图像⼤⼩为24的函数,和detect_face_12相同;⾄于detect_face相当于的是主函数,也就是说是主函数

下⾯写的⼦函数功能。

上图中的三个阶段分别都完成了什么功能?

以上图detect_face_24net为例:

这⾥检测图像中的⼈脸,并为其返回包围框和点。

img:输⼊图像

minsize:最⼩尺⼨20

Pnet,Rnet,Onet:源于caffemodel(原始论⽂出处)

threshold:阈值=[th1,th2,th3],th1-3是三个步骤的阈值[0.6,0.7,0.7]

factor:⽤于创建⽤于在图像中检测的脸(图像⾦字塔)⼤⼩的缩放⾦字塔的因⼦。0.709

代码中:

第⼀阶段⽤于PNet模型预测

第⼆阶段⽤于RNet模型预测

第三阶段⽤于ONet模型预测

onet是如何找到五个landmark的,后续过程中是如何利⽤landmark去对齐⼈脸的?

onet通过数据集中的landmark学习得到的五个landmark点。后续利⽤检测到的Landmarks和模板的Landmarks,计算仿射矩阵结果;

然后利⽤计算出来的结果,直接计算得到对齐后的图像。

模型训练完成后,在预测阶段,⼤尺⼨的图像(如1080)经过⾦字塔后会不会过度resize,影响其检测效果。

会出现这种情况,将⾦字塔少建⼏层就可以解决这种问题。

FACENET

⼤部分是拓展功能和测试代码,项⽬中没⽤使⽤到,图⽚中标出来的代码程序是softmax,celebA的相关训练的程序

完成训练后,在检测阶段,⾯对新输⼊的样本,没有其他类来构成neg,要如何使⽤tripletloss。

⼀般情况下,模型⾯对新输⼊样本⼀般有两种解决办法:

1.加⼊新数据,从新训练模型,以此达到训练识别的⽬的。

2.第⼆种是直接通过Tripletloss学到的是⼀个好的embedding,相似的图像在embedding空间⾥是相近的,可以判断是否是同⼀个⼈

脸。

对于Tripletloss是深度学习中的⼀种损失函数,可以通过训练得到也可以使⽤已经训练好的Tripletloss。⽤于训练差异性较⼩的样本,如⼈

脸等,数据包括锚(Anchor)⽰例、正(Positive)⽰例、负(Negative)⽰例,通过优化锚⽰例与正⽰例的距离⼩于锚⽰例与负⽰例的

距离,实现样本的相似性计算。具体可以参考课程(CSDN视觉应⽤⼯程师),课程中有详细讲解含义。

facenet⽹络有什么改进的⽅法,或者更好⽤的替代⽹络:

还可以改变⽹络内部结构,⽐如使⽤:Inception-resnet-A、Inception-resnet-B、Inception-resnet-C;

三个模块其实都是Inception和resnet结合的变种残差⽹络。

它们在Inception-ResNetV1中会作为⼀个block被使⽤多次,例如5个连续的Inception-resnet-A放在⼀块使⽤,因为是残差⽹络,所以

输⼊和输出是可以直接相加的。因此可以连续使⽤5个Inception-resnet-A;同理后⾯两个会被连续调⽤10次和5次。最后再经过⼀个全连

接den层,输出128的特征向量,这个特征向量是进⾏⼈脸识别的关键。因为相似的⼈脸它们的特征向量在欧式空间的距离是⾮常⼩的,

我们就可以通过这个距离⼩于某个阈值来判断⼈脸。对得到的128的特征向量进⾏L2标准化,得到最终的特征向量。

替代⽹络可以⽤⼀些新出来⽹络模型,⽐如VarGFaceNet。OpenFace等模型

VarGFaceNet模型知识点拓展,可以简单简述⼀下

作者采⽤可变组卷积(varg)作为⽹络的基础block,其主要想法和原因是,以往轻量型模型采⽤深度可分离卷积来实现轻量化⽬的,但是

深度可分离卷积存在块内计算强度不平衡的问题,⽽且它的轻量化是在舍弃空间结构的基础上实现的,这使得模型在嵌⼊式设备中效率低下

以及模型精度下降。为此,作者在深度可分离卷积的基础上提出了可变组卷积varg。

OpenFace模型知识点拓展,可以简单简述⼀下

1.使⽤HOG算法给图⽚编码,以创建图⽚的简化版本。使⽤这个简化的图像,找到其中看起来最像通⽤HOG⾯部编码的部分。

2.通过找到脸上的主要特征点,找出脸部的姿势。⼀旦我们找到这些特征点,就利⽤它们把图像扭曲,使眼睛和嘴巴居中。

3.把上⼀步得到的⾯部图像放⼊神经⽹络中,神经⽹络知道如何找到128个特征测量值。保存这128个测量值。

4.看看我们过去已经测量过的所有脸部,找出哪个⼈的测量值和我们要测量的⾯部最接近。从⽽得到要找的⼈结果

备注:以上总结的知识点,可以考虑背下来,⾯试⼤概率会问相关内容,由于⼈脸识别已经属于单独的⼀个研究领域,所涉及的知识点和项

⽬经验⾮常之多,⾯试时注意⼀定要学会灵活变通,学完知识点需要学会总结和对⽐分析。

述⼀下

1.使⽤HOG算法给图⽚编码,以创建图⽚的简化版本。使⽤这个简化的图像,找到其中看起来最像通⽤HOG⾯部编码的部分。

2.通过找到脸上的主要特征点,找出脸部的姿势。⼀旦我们找到这些特征点,就利⽤它们把图像扭曲,使眼睛和嘴巴居中。

3.把上⼀步得到的⾯部图像放⼊神经⽹络中,神经⽹络知道如何找到128个特征测量值。保存这128个测量值。

4.看看我们过去已经测量过的所有脸部,找出哪个⼈的测量值和我们要测量的⾯部最接近。从⽽得到要找的⼈结果

备注:以上总结的知识点,可以考虑背下来,⾯试⼤概率会问相关内容,由于⼈脸识别已经属于单独的⼀个研究领域,所涉及的知识点和项

⽬经验⾮常之多,⾯试时注意⼀定要学会灵活变通,学完知识点需要学会总结和对⽐分析。

本文发布于:2022-11-25 03:34:59,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/90/16045.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:pants怎么读
下一篇:find的过去式
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图