FaceNet---深度学习与人脸识别的二次结合
今天我给大家带来一篇来自谷歌的文章,众所周知,谷歌是全世界最有情怀,最讲究技术的公司,比我们天朝的莆田广告商良心多了。还有就是前段时间的最强大脑,莆田广告商的那个小机器,也就忽悠忽悠行外人了,懂的人深深知道。感觉自己就是黑子,当然,最强大脑节目组本身就是演员。
传统的进行人脸识别的模型一般都是这样:



但是现在我们要换个思路了,facenet直接学习图像到欧式空间上的映射,那么如果两张图片在欧式空间的距离很近,是不是说明就是很相似?如果离得远就不相似,也就不是同一个人?
下面的图详细的说明了,具体过程。

你看如果是一个人的照片,他们的距离就会低于这个阀值,此处应该是1.05左右。这个有点类似于LDA的思想了。类内的距离就小,类间的距离就大,其实本质上并没有什么差别。
Facenet的结构如下图:

前面就是一个传统的卷积神经网络,然后在求L2范数之前进行归一化,就建立了这个嵌入空间,最后的损失函数,就是本文的最大亮点。
Triplet loss三重损失函数:以前我们的损失函数一般都是一个的,或者是两个的。这里弄三个,结构图如下:

我来带大家理解这个结构图。现在我们有一个样本名字叫anchor,还有两个样本名字叫positive,另外一个叫Negative。一开始啊,我们都以为这个三个人是亲兄弟,但是呢Negative一个是隔壁老王的,而且这个人和我们的Anchor关系很好,这不行,这是仇人的孩子,我们得让这两个人远离,于是我们就让神经网络学习,让positive和anchor近一点,让Negative滚蛋。(当然例子可能取的不恰当,还请见谅,哈哈)
课外补充:在高维或者无穷维中,距离的度量没有意义的,因为他们都在一个超球面上,你又如何度量他们的远近呢(这就是为什么不能直接用KNN分类的原因,他在处理高维数据就玩不转了),所以我们才要用深度卷积神经网络进行训练啊,至于其中的原理,神经网络就是一个黑匣子,我不懂啊,鬼知道他是怎么玩的。
记住下面的所有数据都是经过归一化的,没有经过归一化求距离就是胡扯!
,
和
分别代表三个不同的样本,我们一定想要:

这个
是我们前面所说的参数。
那么我们的优化函数就出来了:

优化问题解决:
但是呢,知道这些还不够,为什么呢,一个算法的优劣,还要通过他的时间复杂度来判断,这里一定要确保他的收敛速度。
那么我们怎做呢,其实也很简单,假设给你一个anchor,我们找一个positive就要在这一类中找到一个最难分类的,什么样叫最难分类呢,就是在欧式空间距离最远的那个,但是属于一类,这叫hard_positive,另外找nepositive那就找最近的,这样不就完美解决了么。当然在找nepositive很容易产生局部最优,所以我们要满足:
。这叫semi-hard,防止找到他一类里了。
本文的CNN结构:
一种是来自M. D. Zeiler and R. Fergus. Visualizing and understanding convolutional networks. CoRR, abs/1311.2901, 2013. 2, 4, 6。
结构:

另一种来自:C. Szegedy, W. Liu, Y. Jia, P. Sermanet, S. Reed,D. Anguelov, D. Erhan, V. Vanhoucke,and A. Rabinovich.Going deeper with convolutions. CoRR, abs/1409.4842,2014. 2, 4, 5, 6, 9
结构:

结果在LFW上正确率很高,在这里我就不说了。
论文:FaceNet: A Unified Embedding for Face Recognition and Clustering
FaceNet---深度学习与人脸识别的二次结合的更多相关文章
- 基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【二】人脸预处理
前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...
- 基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【一】如何配置caffe属性表
前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...
- 基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【三】VGG网络进行特征提取
前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...
- 基于深度学习的人脸识别系统系列(Caffe+OpenCV+Dlib)——【四】使用CUBLAS加速计算人脸向量的余弦距离
前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...
- 基于深度学习的人脸识别系统Win10 环境安装与配置(python+opencv+tensorflow)
一.需要下载的软件.环境及文件 (由于之前见识短浅,对Anaconda这个工具不了解,所以需要对安装过程做出改变:就是Python3.7.2的下载安装是可选的,因为Anaconda已经为我们解决Pyt ...
- 基于深度学习的人脸性别识别系统(含UI界面,Python代码)
摘要:人脸性别识别是人脸识别领域的一个热门方向,本文详细介绍基于深度学习的人脸性别识别系统,在介绍算法原理的同时,给出Python的实现代码以及PyQt的UI界面.在界面中可以选择人脸图片.视频进行检 ...
- face recognition[翻译][深度学习理解人脸]
本文译自<Deep learning for understanding faces: Machines may be just as good, or better, than humans& ...
- 深度学习课程笔记(十二) Matrix Capsule
深度学习课程笔记(十二) Matrix Capsule with EM Routing 2018-02-02 21:21:09 Paper: https://openreview.net/pdf ...
- 【OCR技术系列之四】基于深度学习的文字识别(3755个汉字)
上一篇提到文字数据集的合成,现在我们手头上已经得到了3755个汉字(一级字库)的印刷体图像数据集,我们可以利用它们进行接下来的3755个汉字的识别系统的搭建.用深度学习做文字识别,用的网络当然是CNN ...
随机推荐
- fiddler 路由设置
REGEX:^http://data.51buy.com/biz/oppmsmobile/web/js/app/(.+)/(.+).js E:\svns\new\dev\webapp\data_ics ...
- WebStorm界面出现中文乱码(出现口口口)
不少刚刚使用WebStorm软件的童鞋,发现在新建一个项目时,如果输入中文,会显示成口口口.这个问题要怎么解决呢... 点一下界面上那个扳手图标(settings),快捷键Ctrl+Alt+S. 2 ...
- thinkPHP 模板中的语法
一.导入CSS和JS文件 1.css link js scr <link rel='stylesheet' type='text/css' href='__PUB ...
- Webx3学习笔记(2)——基本流程
Webx3项目是运行在jetty/tomcat这种Web应用容器中的,Web应用的模式都是请求-响应的.一个请求通过浏览器发出,封装为HTTP报文到达服务端,被容器接受到,封装为HttpRequest ...
- 管理维护Replica Sets
1.读写分离 有一些第三方的工具,提供了一些可以让数据库进行读写分离的工具.我们现在是否有一个疑问,从库要是能进行查询就更好了,这样可以分担主库的大量的查询请求. 1. 先向主库中插入一条测试数据 2 ...
- MyBatis CRUD Java POJO操作
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC ...
- Oracle中 Instr 这个函数
http://www.jb51.net/article/42369.htm sql :charindex('字符串',字段)>0 charindex('administrator',MUserI ...
- 【puthon基础】之str类字符串
str类字符串是不可变对象 1.创建字符串 s1 = str() #创建一个空字符串 s2 = str("hello") #创建字符串"hello" 2.处理字 ...
- 有趣的++i和i++
作为一个天天和代码“约会”的人来说i++和++i这玩意再熟悉不过了,因为使用频率太高了. 虽然如此,但也未必见得我们真的了解她,不妨猜猜下面的输出结果. #inlcude <stdio.h> ...
- C# 基于DotRas的VPN管理
由于工作环境有部分网址被公司屏蔽,特意做了个VPN管理工具,在想访问公司被屏蔽的网址时就开启连接,不用时就关掉.对于做安卓开发的或者.net core类库更新还是很方便的,现在把运行效果展示一下: 点 ...