前言:
{
最近我去了支付宝的开放日活动,似乎看到了人脸支付的未来。我也趁热打铁,借助目前比较流行的模型了解一下人脸识别的相关模型。
我在谷歌上搜到FaceNet[1],这是谷歌的一个模型,专门用来识别人脸。
}
正文:
{
论文说的很明白,模型主要分为两部分:特征提取和距离判定。结构如图2。
其中deep architecture是特征提取部分,并且在本论文中有两种。论文称第一种叫style networks(表1)。不过我更感兴趣第二种(inception),因为我搜到了其在tensorflow上的相关实现[2]。
在deep architecture之后是L2标准化部分[3],其产生输入图像在特征空间的特征向量(embedding),
关于triplet loss(三元组损失),作者没直接尝试其他损失(比如正负样本对的损失,之前看孪生神经网络时我也想过)。图3是triplet loss的示意图,式(3)是triplet loss的表达式。
式(3)中是锚点(为每个人存储的标准图像)的特征向量,
是正样本(和锚点对应同一人)的特征向量,
是负样本(和锚点对不同人)的特征向量,α被称为边缘。由此可见,每个batch包含图像的数量为3的整数倍。
}
结语:
{
github上有人从新整理了facenet的代码并加了中文注释[4],值得参考。
由于最近特忙,所以这段时间的博客应该都比较精简。
参考资料:
{
[1]https://arxiv.org/pdf/1503.03832.pdf
[2]https://github.com/davidsandberg/facenet
[3]https://www.tensorflow.org/api_docs/python/tf/math/l2_normalize
[4]https://github.com/boyliwensheng/understand_facenet
}
}