Face Recognition

What is face recognition?


Face verification vs. Face recognition

Face verification人脸校验问题,指的是,如果输入某个人的照片,以及名字或ID,系统的任务是,校验输入的照片是否是他自称的那个人。

而Face recognition人脸识别问题要比校验问题复杂得多。假设有一个校验系统,它能达到99%的正确率,如果假设用这个系统来实现数据库里100个人的识别任务,现在就有100种犯错的几率,每个人判断错误的概率是1%。如果你有一个100人的数据库,并且你希望有一个可接受的误差,你可能需要一个有99.9%,甚至更高准确率的识别系统,才能将它应用到100个人的数据库,仍然有很大几率识别错误。

One Shot Learning 单样本学习问题


在单样本学习问题中,你必须从一个样本中学习,就可以做到能认出这个人。大多数人脸识别系统都需要做到这样,因为你的数据库中,可能只有一张员工的照片,可以尝试的一种方法是,输入这个人的照片,到ConvNet,使得它通过softmax,输出一个标签y,这些输出分别对应于上述4个人的一个或都不是,这就是softmax的5个输出,但这个效果不好,因为如果只有这样一个小的训练集,不足以用来训练出一个可以解决这个人物的足够robust的神经网络。如果新进了员工,又重新训练加一个输出,每次进新人都要再训练ConvNet

Learning a "similarity" function学习一个相似性函数,需要用一个神经网络来学习一个函数,表示为d,能对其输入的两个图像img1,img2,输出两个图像之间的差异程度。如果这两张照片是同一个人,希望输出一个小数字,如果是不同的人,输出很大的数。因此,在识别的事件,如果它们之间的差异程度小于一个阈值,tau,这是一个超参数,则可推断是同一个人,如果输出大于tua,则预测是两个不同的人。


similarity function


Siamese Network


输入一张图片,x^{(1)},经过一系列 的卷积和池化以及全连接层,最后得到了一个特征向量,有时候会把它输入到一个softmax层中,去做分类,但在此,我们专注在这个向量本身比如说有128个数,由神经网络深处的某个全连接层计算而来,就是该图片的编码。

第二张图片,输入到同一个网络,得到一个不同的128个数字组成的向量,这就是第二张图片的编码f(x^{(2)})

接下来定义d(x^{(1)},x^{(2)})是这两张图片的编码之间差的范数||f(x^{(1)})-f(x^{(2)})||^2_2

这种方法,用两个完全相同的卷积神经网络对两张不同的图片进行计算,比较两者的结果,又是称之为孪生网络(Siamese Network)架构。

Siamese network

要做的是训练神经网络,使得它计算的编码可以生成一个函数d来告诉你这两张照片是否为同一个人。更细致的说,是要训练神经网络的参数使得如果输入的两张图片是同一个人,他们编码的差距就会小,如果是不同的人,差距就会大。可以做的是使用反向传播来更改所有这些参数以确保满足这些条件。

Goal of Learning

Triplet Loss


为了学习神经网络的参数并以此获得一个优良的人脸图片的编码,有一种方法是定义一个引用了梯度下降的三元组损失函数(Triplet Loss). 如下图,前两张图片是同一个人,希望它们编码相对类似,而后两张照片,希望它们的编码十分不同,因为这是不同的人。

在三元组损失的术语当中,Anchor照片是参照,而PostiveNegative照片与Anchor照片进行对比。将一直查看三张照片,希望在训练时,使编码的神经网络中的参数获得以下性质,需要将Anchor照片的编码减去正例照片的编码d(A,P),希望这个差的平方很小,小于等于Anchor照片与负例照片的编码之间差距d(A,N)的平方。可以将d想象为距离方程。

将式子做一些改变,||f(A)-f(P)||^2-||f(A)-f(N)||^2+\alpha \leq0

有一种情况会使式子的条件轻易得到满足,就是把每一项都学习为0,0减去0,仍然得到0,可以永远满足这个式子的条件。所以,为了确保神经网络不会为所有编码都一直输出0,为了确保它不会把这些编码训练得和其他任何一张照片的编码完全相同,调整这个式子加上一个\alpha ,也称为margin,这是另一个超参数,这样的话就会防止神经网络输出退化解。

举个例子,如果d(A,P)=0.5d(A,N)=0.51,差别很小时,🦁的条件是满足不了的,即使的确会小于等于0,这还不够好,因为想要d(A,N)远远大于d(A,P),具体来说,想要0.7或更大的数字。

调整\alpha 的大小,使两者之间的差距可以达到这个超参数alpha的值,这就是margin的用途。


给定三张照片,定义为A,P,N,分别代表Anchor照片,正例照片和负例照片。

在这里定义损失函数L(A,P,N)=max(||f(A)-f(P)||^2-||f(A)-f(N)||^2+\alpha ,0)

只要前一项小于0,那么损失值便为0,若前一项大于0,则会获得一个大于0的损失值,所以通过尝试使这个最小化,对应的结果使这一项或等于或小于0.

而神经网络中整体损失函数可以是一套训练集中不同三元组对应的损失的总和。加入你有一个训练集,其中包含1000个不同的人组成的10000张照片,你需要做的是用这100000张照片去生成这样的三元组,然后用这种损失函数训练使用梯度下降的学习算法,而该损失函数是定义在从训练集中抽取的图片上的三元组。


如何正确选择三元组来组成你的训练集呢?

现在的问题是,如果随机选择A,P,N,并使AP为相同的人,而AN为不同的人,那么这个约束函数将非常容易得到满足,随机选出的AN之间的差异会远大于AP之间的差异。那么神经网络无法从中学习很多,所以要建立一个训练集,使训练起来比较有难度。

具体来说,相对难训练的三元组,使d(A,P)d(A,N)相当接近。这样一来,学习算法需要跟努力的使右边的值增加或是左边的值减少,这样才能使左右差距的alpha有意义。选择这样的三元组的效果是增强你的学习算法的效率,如果你随机选择三元组,那么三元组会是非常简单的,梯度下降将如发做任何事。因此只能通过有难度的三元组来使梯度下降,能做到把这两项的距离分得更开。

定义完三元组照片后,训练后,用梯度下降来最小化损失函数,这随后会扩散并影响到神经网络里的所有参数,从而学习这样一个编码,使得当两张照片是同一个人时,这两张照片的d会很小,当人不同时,d的值会很大,这就是所谓的三元组算是,以及训练神经网络来学习一个人脸识别的编码的方法。


Face Verification and Binary Classification


Triplet Loss 是一种学习用于人脸识别的ConvNet的参数的好办法,还有一种方法可以用来学习这些参数,当作一种直接的二元分类问题。运用Siamese网络让它们都计算这些128维的embeddings(just an example),然后将这些输入到一个逻辑回归单元后做出预测,如果这两个人是同一个人,目标结果会输出1,如果不是同一个人,结果会输出0. 所以,这是一种将人脸识别当作二元分类的方法。

最终的逻辑单元做的是输出\hat{y} ,最终输出的128个元素的图片编码,套入以下函数中

\hat{y}=\sigma (\sum_{k=1}^{128}w_k |f(x^{(i)})_k- f(x^{(j)})_k|+b)

f(x^{(i)})是图像x^{(i)}的编码,下标k表示这个输出向量的第k个元素,将两个不同编码之间的逐个元素差的绝对值之和,然后加上w权重和b,就像正常的逻辑回归单元一样,然后将会在这128个特征上训练出恰当的权重,用来判断这两张照片是否为同一个人。学会预测是0还是1.


chi square formular (green words)

需要注意的是,你训练的神经网络,不同的图片编码时,用的都是相同的网络,相同的参数。如果有新员工进来,可以用这个卷积神经网络来计算出编码,得到其编码,很职位预编码(precompute),这种预计算的概念,可以节约相当大的计算量。

总结:当创建了一个包含多对图片的训练集时,当目标标识是1,意味着这一对图片来自同一个人,当目标标识是0时,意味着这一对图片来着不同的人,然后你用反向传播,不同的图片对来训练神经网络。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352