triplets 、triplet Loss和 hard triplets

本文大多数知识来源于此文:https://blog.csdn.net/fire_light_/article/details/79592804

triplets

设左一的图为 Anchor(参考点),左二为Negative(反例),右一为Positive(正例),这三张图片构成一个三元组(triplet),其中A和P的欧式距离可能很大,A和N的欧式距离可能很小。

triplet Loss

什么是Triplet Loss呢?顾名思义,也就是根据三张图片组成的三元组(Triplet)计算而来的损失(Loss)。

其中,三元组由Anchor(A),Negative(N),Positive(P)组成,任意一张图片都可以作为一个基点(A),然后与它属于同一人的图片就是它的P,与它属于同一人的图片就是它的N。

Triplet Loss的学习目标可以形象的表示如下图:

img

网络没经过学习之前,A和P的欧式距离可能很大,A和N的欧式距离可能很小,如上图左边,在网络的学习过程中,A和P的欧式距离会逐渐减小,而A和N的距离会逐渐拉大。

也就是说,网络会直接学习特征间的可分性:同一类的特征之间的距离要尽可能的小,而不同类之间的特征距离要尽可能的大。

意思就是说通过学习,使得类间的距离要大于类内的距离。

损失函数为:

img

其中,左边的二范数表示类内距离,右边的二范数表示类间距离,α是一个常量。优化过程就是使用梯度下降法使得损失函数不断下降,即类内距离不断下降,类间距离不断提升。


hard triplets

理论上说,为了保证网络训练的效果最好,我们要选择hard positive 
这里写图片描述

以及hard negative

这里写图片描述

来作为我们的三元组

因此,hard triplets应该是满足类内距离最大化并且类间距离最小化的三元组。

猜你喜欢

转载自blog.csdn.net/weixin_40710375/article/details/80738910