Triplet loss最初是在 FaceNet: A Unified Embedding for Face Recognition and Clustering 论文中提出的,可以学到较好的人脸的embeddingsoftmax函数呢,softmax最终的类别数是确定的,而Triplet loss学到的是一个好的embedding,相似的图像在embedding空间里是相近的,可以判断是否是同一个人脸。<a, p, n>
a: anchorp: positive, 与 a 是同一类别的样本n: negative, 与 a 是不同类别的样本
a, p 的距离, 拉远 a, n 的距离easy triplets: L=0L = 0L=0 即 d(a,p)+margin<d(a,n)d(a, p) +margin < d(a, n)d(a,p)+margin<d(a,n),这种情况不需要优化,天然a, p的距离很近, a, n的距离远hard triplets: d(a,n)<d(a,p)d(a, n) < d(a, p)d(a,n)<d(a,p), 即a, p的距离远semi-hard triplets: d(a,p)<d(a,n)<d(a,p)+margind(a, p) < d(a, n) < d(a, p) + margind(a,p)<d(a,n)<d(a,p)+margin, 即a, n的距离靠的很近,但是有一个margin
FaceNet 中是随机选取semi-hard triplets 进行训练的, (也可以选择 hard triplets 或者两者一起进行训练)offlineembeddings, 可以得到 很多<i, j, k> 的三元组,然后再计算 triplet lossonlineB个样本,然后计算 B 个embeddings,可以产生 B3B^3B3 个 triplets (当然其中有不合法的,因为需要的是<a, p, n>)
P个身份的人,每个身份的人K张图片(一般K 取 4)
Batch All: 计算batch_size中所有valid的的hard triplet 和 semi-hard triplet, 然后取平均得到Loss
easy triplets的情况,所以平均会导致Loss很小,所以是对所有 valid 的所有求平均 (下面代码中会介绍)triplets
PK个 anchorK-1 个 positivePK-K 个 negativeBatch Hard: 对于每一个anchor, 选择距离最大的d(a, p) 和 距离最大的 d(a, n)
triplets原文:https://www.cnblogs.com/shensobaolibin/p/12600236.html