4.4特殊应用:人脸识别和神经网络风格转换

觉得有用的话,欢迎一起讨论相互学习~Follow Me

4.1什么是人脸识别

Face verification人脸验证 VS face recognition人脸识别

Face verification人脸验证

  • 人脸验证

    • 输入是一张图片,以及人的姓名或者ID作为标签
    • 输出是这张输入的图片是否是这个确定的人
    • 这时候也被称为1对1问题
  • 人脸识别
    • 人脸识别问题比人脸验证问题困难的多,其输入为一个具有K个人的数据集,将一张图片作为输入,如果这张图片是这K个人中的某一个,则输出这个人的ID。
    • 也就是说如果人脸验证的错误率是1%,即正确率为99%,则这个系统在人脸识别问题上的准确率只有\(0.99^{k}\)

4.2 One-Shot learning

  • 在绝大多数人脸识别项目中,你需要通过单单一张图片或者单单一个人脸识别样例就能去识别这个人。
  • 而历史上深度学习系统只有一个训练样例时,它的表现并不好。

    One-Shot learning

  • 通过一个样本来进行学习,以能够认出同一个人--因为在工业界中你的员工照片往往只有一张。

    learning a "similarity" function

  • \[d(img1,img2)=degree\ of\ differemce\ between\ images\]
    然后输出两张图片的差异值--如果你放进同一个人的两张照片,你希望他能输出一个很小的值,如果你放进两个长相差别很大的人的照片
    \[If\ d(img1,img2)<=u 则判别这两张图片为同一张图片\]
    \[>u则判别这两张图片为不同的图片\]


4.3 Siamese 网络/DeepFace 系统

Taigman Y, Yang M, Ranzato M, et al. DeepFace: Closing the Gap to Human-Level Performance in Face Verification[C]// IEEE Conference on Computer Vision and Pattern Recognition. IEEE Computer Society, 2014:1701-1708.

  • 方法是把第二张图片传给有相同参数的同样的神经网络,然后得到一个不同的128维的向量。

    • 这个向量能够代表一整张图片的信息,

  • 对于一张图片而言,其可以通过卷积神经网络将其转化为一个128维度的向量--用以表征整张图片。而得到的向量通过\(f(x^{(i)})\)进行表示,而系统的目的就是调整参数使得如果\(x^{(i)}\)和\(x^{(j)}\)表示的是同一张图片则\(\parallel f(x^{(i)})-f(x^{(j)})\parallel_2\)的目标函数可以尽可能的小。得如果\(x^{(i)}\)和\(x^{(j)}\)表示的是不同的图片则\(\parallel f(x^{(i)})-f(x^{(j)})\parallel_2\)的目标函数可以尽可能的大。


4.4 Triplet损失

learning a "similarity" function

Schroff F, Kalenichenko D, Philbin J. FaceNet: A unified embedding for face recognition and clustering[J]. 2015:815-823.

  • 对于使用Siamese网络的损失函数设置为三元组损失函数然后应用梯度下降。

    • 为了使用三元组损失函数进行梯度下降,需要比较成对的图像。即对于是同一个人的图片你需要将两者的三元组损失设置大一些,而对不同人的图片你需要将两者的三元组损失设置小一些。对于同时看三张图片(Anchor原始图片(A),positive 同一人物图片(P),negative不同人物图片(N))
    • 用数学公式表达这一过程即为:
      \[d(A,P)\le d(A,N)\]
      \[(f(A)-f(P))^{2}\le(f(A)-f(N))^{2}\]
      \[(f(A)-f(P))^{2}-(f(A)-f(N))^{2}\le0\]

      • 但是注意,这一过程不能使得f(A) = f(P) = f(N)=0,所以等式的右边需要减去一个很小的数。
        \[(f(A)-f(P))^{2}-(f(A)-f(N))^{2}\le0-\alpha\]
        \[(f(A)-f(P))^{2}-(f(A)-f(N))^{2}+\alpha\le0\]
        这里的\(\alpha\)习惯被称为margin.
  • 三元组损失函数基于A,P,N三张图片,其中A和P代表了同一个人,而A和N代表了不同的人。
  • 三元损失函数可以被定义为 \[L(A,P,N)=max((f(A)-f(P))^{2}-(f(A)-f(N))^{2}+\alpha,0)\]
    \[J=\sum^{m}_{i=1}L(A^{(i)},P^{(i)},N^{(i)})\]
  • 在训练过程中\(d(A,P)+\alpha\le d(A,N)\)往往很容易达到,这就使在选择图片数据构成难以训练的A,P,N三元组-- \[d(A,P) \approx d(A,N)\]

    流行的命名方式

  • 对于深度学习领域网络模型的命名方式可以采用“_Net”或"Deep_"的形式,例如对于用于人脸识别的网路,可以将其命名为“FaceNet”或“DeepFace”


4.5Face verification and binary classification面部验证与二分类

  • Triplet loss 是一个学习人脸识别卷积神经网络参数的好方法;将人脸识别当成一个二分类问题也可以很好地调整神经网络的参数。

    面部验证与二分类

    Taigman Y, Yang M, Ranzato M, et al. DeepFace: Closing the Gap to Human-Level Performance in Face Verification[C]// IEEE Conference on Computer Vision and Pattern Recognition. IEEE Computer Society, 2014:1701-1708.

  • 将Siamese 网络得到的两个128维的编码向量后接上回归用的神经元,将其转化为一个回归问题,并且输出为0或1表示两个输入的图片是否来自同一张人脸。这就将人脸识别问题转化为一个二分类的问题。

\[\hat{y}=\sigma(\sum^{128}_{k=1}W_{i}|f(x^{(i)})_{k}-f(x^{(j)}_{k})|+b)\]其中\(\sigma\)表示非线性激活函数。
或基于 X-square similarity函数的回归方法
\[\hat{y}=\sigma(\sum^{128}_{k=1}W_{i}\frac{(f(x^{(i)})_{k}-f(x^{(j)}_{k}))^{2}}{f(x^{(i)})_{k}+f(x^{(j)}_{k})}+b) \]

  • 注意,在这个问题中,训练的输入是两张图片,而输出是0或1.

    • 并且由于使用的是一个Siamese网络,所以上下两个卷积神经网络的参数完全相同。
    • 对于门禁系统而言,如果下方的图片来自离线的员工数据集,可以事先将表示向量计算好并保存起来。而上方的图片来自员工进入时实时的图片。通过预先计算数据库中中已有图片的编码向量的方法,可以大大节省人脸识别的时间

[DeeplearningAI笔记]卷积神经网络4.1-4.5 人脸识别/one-shot learning/Siamase网络/Triplet损失/将面部识别转化为二分类问题的更多相关文章

  1. [DeeplearningAI笔记]卷积神经网络4.11一维和三维卷积

    4.4特殊应用:人脸识别和神经网络风格转换 觉得有用的话,欢迎一起讨论相互学习~Follow Me 4.11一维和三维卷积 二维和一维卷积 对于2D卷积来说,假设原始图像为\(14*14*3\)的三通 ...

  2. [DeeplearningAI笔记]卷积神经网络4.6-4.10神经网络风格迁移

    4.4特殊应用:人脸识别和神经网络风格转换 觉得有用的话,欢迎一起讨论相互学习~Follow Me 4.6什么是神经网络风格转换neural style transfer 将原图片作为内容图片Cont ...

  3. [DeeplearningAI笔记]卷积神经网络3.10候选区域region proposals与R-CNN

    4.3目标检测 觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.10 region proposals候选区域与R-CNN 基于滑动窗口的目标检测算法将原始图片分割成小的样本图片,并传入分 ...

  4. [DeeplearningAI笔记]卷积神经网络3.1-3.5目标定位/特征点检测/目标检测/滑动窗口的卷积神经网络实现/YOLO算法

    4.3目标检测 觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.1目标定位 对象定位localization和目标检测detection 判断图像中的对象是不是汽车--Image clas ...

  5. [DeeplearningAI笔记]卷积神经网络1.9-1.11池化层/卷积神经网络示例/优点

    4.1卷积神经网络 觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.9池化层 优点 池化层可以缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性. 池化层操作 池化操作与卷积操作类似 ...

  6. [DeeplearningAI笔记]卷积神经网络1.6-1.7构造多通道卷积神经网络

    4.1卷积神经网络 觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.6多通道卷积 原理 对于一个多通道的卷积操作,可以将卷积核设置为一个立方体,则其从左上角开始向右移动然后向下移动,这里设 ...

  7. [DeeplearningAI笔记]卷积神经网络1.4-1.5Padding与卷积步长

    4.1卷积神经网络 觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.4Padding 一张\(6*6\)大小的图片,使用\(3*3\)的卷积核设定步长为1,经过卷积操作后得到一个\(4*4 ...

  8. [DeeplearningAI笔记]卷积神经网络1.2-1.3边缘检测

    4.1卷积神经网络 觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.2边缘检测示例 边缘检测可以视为横向边缘检测和纵向边缘检测如下图所示: 边缘检测的原理是通过一个特定构造的卷积核对原始图 ...

  9. [DeeplearningAI笔记]卷积神经网络2.5-2.7 Network in Network/1*1卷积/Inception网络/GoogleNet

    4.2深度卷积网络 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 Inception网络 --Szegedy C, Liu W, Jia Y, et al. Going deepe ...

随机推荐

  1. c# 窗体与窗体外的文件互动(拖拽)

    大部分控件都有此事件drag相关. 以picturebox为例: pictureBox1.AllowDrop = true;//此属性需要全打出来,不会自动识别添加 private void pict ...

  2. web表格代码(5)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. Halcon 笔记1

    Halcon Example位置: C:\Users\Public\Documents\MVTec\HALCON-13.0\examples 安装位置:C:\Program Files\MVTec\H ...

  4. HTTP协议 结构,get post 区别(阿里面试)

    如果需要想了解相关的TCP的协议结构,底层架构,以及每次面试必问的三次握手,四次挥手可以 参考:TCP协议详解7层和4层解析(美团面试,阿里面试) 尤其是三次握手,四次挥手 具体发送的报文和状态都要掌 ...

  5. break,continue,return 的区别

    (1)break 跳出当前循环体 (2)continue 跳过当前循环体continue后面的代码,继续执行下一个循环 (3)return 和循环没关系,就是跳出该函数

  6. Java对象空间分配流程

    对象空间分配流程如下:   针对这个流程,分别解释一下每一个选项的使用场景. 栈上分配: 栈上分配的基础在于逃逸分析,逃逸分析可以得到三种对象的逃逸状态. 全局逃逸:一个对象的引用逃出了方法或者线程. ...

  7. 第104天:web字体图标使用方法

    字体图标经常使用的是 阿里图标库的:http://www.iconfont.cn/ icomoon图标库的:https://icomoon.io/ 一.阿里库字体图标使用 第一步: 首先进入阿里巴巴矢 ...

  8. luogu 1437 敲砖块(DP)

    这道题的DP的状态设计的很有想法啊. 假如我们一行一行来选择的话,状态将会极其复杂. 如果一列一列来看的话,比如你想选aij,那么第i列的前j个都要选,并且第i+1列的前j-1个都要选. 于是状态就很 ...

  9. BZOJ 1190 梦幻岛宝珠(分组01背包)

    跑了7000ms... 这是个体积和价值都超大的背包.但是体积保证为a*2^b的(a<=10,b<=30)形式.且n<=100. 于是可以想到按b来分组.这样的话每组最多为a*n*2 ...

  10. week1day01 认识python 变量 数据类型 条件if语句

    1.什么是python? Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.Python由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年.像Pe ...