论文:FaceNet: A Unified Embedding for Face Recognition and Clustering
时间:2015.04.13

来源:CVPR 2015

来自谷歌的一篇文章,这篇文章主要讲述的是一个利用深度学习来进行人脸验证的方法,目前在LFW上面取得了最好的成绩,识别率为99.63%(LFW最近数据刷的好猛)。

传统的基于CNN的人脸识别方法为:利用CNN的siamese网络来提取人脸特征,然后利用SVM等方法进行分类。

而这篇文章中他们提出了一个方法系统叫作FaceNet,它直接学习图像到欧式空间上点的映射,其中呢,两张图像所对应的特征的欧式空间上的点的距离直接对应着两个图像是否相似。

如图:

这是一个简单的示例,其中图中的数字表示这图像特征之间的欧式距离,可以看到,图像的类内距离明显的小于类间距离,阈值大约为1.1左右。

这篇文章中,最大的创新点应该是提出不同的损失函数,直接是优化特征本身,用特征空间上的点的距离来表示两张图像是否是同一类。

上图是文章中所采用的网络结构,其中可以看出,其中,前面部分跟CNN是相同的,只是后面接一个特征归一化(使其特征的||f(x)||2=1,这样子,所有图像的特征都会被映射到一个超球面上),接着再去优化这些特征,而文章这里提出了一个新的损失函数(优化函数),而这也是文章最大的特点所在。

什么是Triplet Loss呢?故名思意,也就是有三张图片输入的Loss(之前的都是Double Loss或者 是 SingleLoss),文章这里,直接学习特征间的可分性:相同身份之间的特征距离要尽可能的小,而不同身份之间的特征距离要尽可能的大(LDA思想)。

对于triple loss 的示例:

意思就是说通过学习,使得类间的距离要大于类内的距离(原来的空间可能不是这样子的)

优化函数为:

用公式来表示就是:左边类内的距离(加上边际)要小于右边类间的距离,这个约束需要在所有的Triplet图像对上都成立

转换一下,它的损失函数就变为上式所示:即 最小化 (类内距离-类间距离+边际),其中,边际\alpha是一个常量。

在上面中,如果严格的按照上式来进行学习的话,它的T(穷举所有的图像3元组)是非常大的。

举个例子:在一个1000个人,每人有20张图片的情况下,其T=1000*20*20*999

也就是O(T)=N2 ,所以,穷举是不大现实的。

那么,我们只能从这所有的N2个中选择部分来进行训练.

现在问题来了,怎么从这么多的图像中挑选呢?

答案是选择最难区分的图像对。

给定一张人脸图片,我们要挑选其中的一张hard positive:即另外19张图像中,跟它最不相似的图片。

同时选择一张hard negative:即在20*999图像中,跟它最为相似的图片。

挑选hard positive 和hard negative有两种方法,offline和online方法,具体的差别只是在训练上。

实际采用:采用在线的方式,在mini-batch中挑选所有的anchor positive 图像对,同时,依然选择最为困难的anchor negative图像对。

新的问题:选择最为困难的负样本,在实际当中,容易导致在训练中很快地陷入局部最优,或者说整个学习崩溃f(x)=0 //我在CNN学习的时候也经常会遇到这个问题,不过我的是f(x)=1

为了避免这个问题,在选择negative的时候,使其满足上式(3):左边:Positive pair的欧式距离右边:negative pair的欧式距离。

把这一个约束叫作semi-hard

网络结构:

文章中的CNN采用了两种结构(都是直接采用别人的方法)

第一个网络结构是利用特征可视化的那篇文章

第二个网络采用的网络结构是GoLeNet,层数更多,参数更少。

论文的实验:

1. 不同的网络配置下的识别率。

2. 不同的训练图像数据集的大小。

3. 不同的特征维度下的识别率:

不同的特征维度D,特征越多并非越好,文章中的解释是说,当特征的维度越大,需要的训练数据要求跟多。//这个解释很牵强,还不如从特征稀疏性来说明。对于这个解释,文章并没有实验论证。

4. 不同的图像质量下的识别率:

左边:图像的压缩质量;右边:图像的像素个数。

5. 人脸聚类

用学习到的网络,对所有的图像进行特征提取,然后根据根据这些特征,直接进行聚类

6. 错误的情况

总结:

文章的4个贡献

1,新的loss函数

2,特征维度可以很稀疏128维

3,实验效果好,在公开的数据集上表现最好

4,需要的预处理比较少

--------------------- 
作者:RiweiChen 
来源:CSDN 
原文:https://blog.csdn.net/chenriwei2/article/details/45031677 
版权声明:本文为博主原创文章,转载请附上博文链接!

FaceNet: A Unified Embedding for Face Recognition and Clustering相关推荐

  1. 【读点论文】FaceNet: A Unified Embedding for Face Recognition and Clustering 人脸向量映射到一个特定空间后成为一种集成系统

    FaceNet: A Unified Embedding for Face Recognition and Clustering 大规模有效实施人脸验证和识别对当前方法提出了严峻挑战.在本文中,提出了 ...

  2. 论文研读 —— 5. FaceNet A Unified Embedding for Face Recognition and Clustering (1/3)

    文章目录 Authors and Publishment Authors Bibtex Categories 0. Abstract 1. Introduction 2. Related Work A ...

  3. 译文 FaceNet: A Unified Embedding for Face Recognition and Clustering

    摘要 Despite significant recent advances in the field of face recognition [10, 14, 15, 17], implementi ...

  4. 论文研读 —— 5. FaceNet A Unified Embedding for Face Recognition and Clustering (2/3)

    文章目录 3. Method 3.1. Triplet Loss 3.2. Triplet Selection 3.3. Deep Convolutional Networks 4. Datasets ...

  5. 论文笔记 | FaceNet: A Unified Embedding for Face Recognition and Clustering

    Authors Florian Schroff Dmitry Kalenichenko James Philbin Florian Schroff Abstract 本文提出了FaceNet syst ...

  6. 论文阅读 FaceNet: A Unified Embedding for Face Recognition and Clustering

    这篇文章提出了FaceNet系统,学习从人脸到欧式空间的映射,在欧氏空间中判断两幅图片的相似性.可以用来人脸验证.人脸识别以及聚类. 人脸验证:两个嵌入之间距离阈值化问题 人脸识别:k-NN分类问题 ...

  7. Triplet Loss: A Unified Embedding for Face Recognition and Clustering(论文阅读笔记)(2015CVPR)

    论文链接:<FaceNet: A Unified Embedding for Face Recognition and Clustering> 摘要 尽管人脸识别领域最近取得了重大进展[1 ...

  8. sphereface:deep hypersphere embedding for face recognition

    SphereFace算法详解_AI之路-CSDN博客_sphereface论文:SphereFace: Deep Hypersphere Embedding for Face Recognition ...

  9. 论文笔记:Embedding Graph Auto-Encoder with Joint Clustering via Adjacency Sharing

    前言 本文用GNN来学习适合于聚类任务的节点表示. 比较特别的是,本文同时考虑了K-Mean聚类和谱聚类来实现更好的聚类.提出了Embedding Graph Auto-Encoder with Jo ...

最新文章

  1. 【Groovy】json 字符串反序列化 ( 使用 JsonSlurper 进行 json 字符串反序列化 | 根据 map 集合构造相关类 )
  2. ecs 对比 本地服务器_ECS训练营Day03_SLB负载均衡实践 - 魔笔钨丝浣
  3. HTML/CSS 知识点
  4. 第十一届蓝桥杯省赛 C++组试题 第2题 求完数
  5. 2345联盟通过流氓软件推广挖矿工具, 众多用户电脑沦为“肉鸡”
  6. Ubuntu 修改主机名
  7. 独立同分布(iid)随机变量的一些趣题
  8. 学一门计算机语言大体的过程,学习一门新编程语言的6个步骤
  9. android 暗黑模式项目适配过程
  10. 代码审计:企业级web代码安全架构读书笔记(二)
  11. 电脑时间倒流,程序拒绝穿越:应用程序发生异常 未知的软件异常(0xe06d7363)
  12. python 优雅退出_Python学习教程:Python 使用 backoff 更优雅的实现轮询
  13. 产品经理如何进行复盘总结
  14. “重塑安全边界,揭秘零信任业务保障”,联软科技下一代零信任访问管理系统发布
  15. 中蜂几月份自然分蜂_中蜂养殖,如何给蜜蜂分蜂?时间是关键
  16. 小博无线认证无法连接服务器,常见问题FAQ一、设备绑定-小博无线.PDF
  17. labview虚拟心电监测系统_基于LabVIEW实现的心电监护系统
  18. 使用scrapy爬取qq音乐
  19. android app 的后台代码,包括后台的Android美食APP项目开源代码
  20. 网络爬虫爬取拉勾招聘网

热门文章

  1. python批量读取dat文件_python编写Windows环境下批量修改文件名
  2. java连接oracle增删改查,java连接oracle数据库实现增删改查
  3. 继爆款超级账本后,IBM再次推出新产品
  4. 燃爆了!天猫联合天一广场搞事情,800万宁波人坐不住了
  5. php创建多级目录完整封装类操作
  6. Android基础新手教程——1.5.2 Git之使用GitHub搭建远程仓库
  7. ebuild 中的软件包依赖
  8. android 实现全屏代码
  9. 用Python解“打印九九乘法表”题
  10. linux查看rabbitmq运行状态,RabbitMQ常用命令