引子[编辑|编辑源代码]

   这篇wiki主要介绍facenet人脸相似比较的基本原理,另外两篇wiki主要介绍基于tensorflow实现facenet的准确率测试及源码解读。

  经过在网上的一番搜索,找到了facenet实现人脸聚类的论文和论文解读,以及github上根据facenet论文并结合tensorflow实现的开源代码。相关链接如下:

   facenet github实现   https://github.com/davidsandberg/facenetfacenet 论文  用A Unified Embedding for Face Recognition and Clustering这个名字在google中搜索既能找到facenet论文解读  http://blog.csdn.net/chenriwei2/article/details/45031677

facenet 简介[编辑|编辑源代码]

直接学习图像到欧式空间上点的映射,两张图像所对应的特征的欧式空间上的点的距离直接对应着两个图像是否相似。如下图:

上图一个简单的示例,其中图中的数字表示这图像特征之间的欧式距离,可以看到,图像的类内距离明显的小于类间距离,阈值大约为1.1左右。针对facenet原理将会在另一篇wiki中介绍。

facenet structure[编辑|编辑源代码]


如上图所示
batch :是指输入的人脸图像样本,这里的样本是已经经过人脸检测找到人脸并裁剪到固定尺寸(例如160x160)的图片样本。
Deep architecture:指的是采用一种深入学习架构例如imagenet历年冠军网络中的ZF,googlenet等。
L2 :是指特征归一化(使其特征的||f(x)||2=1,这里是2次方的意思。这样所有图像的特征都会被映射到一个超球面上)
Embeddings: 就是前面经过深度学习网络,L2归一化后生成的特征向量(这个特征向量就代表了输入的一张样本图片)
riplet Loss: 就是有三张图片输入的Loss(之前的都是Double Loss或者 是 SingleLoss)。直接学习特征间的可分性:相同身份之间的特征距离要尽可能的小,而不同身份之间的特征距离要尽可能的大。

googlenet 网络介绍

上一节提到的Deep architecture就是指深度网络,而论文中举例的就是googlelet网络。

GoogLeNet, 是google公司在推出的,获得了2014年ILSVRC挑战赛冠军,将Top5 的错误率降低到6.67%. 一个22层的深度网络,论文在http://arxiv.org/pdf/1409.4842v1.pdf

googlenet在基础的CNN卷积、池化、卷积、池化、全连接这样结构基础上做了一些变形处理。

下面从前几层举例介绍下:

其输入及卷积层的参数配置在论文中都有,这里主要是根据这些参数计算增加了些自己的理解。注意模型是从下到上看的

a, 第一个卷积层

原始数据,输入为224*224*3

第一层卷积层 conv1 ,pad是3,64个特征,7*7 步长为2,输出特征为 112*112*64,然后进行relu,有padding的,所以输出的计算公式为:

输出长度:Out = in/stride

输出宽度:Out = in/stride

b,线性整流函数(Rectified Linear Unit, ReLU),又称修正线性单元, 是一种人工神经网络中常用的激活函数(activation function),通常指代以斜坡函数及其变种为代表的非线性函数。

c,第一个池化层 经过pool1(红色的max pool) 进行pooling 3*3的核,步长为2, [(112 - 3+1)/2]+1 = 56 特征为56*56*64 , 然后进行norm。认为这里的池化层输出尺寸计算与卷积层一样。
其中LocalRespNormal的作用是归一化。其细节是对一个局部的输入区域进行的归一化(激活a被加一个归一化权重(分母部分)生成了新的激活b)。

d, Inception子网络
第三层开始时 inception module ,这个的思想受到使用不同尺度的Gabor过滤器来处理多尺度问题,inception module采用不同尺度的卷积核来处理问题。这里采用的是inception含降维模型。这个模型的作用如下:
1 . 采用不同大小的卷积核意味着不同大小的感受野,最后拼接意味着不同尺度特征的融合; 
2 . 之所以卷积核大小采用1、3和5,主要是为了方便对齐。设定卷积步长stride=1之后,只要分别设定pad=0、1、2,那么卷积之后便可以得到相同维度的特征,然后这些特征就可以直接拼接在一起了; 
3 . 文章说很多地方都表明pooling挺有效,所以Inception里面也嵌入了。 
4 . 网络越到后面,特征越抽象,而且每个特征所涉及的感受野也更大了,因此随着层数的增加,3x3和5x5卷积的比例也要增加。

Facenet 原理介绍相关推荐

  1. HDR sensor 原理介绍

    HDR sensor 原理介绍 一. HDR sensor 原理介绍 什么是sensor的动态范围(dynamic range): sensor的动态范围就是sensor在一幅图像里能够同时体现高光和 ...

  2. java语言的实现机制_JAVA语言之Java NIO的工作机制和实现原理介绍

    本文主要向大家介绍了JAVA语言之Java NIO的工作机制和实现原理介绍,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 前言 本文只简单介绍NIO的原理实现和基本工作流程 I/O和 ...

  3. 中兴SDH原理介绍及中兴E300网管介绍

    姓名 苟忠兴 培训课程 中兴SDH原理介绍及中兴E300网管介绍 培训心得 1. SDH概念: SDH(Synchronous Digital Hierarchy,同步数字体系)是一种将复接.线路传输 ...

  4. 【机器学习】多项式回归原理介绍

    [机器学习]多项式回归原理介绍 [机器学习]多项式回归python实现 [机器学习]多项式回归sklearn实现 在上一节中我们介绍了线性回归的原理,然后分别用python和sklearn实现了不同变 ...

  5. 计算机原理 英文版,计算机原理介绍英文版.doc

    计算机原理介绍英文版 Importing TrafficOverview This lesson demonstrates the traffic import capabilities of Mod ...

  6. heartbeat原理介绍

    heartbeat原理介绍 HeartBeat运行于备用主机上的Heartbeat可以通过以太网连接检测主服务器的运行状态,一旦其无法检测到主服务器的"心跳"则自动接管主服务器的资 ...

  7. 安检x光机原理计算机实现,安检x光机成像原理介绍

    安检x光机是我们都很熟悉的一种安检设备,但很少有人去了解安检x光机成像原理.本文将为大家介绍安检x光机成像原理. 安检x光机成像原理 安检x光机主要由X光管和X光机电源以及控制电路等组成,而X光管又由 ...

  8. php new对象 调用函数,关于JS中new调用函数的原理介绍

    这篇文章主要介绍了关于JS中new调用函数的原理介绍,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 JavaScript 中经常使用构造函数创建对象(通过 new 操作符调用一个函数) ...

  9. Springboot中的缓存Cache和CacheManager原理介绍

    一.背景理解 什么是缓存,为什么要用缓存? 程序运行中,在内存保持一定时间不变的数据就是缓存.简单到写一个Map,里面放着一些key,value数据,就已经是个缓存了.所以缓存并不是什么高大上的技术, ...

最新文章

  1. PLSQL的 dynamic sql小例子
  2. Ubuntu下常用命令
  3. C#中的多线程 - 并行编程 z
  4. linux设备模型的主要功能,Linux设备模型(3)
  5. CentOS 7.0安装配置Vsftp服务器
  6. 【AD】AD20差分等长布线
  7. USB HID学习:一点开发记录
  8. 表空间(tableSpace) 段(segment) 盘区(extent) 块(block) 关系
  9. php java openssl ras_php基于openssl的rsa加密解密示例
  10. Tomcat局域网多端口建立多网站
  11. 布局--------动态添加 相对布局
  12. 北京周末游周边 —— 延庆世园会
  13. 数字IC面试高频考点之跨时钟域信号处理
  14. 80核处理器_最受欢迎的处理器 酷睿i5-9400F果然霸榜了
  15. php laravel 教程,Laravel框架学习之新手教程
  16. oracle 毫秒时间换mysql_Mysql与Oracle常用时间格式的转换
  17. [Database] 关系型数据库中的MVCC是什么?怎么理解?原理是什么?MySQL是如何实现的?
  18. 【SQL】CAST()函数,(CAST AS decimal)
  19. window.print()打印指定页面内容
  20. 【教程】如何在微信公众号的菜单栏设置点击菜单一键导航

热门文章

  1. 音频频谱图(自定义View——进阶篇2)
  2. Leetcode|MySQL|数据库刷题记录(601~627)
  3. 国产骨传导耳机推荐,目前最好用的几款骨传导耳机
  4. 用Python人工智能识别图片-识别车牌号
  5. 5G来了,室内该如何覆盖?
  6. 我的世界(18)-精英怪物(InfernalMobs插件)
  7. springboot学习(七十三) springboot中使用springdoc替换swagger(springfox)
  8. Windows重定向技术【文件重定向与注册表重定向】
  9. 通过面试思考平时的学习
  10. linux shell编写脚本,执行命令同时操作多台主机