05-人脸识别-FaceNet的感性认识
源码链接: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的感性认识的更多相关文章
- TensorFlow环境 人脸识别 FaceNet 应用(一)验证测试集
TensorFlow环境 人脸识别 FaceNet 应用(一)验证测试集 前提是TensorFlow环境以及相关的依赖环境已经安装,可以正常运行. 一.下载FaceNet源代码工程 git clone ...
- 第三十七节、人脸检测MTCNN和人脸识别Facenet(附源码)
在说到人脸检测我们首先会想到利用Harr特征提取和Adaboost分类器进行人脸检测(有兴趣的可以去一看这篇博客第九节.人脸检测之Haar分类器),其检测效果也是不错的,但是目前人脸检测的应用场景逐渐 ...
- 人脸识别FaceNet+TensorFlow
一.本文目标 利用facenet源码实现从摄像头读取视频,实时检测并识别视频中的人脸.换句话说:把facenet源码中contributed目录下的real_time_face_recognition ...
- facenet 进行人脸识别测试
1.简介:facenet 是基于 TensorFlow 的人脸识别开源库,有兴趣的同学可以扒扒源代码:https://github.com/davidsandberg/facenet 2.安装和配置 ...
- facenet 人脸识别(二)——创建人脸库搭建人脸识别系统
搭建人脸库 选择的方式是从百度下载明星照片 照片下载,downloadImageByBaidu.py # coding=utf-8 """ 爬取百度图片的高清原图 &qu ...
- facenet 人脸识别(一)
前言 已完成TensorFlow Object Detection API环境搭建,具体搭建过程请参照: 安装运行谷歌开源的TensorFlow Object Detection API视频物体识别系 ...
- OpenCV 学习笔记 05 人脸检测和识别 AttributeError: module 'cv2' has no attribute 'face'
1 环境设置: win10 python 3.6.8 opencv 4.0.1 2 尝试的方法 在学习人脸识别中,遇到了没有 cv2 中没有 face 属性.在网上找了几个方法,均没有成功解决掉该问题 ...
- OpenCV 学习笔记 05 人脸检测和识别
本节将介绍 Haar 级联分类器,通过对比分析相邻图像区域来判断给定图像或子图像与已知对象是否匹配. 本章将考虑如何将多个 Haar 级联分类器构成一个层次结构,即一个分类器能识别整体区域(如人脸) ...
- FaceNet---深度学习与人脸识别的二次结合
今天我给大家带来一篇来自谷歌的文章,众所周知,谷歌是全世界最有情怀,最讲究技术的公司,比我们天朝的莆田广告商良心多了.还有就是前段时间的最强大脑,莆田广告商的那个小机器,也就忽悠忽悠行外人了,懂的人深 ...
随机推荐
- echarts使用------地图生成----省市地图的生成及其他相关细节调整
为使用多种业务场景,百度echarts地图示例只有中国地图,那么在使用省市地图的时候,就需要我们使用省市的地图数据了 以下为陕西西安市的地图示例: 此页面引用echarts的js:http://ech ...
- flexible.js 布局详解
原文链接:http://caibaojian.com/flexible-js.html 本文讲的通过flexible.js实现了rem自适应,有了flexible.js,我们就不必再为移动端各种设备兼 ...
- Vue.js 源码分析(十七) 指令篇 v-if、v-else-if和v-else 指令详解
v-if 指令用于条件性地渲染一块内容.这块内容只会在指令的表达式返回true值的时候被渲染. v-else-if,顾名思义,充当 v-if 的“else-if 块”,可以连续使用: 也可以使用 v- ...
- fastadmin表单提交后却没有关闭弹窗
点击操作按钮弹出窗口,操作完之后提交表单,无论操作成功还是失败,窗口都不关闭,操作之后出现一个笑脸,3秒后回到弹框刚打开的样子 而我们想要的是这个效果: 在jS那里给这个按钮绑定一个事件即可实现
- CentOS下安装FreeTDS
导读 官方网站:http://www.freetds.org 下载地址:http://ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable ...
- 成都,我们来啦 | Dubbo 社区开发者日
[关注 阿里巴巴云原生 公众号,回复关键词"报名",即可参与抽奖!] 活动时间:10 月 26 日 13:00 - 18:00 活动地点:成都市高新区交子大道中海国际中心 233 ...
- Logstash:Data转换,分析,提取,丰富及核心操作
Logstash:Data转换,分析,提取,丰富及核心操作 Logstash plugins Logstash是一个非常容易进行扩张的框架.它可以对各种的数据进行分析处理.这依赖于目前提供的超过200 ...
- Vue基础框架
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <!-- 设置语言为 ...
- 如何查询正在运行的SQL Server agent job
运行"msdb"系统数据库下的存储过程"dbo.sp_help_job",可以得知现在SQL Server中有多少个正在运行的agent job: USE [m ...
- LinqToSql
string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConsoleA ...