face recognition&&one-shot learning

1、人脸验证与人脸识别:

(1)人脸验证(Verification)

Input:图片、名字/ID

Output:输入的图片是否是对应的人

1 to 1问题

(2)人脸识别(recognition)

拥有一个具有K个人的数据库

输入一副人脸图像

如果图片是任意这k个人中的一位,则输出对应人的ID

2、one shot learning

对于大多数的人脸识别系统都存在一个问题就是one shot learning

对于一个人脸识别系统来说,我们需要仅仅通过先前的一张人脸的图片或者是一个样例,就实现对人的识别,这样的问题就是one shot learning,系统可以识别到对应的人。

对于one shot learning来说,因为只有单个样本,是不足以训练一个稳健的卷积神经网络来进行不同人的识别过程。而且如果有新的成员加入的话,还需要对网络重新训练,这是不现实的。

3、Similarity函数:

(1)d(img1, img2):两幅图片的差异

(2)Input:two images

(3)Output:差异度

(3)if d(img1, img2) <= threshold

Similarity函数实现:

d(x1, x2) = ||f(x1)-f(x2)))||_2^2

因此:如果x1,x2是同一幅图片,那么d(x1, x2)很小,反之很大

 

 

4、Siamese网络:

对于一个卷积网络,我们去掉最后的softmax层,将图片输入,最后输出一个N维的向量(图中以N=128)。将不同人的图片样本输入相同参数的网络结构,得到各自的图片的编码。

5、Triplet损失函数

为了使用Triplet损失函数,我们需要比较成对的图像(三元组术语)

(1)Anchor(A):目标图片

(2)Positive(P):与A同一人的图片

(3)Negative(N):与A不同人的图片

所以:d(A, P)=||f(A)-f(P)||^2\leqslant ||f(A)-f(N)||^2=d(A, N)

也就是||f(A)-f(P)||^2-||f(A)-f(N)||^2\leqslant0

上面的公式存在一个问题,就是当f(A)=f(P)=f(N)=0时,也就是神经网络学习到的函数总是输出0时,或者f(A)=f(P)=f(N)时,也满足上面的公式,为了防止出现这些情况,我们对上式进行修改:

||f(A)-f(P)||^2-||f(A)-f(N)||\leqslant -\alpha(称为"margin")即:

||f(A)-f(P)||^2-||f(A)-f(N)||^2+\alpha\leqslant 0\alpha作为超参数,不同大小有不同的效果。

因此通过上面的推到我们可以定义triplet损失函数

L(A,P,N)=max(z, 0)=max(||f(A)-f(P)||^2-||f(A)-f(N)||^2+\alpha, 0)

理解:当z小于0时,我们可以认为这个差距是满足我们的要求的,不需要对参数调整做出贡献,因此,我们可以把代价作为0,即0与负数中的较大值0,当z大于0时,相同图片的编码差异比不同图片的编码差异还大,这是需要做出调整的,因此计入损失函数中。

整个网络的代价:

J=\sum_{i=1}^mL(A^{(i)},P^{(i)},N^{(i)})

6、Simaese二分类改进

除了利用上面的Triplet损失函数来学习人脸识别卷积网络参数的方法外,还有其他方式。我们可以将人脸识别问题利用Siamese网络当成一个二分类问题,同样可以实现参数的学习。

对两张图片应用Simaese网络,计算得到两张图片的N维编码,然后将两个编码输入到一个logistic regression单元中,然后进行预测。相同的人则输出1,否则输出0。

对于最后的sigmoid函数,我们可以进行如下计算:

A = \sigma (\sum_{k=1}^Nw_i|f(x^{(i)})_k-f(x^{(j)})_k|+b )

将两个向量对应元素的差值作为特征输入到logistic regression的单元中,增加参数w_ib,通过训练得到合适的参数权重和偏置,进而判断两张图片是否是同一个人。同时输入逻辑回归单元还可以进行更改:

\frac{(f(x^{(i)})_k-f(x^{(j)})_k)^2}{f(x^{(i)})_k+f(x^{(j)})_k},也称为卡方公式、卡方相似度。

在实际的人脸验证系统中,我们可以对数据库的人脸图片进行预计算,存储卷积网络得到的编码。当有图片进行识别时,运用卷积网络计算新图片的编码,与预计算保存好的编码输入到逻辑回归单元中进行预测。这样可以提高我们系统预测的效率,节省计算时间。

利用Siamese 网络,我们可以将人脸验证当作一个监督学习,创建成对的训练集和是否同一个人的输出标签。

以上内容来自:https://zhuanlan.zhihu.com/p/31485345

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/github_37973614/article/details/81227335