人脸识别之FaceNet

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_14845119/article/details/53309254

这是一篇2015年的cvpr,FaceNet: A UnifiedEmbedding for Face Recognition and Clustering,取得了当时人脸识别的state-of-the-art,论文主要提出了tripletloss这一思想。

 

如上图所示,简单的说,triplet就是一个由(Anchor ,Positive,Negative)组成的三元组。其中,Anchor(表示为Xa)为锚,表示从数据集中随机选择的一个样本,Positive(表示为Xp)表示和Anchor属于同一类别的样本,Negative(表示为Xn)表示和Anchor属于不同类别的样本。

         我们分别用下面的三个元素来表示其学习到的特征向量:

tripletloss的作用就是训练的过程中,使得Xa与Xp之间的距离尽可能小,Xa与Xn之间的距离尽可能大,为了绝对的区分开,真正做到discriminative,还要使得Xa与Xp的距离比Xa与Xn的距离小一个间隔,类似svm中的几何间隔。

 

triplet loss相应的目标函数为

 

 

 

即目标函数取0或者上面式子的最大值,当上面式子有值的时候,表示会产生损失,为0的时候表示没有产生损失。

在逆向传播的过程中,梯度按下面的公式计算:

 

具体在caffe中,triplet loss的实现,可以参考happynear在github上分享的他自己维护的caffe,里面有相应的实现。https://github.com/happynear/caffe-windows

 

另外CMU开源的openface中也用到了基于torch的tripletloss。

基于TensorFlow的facenet的实现,目前lfw识别率已经更新到了99.4%,https://github.com/davidsandberg/facenet

 

展开阅读全文

没有更多推荐了,返回首页