论文阅读之FaceNet: A Unified Embedding for Face Recognition and Clustering
名称:FaceNet: A Unified Embedding for Face Recognition and Clustering
时间:2015.04.13
来源:CVPR 2015
来自谷歌的一篇文章,这篇文章主要讲述的是一个利用深度学习来进行人脸识别的方法,目前在LFW上面取得了最好的成绩,识别率为99.63%。传统的基于CNN的人脸识别方法为:利用CNN的Siamese网络来提取人脸特征,然后利用SVM等方法进行分类。而本篇文章提出了一个方法叫做FaceNet,它直接学习图像到欧式空间上点的映射,其中两张图像对应的特征的欧式空间的距离用来直接判断两张图片的相似度。这篇文章的最大创新点是提出了不同的损失函数,直接优化特征本身,用特征空间上点的距离来判断两张图片是否是同一类。

上图是文章中所采用的网络结构,其中可以看出,其中,前面部分跟CNN是相同的,只是后面接一个特征归一化(使其特征的||f(x)||2=1,这样子,所有图像的特征都会被映射到一个超球面上),接着再去优化这些特征,而文章这里提出了一个新的损失函数(优化函数),而这也是文章最大的特点所在。
什么是Triplet Loss呢,顾名思义也就是有三张图片输入的Loss(之前的都是Double Loss或者是 Single Loss),本文直接学习特征间的可分性:相同身份之间的特征距离要尽可能的小,而不同身份之间的特征距离要尽可能的大。
对于Triple loss如下图所示

意思就是通过学习,使得类间距离要大于类内的距离,Anchor为 系统选定的锚点。
优化函数为

上式表达的含义是左边类内的距离加上边际数值α要小于右边类间的距离,这个约束要在所有的Triplet图像对上都成立,那么损失函数为

在上式中,如果严格按照上式进行学习的话,它的T(穷举所有的图像3元组)是非常巨大的。
FE:在一个1000人,没人有20张图片的情况下,其所有的可能组合为T=10002020999。O(T)=NN,所以穷举是很困难的,那么我们该如何从这么多的图像中挑选呢?答案是选择最难区分的图像对。
给定一张人脸图片,我们要挑选其中的一张hard positive:即另外19张图像中,跟它最不相似的图片,同时选择一张hard negative:即在20*999张图像中跟它最为相似的图片。挑选hard positive和hard negative有两种方法,offline和online方法,具体的差别只在训练上。本文采用的是在线的方式,在min-batch中挑选所有的anchor positive图像对,同时依然选择最为困难的anchor negative图像对。
那么我们的问题就转为为了如何悬着最为困难的负样本,在实际训练中容易导致很快的陷入局部最优。为了避免这个问题,在选择negative的时候,使其满足式3,把这个约束称为半约束:

论文阅读之FaceNet: A Unified Embedding for Face Recognition and Clustering的更多相关文章
- [论文阅读笔记] Structural Deep Network Embedding
[论文阅读笔记] Structural Deep Network Embedding 本文结构 解决问题 主要贡献 算法原理 参考文献 (1) 解决问题 现有的表示学习方法大多采用浅层模型,这可能不能 ...
- [论文阅读笔记] Unsupervised Attributed Network Embedding via Cross Fusion
[论文阅读笔记] Unsupervised Attributed Network Embedding via Cross Fusion 本文结构 解决问题 主要贡献 算法原理 实验结果 参考文献 (1 ...
- [论文阅读笔记] GEMSEC,Graph Embedding with Self Clustering
[论文阅读笔记] GEMSEC: Graph Embedding with Self Clustering 本文结构 解决问题 主要贡献 算法原理 参考文献 (1) 解决问题 已经有一些工作在使用学习 ...
- 论文阅读:CNN-RNN: A Unified Framework for Multi-label Image Classification
CNN-RNN: A Unified Framework for Multi-label Image Classification Updated on 2018-08-07 22:30:41 Pap ...
- 【CV论文阅读】YOLO:Unified, Real-Time Object Detection
YOLO的一大特点就是快,在处理上可以达到完全的实时.原因在于它整个检测方法非常的简洁,使用回归的方法,直接在原图上进行目标检测与定位. 多任务检测: 网络把目标检测与定位统一到一个深度网络中,而且可 ...
- 【CV论文阅读】Two stream convolutional Networks for action recognition in Vedios
论文的三个贡献 (1)提出了two-stream结构的CNN,由空间和时间两个维度的网络组成. (2)使用多帧的密集光流场作为训练输入,可以提取动作的信息. (3)利用了多任务训练的方法把两个数据集联 ...
- 论文阅读 | Recurrent Attentional Reinforcement Learning for Multi-label Image Recognition
源地址 arXiv:1712.07465: Recurrent Attentional Reinforcement Learning for Multi-label Image Recognition ...
- [论文阅读]VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION(VGGNet)
VGGNet由牛津大学的视觉几何组(Visual Geometry Group)提出,是ILSVRC-2014中定位任务第一名和分类任务第二名.本文的主要贡献点就是使用小的卷积核(3x3)来增加网络的 ...
- [论文阅读笔记] Fast Network Embedding Enhancement via High Order Proximity Approximati
[论文阅读笔记] Fast Network Embedding Enhancement via High Order Proximity Approximation 本文结构 解决问题 主要贡献 主要 ...
随机推荐
- 在线http模拟工具
在线http模拟工具http://www.atool.org/httptest.php
- python学习:python打包成exe
1) 安装pyinstaller pip install pyinstaller 目前已经支持 python 3.7 版本 2) 打开cmd窗口,进入到要打包的python文件所在目录, pyinst ...
- BladeX部署说明(win7)
一:安装jdk-8u221-windows-x64 二:安装Nacos,解压nacos-server-1.0.0,运行bin目录下的startup.cmd,成功可以用浏览器访问:localhost:8 ...
- Anti Pattern - ThreadLocal variables with Thread Pool(转)
In a previous post, I wrote the usage and benefits of ThreadLocal based instance variables in concur ...
- 从零开始封装React UI 组件库并发布到NPM
github 开源地址:zswui github 说明文档:wiki 1.新建目录wui (1)进入到 wui 目录 执行 npm init 命令初始化项目.更具提示信息填充将会生成的 package ...
- 分类:logistic回归
import numpy as np import matplotlib.pyplot as plt x=np.linspace(-1,1,200) y=1/(1+np.exp(10*x-1)) pl ...
- TS - 问题解决力 - 下篇
本文是已读书籍的内容摘要,少部分有轻微改动,但不影响原文表达. <麦肯锡工作法 - 个人竞争力提升50%的7堂课> ISBN: 9787508644691 https://book.dou ...
- C# .NET UDP 形式调用 graylog,gelf
-- 发送: GelfLogModel m = new GelfLogModel(); m.version = "1.1"; m.host = "128.0.14.39& ...
- 有关_meta内容(持续更新)
假设在models里创建了一个类:UserInfo model.UserInfo._meta.app_label #获取该类所在app的app名称 model.UserInfo._meta.model ...
- List<E>
List<E>——列表 有序,存储和读取的顺序是一致的 由整数索引 允许重复 add(int index,E element)——将元素插入指定位置 get(int index)——获取指 ...