# Triplet-Loss原理及其实现 ###### tags:`學習紀錄` [toc] --- ## Before Meeting :::success ::: [refer](http://lawlite.me/2018/10/16/Triplet-Loss%E5%8E%9F%E7%90%86%E5%8F%8A%E5%85%B6%E5%AE%9E%E7%8E%B0/) [refer](https://www.itread01.com/content/1548819573.html) [refer](https://arxiv.org/abs/1503.03832) [refer](https://arxiv.org/abs/1703.07737) [refer](https://github.com/sty61010/Blog-Back-Up/tree/master/code/triplet-loss) [refer]() [refer]() [refer]() [refer]() [refer]() --- ## Recent Paper --- ### Triplet-Loss :::success #### Abstracion - Triplet loss最初是在 FaceNet: A Unified Embedding for Face Recognition and Clustering 论文中提出的,可以学到较好的人脸的embedding - 为什么不适用 softmax函数呢,softmax最终的类别数是确定的,而Triplet loss学到的是一个好的embedding,相似的图像在embedding空间里是相近的,可以判断是否是同一个人脸。 ::: :::info #### Detail - Theory -  -  -  -  -  - Training - OFFLINE - 训练集所有数据经过计算得到对应的 embeddings, 可以得到 很多<i, j, k> 的三元组,然后再计算 triplet loss - 效率不高,因为需要过一遍所有的数据得到三元组,然后训练反向更新网络 - ONLINE - 从训练集中抽取B个样本,然后计算 B 个embeddings,可以产生 B3 个 triplets (当然其中有不合法的,因为需要的是<a, p, n>) - 实际使用中采用此方法,又分为两种策略 (是在一篇行人重识别的论文中提到的 In Defense of the Triplet Loss for Person Re-Identification),假设 B=PK, 其中P个身份的人,每个身份的人K张图片(一般K 取 4) - Batch All: 计算batch_size中所有valid的的hard triplet 和 semi-hard triplet, 然后取平均得到Loss - 注意因为很多 easy triplets的情况,所以平均会导致Loss很小,所以是对所有 valid 的所有求平均 (下面代码中会介绍) - 可以产生 PK(K−1)(PK−K)个 triplets - PK个 anchor - K-1 个 positive - PK-K 个 negative - Batch Hard: 对于每一个anchor, 选择距离最大的d(a, p) 和 距离最大的 d(a, n) - 所以公有 PK 个 三元组triplets ::: :::warning #### Conclusion - 训练结果 - python train_with_triplet_loss.py - 可以在 tensorboard 中查看 - tensorboard --logdir experiment/model/ - embeddings_mean_norm -  - fraction positive - 这个是收敛的,因为随着优化占的比例是越来越少 -  - loss - 注意这里的 loss 一般不是收敛的,因为是计算的 semi-hard 和 hard 的距离均值,因为每次是先选择出 semi-hard 和 hard 的 triplet, 那么上次优化后的可能就选择不到了,所以 loss 并不会收敛,但是fraction_postive_triplets 是收敛的,因为随着优化占的比例是越来越少的 -  - BATCH ALL - PCA 结果 -  - BATCH HARD -  ::: [refer]() --- :::success #### Abstracion ::: :::info #### Detail ::: :::warning #### Conclusion ::: [refer]() ---
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.