如果有不对的地方,欢迎指正!!!只是个人理解。
一、引言
人脸识别,REID都是经过卷积神经网络提取图像的特征向量,再进行比对的过程。神经网络的选择,可以选择经典的或者当下流行的,这里主要总结下千变万化的人脸识别 REID损失函数。
这里先说人脸识别比较火有代表性的两种方法。
facenet: 该方法用了triplet loss损失函数,Triplet loss属于度量学习,相比起softmax,它可以方便地训练大规模数据集,不受显存的限制。缺点是过于关注局部,导致难以训练且收敛时间长。代码链接如下:
https://github.com/davidsandberg/facenet
arcface:arcface loss属于变形softmax。softmax训练的时候收敛得很快,但是精确度一般达到0.9左右就不会再上升了,一方面是作为分类网络,softmax不能像度量学习一样显式的优化类间和类内距离,所以性能不会特别好,另外,人脸识别的关键在于得到泛化能力强的feature,与分类能力并不是完全等价的。这种损失函数改进了softmax,对特征向量归一化和加性角度间隔,提高了类间可分性同时加强类内紧度和类间差异。代码链接如下:
https://github.com/deepinsight/insightface
这两种方法也恰巧代表了人脸识别损失函数的两种研究方向,表征学习和度量学习,它们是什么意思?又有什么关系?请继续往下看。
二、表征学习和度量学习
度量学习:计量特征间距离,通过距离损失优化网络——>欧式距离及其变种
表征学习:将问题作为分类问题和验证问题——> softmax及其变种损失函数
这里度量学习很好理解,用欧式距离就可以计算出两串特征向量的相似性。如何理解将特征向量用于softmax损失