TensorFlow SiameseNet 人脸识别实战

文章的主要工作是用SiameseNet模型实现人脸识别的功能。
SiameseNet卷积神经网络模型如下(详细结构移步到GitHub,简化版的VGG):


TensorFlow SiameseNet 人脸识别实战_第1张图片
SiameseNet模型

TensorFlow SiameseNet 人脸识别实战_第2张图片
输入输出示例

数据集采用微软的MS-Celeb-1M公开人脸数据集,大家直接下载对齐好的那个数据集,首先网络上有一份清理过的list,文件名是:MS-Celeb-1M_clean_list.txt,大约160M。然后用组合算法生成positive_pairs_path.txt和negative_pairs_path.txt两个文件,每个约150W对,生成后的样子是:


TensorFlow SiameseNet 人脸识别实战_第3张图片
生成文件示例

关键的问题来了,Loss函数怎么定义,其实就是Logistic Regression的Loss函数,这里值得注意的是最后一层的激活函数要用Sigmoid Function。Loss函数如下:


Loss函数

接下来就是训练咯,在TITAN X上训练大约3天,我们可以看到这样的Loss曲线:


TensorFlow SiameseNet 人脸识别实战_第4张图片
Loss曲线

我们可以看到,Loss收敛得很好,不过经过多次试验当Loss下降到0.1左右的时候就不在下降了,目前我还没有找到原因,如果您有解决这个问题的思路,可以给我留言或者给我发邮件([email protected])。

那我们的模型正确率怎么样呢?
哈哈,不高,在LFW上的正确率90%+,模型还需要优化。

项目源码:
https://github.com/hfrommane/TF-siamesenet

如果您喜欢,给我点一个star,感谢。

你可能感兴趣的:(TensorFlow SiameseNet 人脸识别实战)