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 ...
随机推荐
- Python计算一个项目中含有的代码行数
最近想要知道以前做过的project有多少行代码,因为文件太多,直接手工数效率太低,于是编写一个python程序用来计算一个project有多少代码行. 首先,在一个项目中,有很多子文件夹,子文件夹中 ...
- 013-Cookie状态保持
常用的状态(信息)保持方式(重点) ViewState: ASP.NET 的 .aspx页面特有,页面级的: 就是在页面上的一个隐藏域中保存客户端单独使用的数据的一种方式: 服务器端控件的值都自动保存 ...
- MYSQL 函数复习
数学函数 ABS(X) 返回X的绝对值 SQRT(x) 返回非负数X的二次方根 MOD(x,y) 返回x被y除后的余数 CEIL(x) ...
- Struts2的一个入门实例----登录功能
一.搭建环境与测试 1.web.xml文件,配置核心Filter 1: <?xml version="1.0" encoding="UTF-8"?> ...
- Angularjs^1.2.9 搜索关键字高亮显示
需求分析: 根据关键字搜索网页内容,并且高亮显示内容中的关键字细节分析: 1.每次执行搜索操作,需清空上一次结果 2.需区分html标签和正常文本内容,否则为关键字添加样式以后会出现标签内容被显示的情 ...
- HDU1494(dp)
跑跑卡丁车 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- 基于UDP协议的socket通信
服务器端: 1.创建DatagramSocket,指定端口号 2.创建DatagramPacket 3.接收客户端发送的数据信息 4.读取数据 客户端: 1.定义发送信息 2.创建DatagramPa ...
- 关于WIN10开机无法输入密码的问题
昨日,电脑 遇到了开机无法输入密码的问题,神烦. 作为一个计算狗,怎么能直接装系统(百度了一堆方法,装系统,果真万能)呢. 所以,深刻的分析了下. 1 .首先说明基本情况. 计算机品牌:ASUS 系统 ...
- Kafka 0.10 SocketServer源代码分析
1概要设计 Kafka SocketServer是基于Java NIO来开发的,采用了Reactor的模式,其中包含了1个Acceptor负责接受客户端请求,N个Processor负责读写数据,M个H ...
- IO的构造方法
package com.file; /* File的构造方法: File(String pathname); File(File parent,String child); File(String p ...