这是一系列深度学习的介绍,本文不会涉及公式推导,主要是一些算法思想的随笔记录。
适用人群:深度学习初学者,转AI的开发人员。
编程语言:Python
参考资料:吴恩达老师的深度学习系列视频
吴恩达老师深度学习笔记整理
深度学习500问
笔记下载:深度学习个人笔记完整版

人脸验证(face verification)和人脸识别(face recognition)


人脸验证问题:如果你有一张输入图片,以及某人的ID或者是名字,这个系统要做的是,验证输入图片是否是这个人。有时候也被称作1对1问题,只需要弄明白这个人是否和他声称的身份相符。

人脸识别问题:是1对多问题,比人脸验证问题难很多,为什么呢?假设你有一个验证系统,准确率是99%,还可以。但是现在,假设在识别系统中,如果你把这个验证系统应用在100个人身上,人脸识别上,你犯错的机会就是100倍了。如果每个人犯错的概率是1%,如果你有一个上百人的数据库,如果你想得到一个可接受的识别误差,你要构造一个验证系统,其准确率为99.9%或者更高,然后才可以在100人的数据库上运行,而保证有很大几率不出错。事实上,如果我们有一个100人的数据库,正确率可能需要远大于99%,才能得到很好的效果。

One-Shot学习(One-shot learning)

人脸识别所面临的一个挑战就是你需要解决一次学习问题,这意味着在大多数人脸识别应用中,你需要通过单单一张图片或者单单一个人脸样例就能去识别这个人。所以在一次学习问题中,只能通过一个样本进行学习,以能够认出同一个人。

有一种办法是,将人的照片放进卷积神经网络中,使用softmax单元来输出4种,或者说5种标签,分别对应这4个人,或者4个都不是,所以softmax里我们会有5种输出。但实际上这样效果并不好,因为如此小的训练集不足以去训练一个稳健的神经网络。而且,假如有新人加入你的团队,你现在将会有5个组员需要识别,所以输出就变成了6种,这时你要重新训练你的神经网络。

所以要让人脸识别能够做到一次学习,为了能有更好的效果,你现在要做的应该是学习Similarity函数

Siamese 网络(Siamese network)

上面提到函数d的作用就是输入两张人脸,然后告诉你它们的相似度。实现这个功能的一个方式就是用Siamese网络,

建立一个人脸识别系统的方法就是,如果你要比较两个图片的话,例如这里的第一张(编号1)和第二张图片(编号2),你要做的就是把第二张图片喂给有同样参数的同样的神经网络,然后得到一个不同的128维的向量(编号3),这个向量代表或者编码第二个图片,我要把第二张图片的编码叫做f(x(2))。

这些编码很好地代表了这两个图片,你要做的就是定义d.如上图所示,是两者编码之差的范数。对于两个不同的输入,运行相同的卷积神经网络,然后比较它们,这一般叫做Siamese网络架构

怎么训练这个Siamese神经网络呢?我们需要做的就是学习网络的参数,使输入是同一个人的图像时,两者的差的范数很小,当输入不是同一个人的时候,两者的差的范数很大。

个人的理解,Siamese 网络的作用就类似于NLP中的词嵌入,即如何用向量来表征输入图像。

Triplet 损失

目标函数:Triplet损失,是三元组损失函数。一个基准图像Anchor,一个正类图像Positive,一个负类图像Negative,定义三元组损失函数然后应用梯度下降。


这是一个三元组定义的损失,整个网络的代价函数应该是训练集中这些单个三元组损失的总和。假如你有一个10000个图片的训练集,里面是1000个不同的人的照片,你要做的就是取这10000个图片,然后生成这样的三元组,然后训练你的学习算法,对这种代价函数用梯度下降,这个代价函数就是定义在你数据集里的这样的三元组图片上。

如果你只有每个人一张照片,那么根本没法训练这个系统。当然,训练完这个系统之后,你可以应用到你的一次学习问题上,对于你的人脸识别系统,可能你只有想要识别的某个人的一张照片。但对于训练集,你需要确保有同一个人的多个图片,至少是你训练集里的一部分人,这样就有成对的Anchor和Positive图片了。

如何选择三元组

如果你从训练集中,随机地选择A、P和N,遵守A和P是同一个人,而A和N是不同的人这一原则。有个问题就是,如果随机的选择它们,那么这个约束条件d(A,P)+a<=d(A,N)很容易达到,因为随机选择的图片,A和N比A和P差别很大的概率很大。所以为了构建一个数据集,你要做的就是尽可能选择难训练的三元组A、P和N。具体而言,d(A,P)+a<=d(A,N)满足的条件下,你的A、P和N的选择使得d(A,P)很接近d(A,N),即d(A,P)约等于d(A,N)。

人脸识别的思路

  1. 构建三元组进行训练,根据Triplet损失训练出最优的Siamese神经网络
  2. 将人脸库中的图像经过Siamese神经网络,得到编码后的f(x)值,存入数据库
  3. 检测时输入新的人脸图像,得到编码值,与数据库中的值进行比较,小于等于alpha,则匹配成功;否则,匹配失败

深度学习(十八):人脸验证(face verification)和人脸识别(face recognition)相关推荐

  1. LSTM 之父发文:2010-2020,我眼中的深度学习十年简史

    作者 | Jürgen Schmidhuber 译者 | 刘畅.若名 出品 | AI科技大本营(ID:rgznai100) 作为LSTM发明人.深度学习元老,Jürgen Schmidhuber于2月 ...

  2. LSTM之父发文:2010-2020,我眼中的深度学习十年简史

    2020-02-23 15:04:22 作者 | Jürgen Schmidhuber 编译 | 刘畅.若名 出品 | AI科技大本营(ID:rgznai100) 作为LSTM发明人.深度学习元老,J ...

  3. LSTM之父发文:我眼中的深度学习十年简史!

    点击上方"开发者技术前线",选择"星标" 13:21 在看 真爱 作者 | Jürgen Schmidhuber 编译 | 刘畅.若名  出品 | AI科技大本 ...

  4. 【深度学习】(7) 交叉验证、正则化,自定义网络案例:图片分类,附python完整代码

    各位同学好,今天和大家分享一下TensorFlow2.0深度学习中的交叉验证法和正则化方法,最后展示一下自定义网络的小案例. 1. 交叉验证 交叉验证主要防止模型过于复杂而引起的过拟合,找到使模型泛化 ...

  5. 2017年深度学习十大趋势预测

    2017年深度学习十大趋势预测 本文作者曾经多次预测了技术发展的趋势,最近的一次预测是"2011年软件发展的趋势与预测".10项预言中,准确地命中了6项,比如JavaScript ...

  6. NLP:LSTM之父眼中的深度学习十年简史《The 2010s: Our Decade of Deep Learning / Outlook on the 2020s》的参考文献

    NLP:LSTM之父眼中的深度学习十年简史<The 2010s: Our Decade of Deep Learning / Outlook on the 2020s>的参考文献 目录 T ...

  7. PyTorch框架学习十八——Layer Normalization、Instance Normalization、Group Normalization

    PyTorch框架学习十八--Layer Normalization.Instance Normalization.Group Normalization 一.为什么要标准化? 二.BN.LN.IN. ...

  8. 花书+吴恩达深度学习(八)优化方法之 Batch normalization

    目录 0. 前言 1. Batch normalization 训练 2. Batch normalization 测试 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常开心的~ 花书 ...

  9. Hinton等谈深度学习十年;PyTorch落地Linux基金会的影响;机器学习界的“GitHub”|AI系统前沿动态

    1. 重磅!PyTorch落地Linux基金会 扎克伯格亲自宣布,PyTorch基金会已新鲜成立,并归入Linux基金会旗下,管理委员会成员,包括Meta.AMD.AWS.谷歌云.微软和英伟达.Met ...

  10. 2016深度学习统治人工智能?深度学习十大框架

    2019独角兽企业重金招聘Python工程师标准>>> 2015 年结束了,是时候看看 2016 年的技术趋势,尤其是关于深度学习方面. 新智元在 2015 年底发过一篇文章< ...

最新文章

  1. mysql 慢查询 不重启_开启mysql慢查询日志,不重启数据库的方法
  2. uva11991 Easy Problem from Rujia Liu?
  3. linux安装python27_linux下安装python27 nginx 和uwsgi
  4. 小程序空显示undefined_微信小程序显示ESP8266上传的实时显示温湿度数据
  5. 手动升级 Confluence - 规划你的升级
  6. C++_引用_引用的基本语法_注意事项_引用做函数参数---C++语言工作笔记031
  7. mysql 存储过程 光标_mysql存储过程 光标
  8. ArcGIS GDB中要素类不可编辑
  9. [渝粤教育] 西南科技大学 货币银行学 在线考试复习资料(2)
  10. 解决Secure Shell Client(SSH)客户端中文乱码的方法
  11. 使用VideoView实现简单视频播放器
  12. 柔性传感器——多源信息融合
  13. Emeditor -- windows最强txt编辑器,没有之一
  14. matlab gradient函数原理
  15. 如何制作一个vagrant的base box 及安装 additions
  16. ictclas java_ICTCLAS50 基于中科院分词作的java 工具,内容详细各个函数都有实现 含有word解析文档 Develop 238万源代码下载- www.pudn.com...
  17. 【MQTT基础篇(一)】MQTT介绍
  18. MATLAB中如何打角标和希腊字母
  19. 关于线宽与PCB过孔铺铜的一点经验
  20. java 完全解耦_java-完全解耦

热门文章

  1. 颜色拾取器color picker (javascript version)
  2. ajax img src如何索引,使用jQuery的ajax方法作为blob检索图像
  3. order by 空值排在最后_ZSBL高中组晋级赛圆满结束!汤溪中学杀出重围,顺利夺下最后一张总决赛门票!...
  4. 麻省理工学院计算机好考吗,麻省理工大学世界排名是多少(麻省理工有多难考)...
  5. 内置CRC于文本文件中的方法
  6. linux查看cp2102,微雪电子CP2102(type A)USB转USART简介
  7. 输出第三个单词c语言,基础c语言问题:要求输入任意单词,输出单词的每个字母后的第三个字母。例如输入yeah,则输出bhdk...
  8. ARM 相关概念及知识随笔
  9. 单选框,下拉框,复选框 的回显
  10. JavaSE练习题(中)