Pytorch损失函数优化的目标是让loss越小越好,如果损失是平方,最小是0,所以优化目标是为0
如果人脸识别用欧式距离,正样本距离越小越好,距离的平方即可,
负样本这是欧式距离,目标是让距离越大也好,loss只能越小越好,那就距离乘以-1,确实会越来越小,但是loss向负无穷靠近,正样本的loss很小,感觉被淹没忽略了,
所以人脸识别用距离损失函数感觉不太合适。
以下内容转自:
人脸识别之欧氏距离——余弦距离_猫猫与橙子的博客-CSDN博客
最近训练了一个人脸识别模型,在测试集上的效果较之前的模型相比(lfw,cfp_fp,agedb_30),accucay都有所提升,但是在自己的测试集效果上却特别差。然后仔细的研读了相应的测试代码,先把训练工程中的代码贴出来:
diff = np.subtract(embeddings1, embeddings2)#做减法
dist = np.sum(np.square(diff), 1)#计算各元素的平方后加和
InsightFace中的代码使用的是欧氏距离,使用网络结构提取的特征进行欧式距离计算两个特征的相似度;
而我的测试代码使用的是余弦距离,测试代码:
regmat = np.array(regfeat) #regfeat特征
capmat = np.array(capfeat)