FaceNet论文要点回顾

FaceNet是一种先进的面部识别算法,采用端对端的方式,无需3D建模和对齐步骤,直接输出图片的EmbeddingVector。它能高效地完成人脸识别、验证和聚类任务。与传统方法相比,FaceNet直接输出小维度向量,更高效。其核心在于三元组损失函数,旨在最小化同类人脸间的距离,最大化异类人脸间的距离。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FaceNet的Key features有哪些?

端对端,没有3D modeling,alignment 的步骤
通过FaceNet就能获得每张image的Embedding Vector,拿到Embedding Vector后
加一个阈值(Thresholding value)就能做人脸验证(verification)任务
加KNN就能做人脸识别(recognition)任务
加K-means就能做人脸聚类(clustering)任务

前人论文中是如何获取 embedding?

-训练一个有K个人的CNN classifier
-从模型中间取出某一层作为 embedding 向量

前人方法有哪些弊端?

前人方法是间接的;此外,这种中间层通常具有数千个维度,相比直接输出一个小维数的向量如128,这是低效的。

FaceNet需要怎样的损失函数?如何设计?

希望vector能够表达一张图片中的两个信息,
如果是指向同一个人的,那么两个vector的距离是接近的
如果是指向不同的两个人,那么两个vector的距离是远的

需要最小化属于同一个人的两个面部之间的距离,并最大化两个属于不同身份的人之间的面部距离。并最大化两者之间的绝对差异。

如何从损失函数的目标转化为真实的函数?
如何计算和选择triplets来计算损失函数?

A 样本需要有3张图像
o Anchor 图像
o Positive 图像
o Negative 图像
三元组的选择直接影响模型的速度和收敛。理想情况下,我们选择对模型来说很困难的三元组

简单与困难的Triplets对模型训练效果的影响?

简单的Triplets easiness and hardness vs convergence
·简单的Triplets是那些模型能很容易就分辨出来是否是同一人的图像对,
·因为太简单了,模型就不用怎么更新参数。所以不能让模型总是面对简单的Triplets

选择困难的三元组可能导致训练不佳,因为按照上述要求选到的多是错误标记和不良成像的面孔

应该从全局样本还是从mini-batch中选取困难的triplets?为什么?

从整个数据集寻找
要遍历整个数据集,效率低
不可避免遇到标签错误和质量差的图像,因为这些图像本身就有问题,那么他们就会成为占据主导的困难的positive,negative三元组。可能导致模型训练非常糟糕,从而出现模型崩塌(model collapse)(即,无论输入什么图片,模型输出的vector总是 f(x)=0)

从mini-batch中寻找
遇到标签错误和质量差的图像的概率要减小很多
更容易找到期望的正常的hard positive,negative
进行online训练,一边训练一边寻找困难的positive,negative三元组

如何组合triplets来构成训练样本和mini-batch?

使用所有的positive图像来生成positive对
只使用hard negative图像生成negative对
也会选取semi-negative图像生成negative对, semi-negative图像指的是negative对的距离大于positive对的距离,但是他们的差异小于阈值(margin)

怎样组成一个mini-batch一个mini-batch有1800张图像

里面针对性的1个身份有40张图像,用来构成positive对
剩下的图像是其他不同身份的,用来构成negative对

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值