人脸识别算法

问题

人脸识别算法包括两种类别,一种是给定一张图片,再给一个id,输出该图片是否是该id匹配的对;另一种是给一个数据库,再给一张图片,如果这个图片在数据库中有匹配,找出该匹配,如果没有输出不存在

siamese网络

siamese通过神经网络对图片进行编码,编码函数描述为$f(x^i)$, 输出一个特征向量,比如128维的张量

有两种办法判断两幅图片是否是同一张图片

每张图片分别通过siamese网络,分别得到特征向量$f(x^1)$和$f(x^2)$, 计算两者之间的欧式距离$d=||f(x^1)-f(x^2)||^2$,如果欧氏距离超过$\tau$,则判断为他们不是同一张图片,如果欧式距离小于$\tau$, 则判断为同一张图片;

还有一种办法是一步完成,在网络里对两者的特征向量做逻辑回归,即做二分类,如果两幅图为相同人则为1,不相同则为0

triplet loss

从数据集中选三个图片A(anchor), P(positive), N(negative), 其中anchor和positive是同一张图片,anchor和negative是不同的图片,计算anchor和positive的距离$d(A, P)$, negative和positive的距离$d(d(A, N))$, 我们的目的是使$d(A, P)$尽可能的小,$d(A, N)$尽可能大,用如下公式衡量loss:

$L=max \lbrace( d(A, P) -d(A, N) + \alpha), 0 \rbrace$

一次学习

在人脸识别问题中,如果数据库中有人员新增或者离开,就必须重新训练数据,这就比较麻烦,必须学习一次,siamese就是一次学习,即one-shot问题