源码链接: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. (day52)四、视图层、模板层

    目录 一.视图层 (一)Request和Response对象 (1)Request对象 (2)Response对象 (二)JsonResponse对象 (1)前后端分离 (2)json_dumps_p ...

  2. html行级元素与块级元素以及meta标签的使用

    块级元素的特性: 永远都会占满父级元素的宽度(块级元素的宽度永远都等于它父级元素的宽度) 行级元素的特性: 所占的空间刚好等于内容的大小 常见的块级元素: h1~h6.p.ul.div.li.form ...

  3. NOIP模拟赛 迷路

    题目描述 Description \(FYH\) 在 \(ns\) 星系迷路了,情急之下,他找到了你.现在,解救 \(FYH\) 的重任就落在了你的肩上了. \(ns\) 星系有 \(n\) 颗星球, ...

  4. T-SQL 简介

    1. 变量说明语句:用来说明变量的命令. 2. 数据定义语言(Data Definition Language,DDL):用来建立数据库和定义列等数据结构,主要是create table,drop d ...

  5. RPC调用和HTTP调用的区别

    很长时间以来都没有怎么好好搞清楚RPC(即Remote Procedure Call,远程过程调用)和HTTP调用的区别,不都是写一个服务然后在客户端调用么?这里请允许我迷之一笑~Naive!本文简单 ...

  6. Vue 使用lodash库减少watch对后台请求压力

    lodash需要新引入 我使用的是npm方式 使用lodash的_.debounce方法 具体代码: <!doctype html> <html lang="en" ...

  7. WordPress更改“固定链接”后 ,页面出现404的解决方法

    一.Web服务器对应的是Nginx 解决方案:修改linux服务器下Nginx的配置文件,目录为:/usr/local/nginx/conf/nginx.conf, 也可以直接使用命令nginx -t ...

  8. Luogu P4585 [FJOI2015]火星商店问题

    颓文化课作业到很晚写篇博客清醒一下 首先我们仔细阅读并猜测了题意之后,就会想到一个暴力的线段树套可持久化0/1Trie的做法,但是它显然是过不去的 由于最近再做线段树分治的题,我们可以想到用线段树分治 ...

  9. Physically Based Shader Development for Unity 2017 Develop Custom Lighting Systems (Claudia Doppioslash 著)

    http://www.doppioslash.com/ https://github.com/Apress/physically-based-shader-dev-for-unity-2017 Par ...

  10. OpenGL ES 入门

    写在前面 记录一下 OpenGL ES Android 开发的入门教程.逻辑性可能不那么强,想到哪写到哪.也可能自己的一些理解有误. 参考资料: LearnOpenGL CN Android官方文档 ...