源码链接:https://github.com/davidsandberg/facenet

论文链接:https://arxiv.org/pdf/1503.03832.pdf

B站大神视频解读论文:https://www.bilibili.com/video/av17281188

FaceNet是一个用于人脸识别的网络。关于人脸,往往分为2个任务:

1.人脸检测(在图中找到人脸,找特征,矫正)

2.人脸识别(看看这是谁)

在本系列的随笔里,人脸检测使用MTCNN,人脸识别采用FaceNet。下面就谈谈FaceNet.

FaceNet的3个任务

  • 人脸判断(是不是这个人,是?不是)
  • 人脸识别(这人是谁?)
  • 人脸聚类(和这张脸相似的脸有哪些?)

FaceNet的大致流程

(经提取的,无需矫正)待判断人脸 -> FaceNet网络 -> embedding(脸的特征向量)

--- 任务1 ---> 和已知人脸的特征向量求L2距离 -> 距离小于阈值就是同一张脸。

--- 任务2 ---> KNN最近邻分类,求是谁的脸(最近邻检索,参考其他随笔)。

--- 任务3 ---> K-means聚类,求相似的脸集合。

FaceNet的技术

上面可以看出,最核心的,应该就是FaceNet网络怎么设计了。3个任务,都是在网络输出的  有代表性的  脸特征embedding 的基础上,使用传统的一些技术实现的。

FaceNet的技术之一:

  • 三元组 triplets

所谓的 triplets,可见我的随笔“04-人脸识别-triplets loss 的解释(转载)

在使用中,一个训练数据样本由3张图组成:

(anchor-要判定的脸,positive-和anchor一类的脸,negative-和anchor不同类的脸)

这就是一个 triplet 。

FaceNet的技术之二:

  • Triplets Loss 损失函数

可见我的随笔“04-人脸识别-triplets loss 的解释(转载)

这里,triplet 中的核心,是anchor。

04-随笔中,L函数=0的意义,就是 anchor 到 positive 的距离+alpha <= anchor 到 negative 的距离。这就我们想要的结果。也就是优化的方向。

所以呢,在FaceNet的网络设计中,将训练数据和损失函数,都使用了以上的两种新技术。这是一个改进。

那接下来就要谈谈,网络是怎么设计的。

FaceNet的网络可以是什么样的

FaceNet其实不是一种网络,它应该是使用了以上2个技术,在各种 CNN(AlexNet/GoogleNet...)基础上,修改的一系列的网络。所以,在论文中,作者测试了各种网络,提出来在数据中心(data center)使用的“巨型”网络,也有能在手机上跑的小型网络。小型网络,我会在后续的随笔中,测试一下。

那,简单的说,使用的网络,就是各种 CNN 网络的修改。(我是这么理解的,如有不当,请指出,谢谢)

FaceNet的训练过程

关于训练,其实有很多注意事项,因为修改了 损失函数形式 以及 数据样本的格式。

  • 样本挑选

为什么要挑,因为 loss 函数太容易等于零了(回看一下04随笔,L函数等于零,对大多数样本都满足)。

hard-positive样本:positive 到 anchor 的距离反常(太大)

hard-negative样本:negative 到 anchor 的距离反常(太小)

但是

用 hard-positive 样本容易陷入局部最优。

用 hard-negative 样本(有些是标注错误、拍照不好等),会造成训练失败。

所以,又调整了一下

用所有 positive 样本

在hard-negative 样本中加了限制:anchor 到 negative 必须 > anchor 到 positive,得到 semi-negative。

最终采用的:所有positive样本 + 部分 semi-negative 样本

具体训练过程,将在后续的随笔中给出。

这里只是感性认识,实践方出真知。

05-人脸识别-FaceNet的感性认识的更多相关文章

  1. TensorFlow环境 人脸识别 FaceNet 应用(一)验证测试集

    TensorFlow环境 人脸识别 FaceNet 应用(一)验证测试集 前提是TensorFlow环境以及相关的依赖环境已经安装,可以正常运行. 一.下载FaceNet源代码工程 git clone ...

  2. 第三十七节、人脸检测MTCNN和人脸识别Facenet(附源码)

    在说到人脸检测我们首先会想到利用Harr特征提取和Adaboost分类器进行人脸检测(有兴趣的可以去一看这篇博客第九节.人脸检测之Haar分类器),其检测效果也是不错的,但是目前人脸检测的应用场景逐渐 ...

  3. 人脸识别FaceNet+TensorFlow

    一.本文目标 利用facenet源码实现从摄像头读取视频,实时检测并识别视频中的人脸.换句话说:把facenet源码中contributed目录下的real_time_face_recognition ...

  4. facenet 进行人脸识别测试

    1.简介:facenet 是基于 TensorFlow 的人脸识别开源库,有兴趣的同学可以扒扒源代码:https://github.com/davidsandberg/facenet 2.安装和配置 ...

  5. facenet 人脸识别(二)——创建人脸库搭建人脸识别系统

    搭建人脸库 选择的方式是从百度下载明星照片 照片下载,downloadImageByBaidu.py # coding=utf-8 """ 爬取百度图片的高清原图 &qu ...

  6. facenet 人脸识别(一)

    前言 已完成TensorFlow Object Detection API环境搭建,具体搭建过程请参照: 安装运行谷歌开源的TensorFlow Object Detection API视频物体识别系 ...

  7. OpenCV 学习笔记 05 人脸检测和识别 AttributeError: module 'cv2' has no attribute 'face'

    1 环境设置: win10 python 3.6.8 opencv 4.0.1 2 尝试的方法 在学习人脸识别中,遇到了没有 cv2 中没有 face 属性.在网上找了几个方法,均没有成功解决掉该问题 ...

  8. OpenCV 学习笔记 05 人脸检测和识别

    本节将介绍 Haar 级联分类器,通过对比分析相邻图像区域来判断给定图像或子图像与已知对象是否匹配. 本章将考虑如何将多个  Haar 级联分类器构成一个层次结构,即一个分类器能识别整体区域(如人脸) ...

  9. FaceNet---深度学习与人脸识别的二次结合

    今天我给大家带来一篇来自谷歌的文章,众所周知,谷歌是全世界最有情怀,最讲究技术的公司,比我们天朝的莆田广告商良心多了.还有就是前段时间的最强大脑,莆田广告商的那个小机器,也就忽悠忽悠行外人了,懂的人深 ...

随机推荐

  1. k-means实战-RFM客户价值分群

    数据挖掘的十大算法 基本概念 导入数据集到mysql数据库中 总共有940个独立消费数据 K-Means 算法 K-Means 算法是一个聚类算法.你可以这么理解,最终我想把物体划分成 K 类.假设每 ...

  2. 第05组团队Github现场编程实战

    第05组团队Github现场编程实战 一.组员职责分工 组员 分工 卢欢(组长) 前后端接口设计 严喜 寻找相关资料 张火标 设计并描述界面原型 钟璐英 编写随笔 周华 填写完善文档 古力亚尔·艾山 ...

  3. CentOS 下安装 Cmake 步骤

    最近在虚拟机中的 CentOS 中安装 Cmake.把安装步骤记录在此. 什么是 Cmake CMake 是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程).他能够输出各 ...

  4. HTML+CSS基础 权重的计算 权重计算规则

    权重的计算 将选择器上面的选择器进行叠加,叠加后的总和就是该选择器的权重. 权重计算规则

  5. 【前端知识体系-JS相关】ES6专题系列总结

    1.如何搭建ES6的webpack开发环境? 安装Node环境 node -v // 10.14.1 安装NPM环境 npm -v // 6.4.1 安装babel npm install @babe ...

  6. python asyncio asyncio wait

    import asyncio import time async def get_html(url): print("start get url") await asyncio.s ...

  7. 解决java,C#,php,python MD5加密不一致问题

    JAVA写法 public static String md5Base64(final String str, final String key) throws Exception { if ((nu ...

  8. 在Visual Studio 中使用 <AutoGenerateBindingRedirects> 来解决引用的程序集版本冲突问题

    问题: https://stackoverflow.com/questions/42836248/using-autogeneratebindingredirects-in-visual-studio ...

  9. Python - 正则表达式2 - 第二十三天

    Python3 正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. ...

  10. Python - 面向对象 - 第二十天

    Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触过 ...