Ng深度学习-卷积神经网络基础-人脸识别与神经风格迁移

人脸识别

首先简单介绍一下人脸验证(face verification)和人脸识别(face recognition)的区别。

  • 人脸验证:输入一张人脸图片,验证输出与模板是否为同一人,即一对一问题。

  • 人脸识别:输入一张人脸图片,验证输出是否为K个模板中的某一个,即一对多问题。

一般地,人脸识别比人脸验证更难一些。因为假设人脸验证系统的错误率是1%,那么在人脸识别中,输出分别与K个模板都进行比较,则相应的错误率就会增加,约K%。模板个数越多,错误率越大一些。

One Shot Learning

One-shot learning就是说数据库中每个人的训练样本只包含一张照片,然后训练一个CNN模型来进行人脸识别。若数据库有K个人,则CNN模型输出softmax层就是K维的。

但是One-shot learning的性能并不好,其包含了两个缺点:

  • 每个人只有一张图片,训练样本少,构建的CNN网络不够健壮。

  • 若数据库增加另一个人,输出层softmax的维度就要发生变化,相当于要重新构建CNN网络,使模型计算量大大增加,不够灵活。

为了解决One-shot learning的问题,我们先来介绍相似函数(similarity function)。相似函数表示两张图片的相似程度,用d(img1,img2)来表示。若d(img1,img2)较小,则表示两张图片相似;若d(img1,img2)较大,则表示两张图片不是同一个人。相似函数可以在人脸验证中使用:

  • d(img1,img2)≤τ : 一样

  • d(img1,img2)>τ : 不一样

对于人脸识别问题,则只需计算测试图片与数据库中K个目标的相似函数,取其中d(img1,img2)最小的目标为匹配对象。若所有的d(img1,img2)都很大,则表示数据库没有这个人。

这里写图片描述

Siamese Network

若一张图片经过一般的CNN网络(包括CONV层、POOL层、FC层),最终得到全连接层FC,该FC层可以看成是原始图片的编码encoding,表征了原始图片的关键特征。这个网络结构我们称之为Siamese network。也就是说每张图片经过Siamese network后,由FC层每个神经元来表征。

这里写图片描述

建立Siamese network后,两张图片x(1)和x(2)的相似度函数可由各自FC层f(x(1))与f(x(2))之差的范数来表示:
d ( x ( 1 ) , x ( 2 ) ) = ∣ ∣ f ( x ( 1 ) ) − f ( x ( 2 ) ) ∣ ∣ 2 2 d( x^{( 1)},x^{( 2)}) =|| f( x^{( 1)}) - f( x^{( 2)})||_{2}^{2} d(x(1),x(2))=f(x(1))f(x(2))22
值得一提的是,不同图片的CNN网络所有结构和参数都是一样的。我们的目标就是利用梯度下降算法,不断调整网络参数,使得属于同一人的图片之间d(x(1),x(2))很小,而不同人的图片之间d(x(1),x(2))很大。

  • 若x(i),x(j)是同一个人,则||f(x(1))−f(x(2))||2较小

  • 若x(i),x(j)不是同一个人,则||f(x(1))−f(x(2))||2较大

Triplet Loss

构建人脸识别的CNN模型,需要定义合适的损失函数,这里我们将引入Triplet Loss。

Triplet Loss需要每个样本包含三张图片:靶目标(Anchor)、正例(Positive)、反例(Negative),这就是triplet名称的由来。顾名思义,靶目标和正例是同一人,靶目标和反例不是同一人。Anchor和Positive组成一类样本,Anchor和Negative组成另外一类样本。

在这里插入图片描述

我们希望上一小节构建的CNN网络输出编码f(A)接近f(D),即||f(A)−f(D)||2尽可能小,而||f(A)−f(N)||2尽可能大,数学上满足:

∣ ∣ f ( A ) − f ( P ) ∣ ∣ 2 ≤ ∣ ∣ f ( A ) − F ( N ) ∣ ∣ 2 ||f(A)−f(P)||2≤||f(A)−F(N)||2 f(A)f(P)2f(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≤0 f(A)f(P)2f(A)F(N)20
根据上面的不等式,如果所有的图片都是零向量,即f(A)=0,f§=0,f(N)=0,那么上述不等式也满足。但是这对我们进行人脸识别没有任何作用,是不希望看到的。我们希望得到||f(A)−f§||2远小于||f(A)−F(N)||2。所以,我们添加一个超参数α,且α>0,对上述不等式做出如下修改:

∣ ∣ f ( A ) − f ( P ) ∣ ∣ 2 − ∣ ∣ f ( A ) − F ( N ) ∣ ∣ 2 ≤ − α ||f(A)−f(P)||2−||f(A)−F(N)||2≤−α f(A)f(P)2f(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+α≤0 f(A)f(P)2f(A)F(N)2+α0
顺便提一下,这里的α也被称为边界margin,类似与支持向量机中的margin。举个例子,若d(A,P)=0.5,α=0.2,则 d ( A , N ) ≥ 0.7 d(A,N)≥0.7 d(A,N)0.7

接下来,我们根据A,P,N三张图片,就可以定义Loss function为:

L ( A , P , N ) = m a x ( ∣ ∣ f ( A ) − f ( P ) ∣ ∣ 2 − ∣ ∣ f ( A ) − F ( N ) ∣ ∣ 2 + α , 0 ) L(A,P,N)=max(||f(A)−f(P)||2−||f(A)−F(N)||2+α, 0) L(A,P,N)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值