# 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
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up