zoukankan      html  css  js  c++  java
  • 吴恩达【深度学习工程师】 04.卷积神经网络 第四周特殊应用(1)人脸识别

    该笔记介绍的是《卷积神经网络》系列第四周:特殊应用(1)人脸识别。

    主要内容有:

    1.人脸验证与人脸识别

    2.一次学习

    3.siamese网络

    4.Triplet损失

    5.二分法实现人脸验证

    人脸验证与人脸识别

    要理解怎么实现人脸识别,首先要区分人脸验证与人脸识别的差别:

    人脸验证(1:1问题):

      a.输入一张人物图片和某人的名字或者ID。

      b.系统验证输入的图片是否和名字对应。

    人脸识别(1:n问题):

      a.拥有一个数据集K含有n个人的图片。

      b.输入一张人物图片

      c.如果输入图片的人物包含在数据集K里,输出名字或者ID。

    一般的人脸验证算法不能直接应用在人脸识别算法中,因为人脸识别存在数据集K使其成为了1:n的问题,人脸验证算法的误差会被放大n倍,除非其精度特别高比如达到99.9%。

    一次学习

    一次学习指的是,系统只能通过一个样本进行学习,使其能够认出同一个人。这也是人脸识别的难点所在,也决定着无法通过传统卷积方法进行训练。

    传统卷积方法:

                                       

    存在的缺点:

      a.数据集太小,训练集等于你想要识别人物的数量

      b.每次新增数据集,需要重新训练网络

    学习similarity函数:

    引入一个d函数:放入同一个人的两张图片,它能输出很小的值。放入长相差异很大的人的图片,它会输出一个很大的值。

            d(img1,img2)=img1与img2的差异程度

    差异程度:

     if(d(img1,img2))   <=    τ         print "same"
              >=    τ         print "differet"
      *τ为阀值
    在作业说过这种算法也不理想,会因为像素由光线变化、人脸方位、甚至头部微小的变化而发生显著的影响。

    Siamese网络
    实现similartity函数,需要使用Siamese网络。Siamese网络是对两个不同的输入,运行相同的卷积神经网络,然后比较它们的差异(全连接层输出的参数)。

    神经网络对输出的全连接层定义了一个编码函数f(xi
    ),及similartity函数为:
                              d(x1,X2)=||f(x1)-f(x2)||
    学习参数做的是:
    xi,xj是同一个人,则||f(xi)-f(xj)||很小,及编码距离很小
             xi,xj不是同一个人,则||f(xi)-f(xj)||很大,及编码距离很大

    Triplet损失  
    Triplet是一个三元组,Triplet的构成是从训练集取出一个样本,称样本为A(anchor),再选一个与A同类的样本P(positive)和与A不同类的样本N(negative)分别组成不同的样本集(A,P)和(A,N),使(A,P)的距离很近,(A,N)的距离更远一点。

    三元组定义的损失:

           L(A,P,N)=Max(||f(A)-f(P)||2-||f(A)-f(N)||2+α,0)
    L(A,P,N)小于零时,判断损失为0。当||f(A)-f(P)||2-||f(A)-f(N)||2大于零时得到一个正的损失值。最终使||f(A)-f(P)||2-||f(A)-f(N)||2小于等于0。

    函数推导:
                 ||f(A)-f(P)||2<||f(A)-f(N)||2 //(A,P)的距离很近,(A,N)的距离远

                  
    ||f(A)-f(P)||2-||f(A)-f(N)||2<0 //简单平移

                  ||f(A)-f(P)||2-||f(A)-f(N)||2<0-α //加入间隔α排除无用输出f(img)=0,间隔α为超参数可手动调试
                  ||f(A)-f(P)||2-||f(A)-f(N)||2<0   //简单平移
      
    代价函数:

                                         

    训练集的选择:
    a.选择多个人平均n张照片
    b.选择更难训练的三人组,主要是对于(A,N)数据集的选择,虽然是不同的人但是相似点要有的,以帮助网络更好的区分。

    二分法实现人脸验证
    把人脸识别当成一个二分法的过程,使用Siamese网络      
    对于最后逻辑回归单元的处理
    元素差的绝对值公式:

    X的平方公式:
    由于使用的是Siamese网络原理也是利用编码不同,判断输入的两张图片是否为同一个人。


  • 相关阅读:
    Ural-1018 Binary Apple Tree(树形dp+分组背包)
    Ural 1332 把圆细分+圆内切,内含关系判定
    读取图片文件(C#实现)
    使用ZXing.dll库生成二维码(C#实现)
    combobox绑定数据
    DataGridView显示日期格式问题
    夜深忽梦少年事
    Scrum角色
    Srum框架
    Scrum流程
  • 原文地址:https://www.cnblogs.com/-1024/p/8847730.html
Copyright © 2011-2022 走看看