FaceNet : A Unified Embedding for Face Recognition and Clustering

Abstract

  • 学习一个从人脸图像到欧式空间的映射,欧式距离值与人脸相似度直接相关。
  • 采用深度卷积神经网络训练,使用元组最小化的方法来对相似匹配图像和不匹配图像进行分类。

  • 在LFW数据集上达到99.63%正确率,在YTF DB数据集上达到95.12%正确率

1. Introduction

Euclidean embedding:faces of the same person have small distances and faces of

distinct people have large distances.同一人的脸距离小,不同人的脸距离大。

face verification→thresholding the distance between the two embeddings.用阈值判断两个映射距离(判断是不是同一人)

recognition → k-NN classification problem.识别人脸变为k近邻分类问题。

KNN是一种基于实例的学习,通过计算新数据与训练数据特征值之间的距离,然后选取K(K>=1)个距离最近的邻居进行分类判断(投票法)或者回归。KNN是一种监督学习算法。

KNN算法的过程为:

  1. 选择一种距离计算方式, 通过数据所有的特征计算新数据与已知类别数据集中的数据点的距离
  2. 按照距离递增次序进行排序,选取与当前距离最小的k个点
  3. 对于离散分类,返回k个点出现频率最多的类别作预测分类;对于回归则返回k个点的加权值作为预测值

KNN分类

训练样本是多维特征空间向量,其中每个训练样本带有一个类别标签(喜欢或者不喜欢、保留或者删除)。分类算法常采用“多数表决”决定,即k个邻居中出现次数最多的那个类作为预测类。在进行分类时将K个邻居到测试点的距离考虑进去。

举例,K=5,计算出新数据点到最近的五个邻居的举例是(1,3,3,4,5),五个邻居的类标签是(yes,no,no,yes,no)

若是按照多数表决法,则新数据点类别为no(3个no,2个yes);若考虑距离权重类别则为yes(no:2/3+1/5,yes:1+1/4)距离越大,权重越小。

clustering →using off-the-shelf (现成)techniques such as k-means or
agglomerative clustering.

k-means聚类算法

聚类属于无监督学习,样本中没有给定标签y,只有特征x,聚类的目的是找到每个样本x潜在的类别y,并将同类别y的样本x放在一起。
K-means算法是将样本聚类成k个簇(cluster),具体算法描述如下:


改进:

LMNN :large margin nearest neighbour
:大间隔近邻分类,基本原理是通过优化目标函数,在测试样本的邻域范围内,使得同类点的距离变小,不同类点用一个尽可能大的间隔隔开。(有监督)

agglomerative clustering
:这是一个自下而上的凝聚层次聚类方法。最初,每个元素都是一个单独类,通过算法将两个最近的类合并成一个较大的类,直到形成一个最大包含所有元素的类。

canopy clustering
:http://www.cnblogs.com/shipengzhi/articles/2540514.html

Stage1、聚类最耗费计算的地方是计算对象相似性的时候,Canopy
Method在第一阶段选择简单、计算代价较低的方法计算对象相似性,将相似的对象放在一个子集中,这个子集被叫做Canopy
,通过一系列计算得到若干Canopy,Canopy之间可以是重叠的,但不会存在某个对象不属于任何Canopy的情况,可以把这一阶段看做数据预处理;

通过Stage1得到的Canopy 个数完全可以作为K-means聚类方法的K值(质心个数),一定程度上减少了选择K的盲目性。

Stage2、在各个Canopy 内使用传统的聚类方法(如K-means),不属于同一Canopy 的对象之间不进行相似性计算。

训练了两种模型:

  1. Zeiler&Fergus:multiple interleaved layers of convolutions, non-linear activations, local response normalizations, and max pooling layers.
  2. Inception :mixed layers that run several different convolutional and pooling layers in parallel and concatenate their responses. (书上有)

3. Method

Triplet Loss :对一个特定的人来说,我们想要保证的是anchor 和所有positive样本(同一人)的距离比跟任意negative样本(不同人)的距离都要近

alpha作为一个边界或阈值,用来增加a_p对和a_n对的距离差。

损失函数(最小化) :

怎样选取triplet至关重要,决定模型能否快速收敛。为了有效训练模型,我们的想法是找到距离最远的a_p对(hard positive)和距离最近的a_n对(hard negative),通过最小化损失函数,不断更新模型参数(即样本间距),使其满足公式1条件。但在整个训练集上找到上述三元组是不现实的,这里提出两种策略:

  1. 线下每n步生成三元组,用checkpoint算法计算最大值和最小值。
  2. 在线生成数组,在一个mini-batch数据中寻找hard positive/negative

这里采用第二种策略,使用比较大的mini-batch,包含几千样本。在每一个mini-batch中,每种身份都存在少量样本,这样每个身份中a_p距离才有代表性。在实验中每个mini-batch 中每个身份有40个人脸样本,负样本随机采样添加进来。在实践中发现不需通过样本比较寻找hard positive,而是将整个mini-batch中的所有a-p对参与计算,这样在训练早期收敛的更快且更稳定。

semi-hard (避免陷入坏的局部最优解):

FaceNet 读书笔记相关推荐

  1. 【读书笔记】知易行难,多实践

    前言: 其实,我不喜欢看书,只是喜欢找答案,想通过专业的解答来解决我生活的困惑.所以,我听了很多书,也看了很多书,但看完书,没有很多的实践,导致我并不很深入在很多时候. 分享读书笔记: <高效1 ...

  2. 读书笔记:编写高质量代码--web前端开发修炼之道(二:5章)

    读书笔记:编写高质量代码--web前端开发修炼之道 这本书看得断断续续,不连贯,笔记也是有些马虎了,想了解这本书内容的童鞋可以借鉴我的这篇笔记,希望对大家有帮助. 笔记有点长,所以分为一,二两个部分: ...

  3. 《编程匠艺》读书笔记

    <编程匠艺>读书笔记之一 <编程匠艺>读书笔记之二 <编程匠艺>读书笔记之三 <编程匠艺>读书笔记之四 <编程匠艺>读书笔记之五 <编 ...

  4. 《Java: The Complete Reference》等书读书笔记

    春节期间读了下<Java: The Complete Reference>发现这本书写的深入浅出,我想一个问题,书中很多内容我们也知道,但是为什么我们就写不出这样一本书,这么全面,这么系统 ...

  5. oracle直查和call哪个更快,让oracle跑的更快1读书笔记二

    当前位置:我的异常网» 数据库 » <>读书笔记二 <>读书笔记二 www.myexceptions.net  网友分享于:2013-08-23  浏览:9次 <> ...

  6. 《JavaScript面向对象精要》读书笔记

    JavaScript(ES5)的面向对象精要 标签: JavaScript 面向对象 读书笔记 2016年1月16日-17日两天看完了<JavaScript面向对象精要>(参加异步社区的活 ...

  7. 《The Art of Readable Code》 读书笔记 01

    放假前在学校图书馆借了一本新书<The Art of Readable Code>,寒假回来看看,写写其中的Key Idea .summary和一些读书笔记. Preface 前言部分主要 ...

  8. 读书笔记(2) OpenLayers中的图层

    OpenLayers有多个不同的图层类,每一个都可以连接到不同的地图服务器.例如通过Layer.WMS类可以连接到WMS地图服务器,通过Layer.Google类可以连接到谷歌地图服务器.OpenLa ...

  9. 《Microsoft Sql server 2008 Internals》读书笔记--第九章Plan Caching and Recompilation(10)

    <Microsoft Sql server 2008 Internals>读书笔记订阅地址: http://www.cnblogs.com/downmoon/category/230397 ...

最新文章

  1. shell编程之数学运算
  2. files函数提取文件名HTML,Javascript – 如何从文件input控件提取文件名
  3. 使用onnx包将pth文件转换为onnx文件
  4. 真・WPF 按钮拖动和调整大小
  5. Debian下PostgreSQL修改密码与配置详解
  6. node mysql 模块 封装_node.js基于工厂方法的mysql模块封装
  7. Bailian4140 方程求解【二分法】
  8. python画散点图-python学习之matplotlib绘制散点图实例
  9. 实时统计分析技术浅谈
  10. 记一次LeetCode中文版打不开的情况
  11. 画图工具的认识及应用计算机,认知画图软件教学设计
  12. 腾讯云安装mysql_详解腾讯云CentOS7.0使用yum安装mysql及使用遇到的问题
  13. 能量英语(一)之激情英语
  14. 如何在Python中调用C++程序?(文中以Opencv为例,在Python中调用C++的Opencv)
  15. [jzoj5791]【NOIP2008模拟】阶乘 (数学)
  16. 15支持哪些数据库版本 tfs_版本和支持的功能 - SQL Server 2016 | Microsoft Docs
  17. Configuring incomplete, errors occurred!
  18. 计算机组成原理——数据通路实例
  19. 【2022】较为全面的AlexNet总结
  20. ssm框架搭建之ss框架

热门文章

  1. matlab中的方波信号图片_MATLAB| 望远镜分辨率amp;艾里斑的模拟
  2. 谷歌浏览器输入不安全网址点高级后没有继续前往链接解决办法
  3. 每日LeetCode一道题————有效的数独
  4. acm竞赛java很少,Java多线程在ACM竞赛中的应用
  5. 冒泡法排序(从小到大)
  6. 迪文串口屏幕DMG10600T101_01WTR实现图片切换并和串口通讯
  7. webshell检测方式深度剖析---RASP(taint扩展)
  8. 看在钱的份上,请你不要忽视算法
  9. 为什么用于开关电源的开关管一般用MOS管而不是三极管
  10. SystemUI 布局