1703.In Defense of the Triplet Loss for Person Re-Identification 论文阅读笔记

1703.In Defense of the Triplet Loss for Person Re-Identification-v2
本文为Triplet 的改进方法进行end-to-end 的基于深度学习的度量学习,作者改进了tripletloss,分别采用现成的可参数迁移的resnet-50v2模型和基于resnet设计的从头训练的模型进行了实验,在CUHK03,Market-1501和MARS数据集上。
文章的贡献主要有两个方面:
(1) 设计了新的Triplet Loss,并和其它变种进行了对比。
(2) 对于是否需要 pre-trained模型,进行了实验对比分析。

相关资源:
Paper: https://arxiv.org/abs/1703.07737
Github: https://github.com/VisualComputingInstitute/triplet-reid
还有一篇基于该文章的改进:
Margin Sample Mining Loss: A Deep Learning Based Method for Person Re-identification
还有一篇来自CVPR 的文章,同样是改进Triplet Loss
文章链接: 《Beyond triplet loss: a deep quadruplet network for person re-identification》
Beyond triplet loss—— Re-ID

其他网友的讲解:
基于Triplet loss 函数训练人脸识别深度网络
基于Triplet loss函数训练人脸识别深度网络(Open Face)
description of the triplet loss in Tensorflow
triplet loss 原理以及梯度推导
Tutorial: Triplet Loss Layer Design for CNN
http://blog.csdn.net/shuzfan/article/details/70187597
https://www.cnblogs.com/wangxiaocvpr/p/7105923.html
http://blog.csdn.net/qq_21190081/article/details/78417215
http://blog.csdn.net/yuanchheneducn/article/details/78534604
Understanding Triplet Loss and Two example code
https://www.zhihu.com/question/38937343/answer/94137046

简介:
Classification Loss: 当目标很大时,会严重增加网络参数,而训练结束后很多参数都会被摒弃。
Verification Loss: 只能成对的判断两张图片的相似度,因此很难应用到目标聚类和检索上去。因为一对一对比太慢。
Triplet Loss: 端到端,简单直接; 自带聚类属性; 特征高度嵌入,但是不好训练。hard mining在Triplet训练中是一个很重要的步骤。 没有hard mining会导致训练阻塞收敛结果不佳,选择过难的hard又会导致训练不稳定收敛变难。此外,hard mining也比较耗时而且也没有清楚的定义什么是 “Good Hard”。

Triplet Loss最早来源于 Google 的 FaceNet,Triplet Loss 的想法很简单: 类内距离趋小, 类间距离趋大.Triplet Loss 是当前应用,很广泛的一种损失函数,在人脸识别和聚类领域,这是一种很自然的映射与计算损失的方式,比如FaceNet里,通过构建一,embedding 方式,将人脸图像直接映射到欧式空间,而优化这种embedding的方法可以概括为,构建许多组三元组(Anchor,Positive,Negative),其中Anchor与Positive同label,Anchor与Negative不同label(在人脸识别里面,就是Anchor,Positive是同一个个体,而与Negative是不同个体),通过学习优化这embedding,使得欧式空间内的Anchor与Positive 的距离比与Negative的距离要近。
triplet loss的最主要应用也就是face identification,person re-identification,vehicle re-identification的各种identification识别问题上当然你可以把每个人当做一个类别来进行分类训练,但是往往最后会造成softmax的维数远大于feature的维数,想想resnet50 global ap出来一个2048的feature对应到一个几万,几十万的分类softmax就可怕。另外一个结论就是triplet loss通常能比classification得到更好的feature,我个人测试triplet loss至少比classification高10个点。还有一个优点就是triplet loss 可以卡阈值,triplet loss训练的时候要设置一个margin,这个margin可以控制正负样本的距离,当feature 进行normalization后,可以更加方便的卡个阈值来判断是不是同一个ID当然triplet loss也有缺点,就是收敛慢,而且比classification更容overfitting。

该论文中,对 triplet loss 的一个讨论,里面的 batch hardmining 非常好用。Triplet loss的缺点在于随机从训练集中挑选出三张图片,那么可能会出现挑选出来的很可能是简单的样本,比如很像的正样本对和很不像的负样本对。作者认为,让网络一直学习简单的样本会限制网络的泛化能力,因此提出一种在线batch hard sample mining的改进版triplet loss。
这里写图片描述

几种Triplet 变种:摘自[链接](https://www.cnblogs.com/wangxiaocvpr/p/7105923.html)
Large Margin Nearest Neighbor loss:由于是最近邻分类,所以同一类当中可能有多个cluster,而且固定的cluster中心也比较难以确定。
FaceNet Triplet Loss:不要求同类目标都靠近某个点,只要同类距离大于不同类间距离就行。
Batch All Triplet Loss:FaceNet Triplet Loss训练时数据是按顺序排好的3个一组3个一组。假如batch_size=3B,那么实际上有多达很多种三元组组合,仅仅利用B组就很浪费。改变一下数据的组织方式:batch size=K×Bbatch size=K×B,即随机地选出K个人,每个人随机地选B张图片。 这样总共会有 PK(PK−K)(K−1)PK(PK−K)(K−1)种组合
Batch Hard Triplet Loss:Batch All Triplet Loss看起来一次可以处理非常多的三元组,但是有一点很尴尬:数据集非常大时训练将会非常耗时,同时随着训练深入很多三元组因为很容易被分对而变成了“无用的”三元组。怎么办? Hard Mining. 但是,过难的三元组又会导致训练不稳定,怎么办? Mining Moderate Hard。作者定义了下面的“较难”的Triplet Loss,之所以是“较难”,是因为只是在一个小的Batch里面选的最难的。
Lifted Embedding Loss:针对3个一组3个一组排列的batch,提出了一种新的Loss:将anchor-positive pair之外的所有样本作为negative,然后优化Loss的平滑边界。
这里写图片描述

多种Triplet Loss性能对比:
这里写图片描述
这里写图片描述

在数据集上的测试:
这里写图片描述
这里写图片描述
To Pretrain or not to Pretrain?
TriNet表示来自pre-trained model,LuNet是作者自己设计的一个普通网络。
这里写图片描述
从上面的表格来看,利用pre-trained model确实可以获得更好一点的效果,但是从头开始训练的网络也不会太差。

特别的,pre-trained model往往体积较大模式固定,不如自己设计网络来的灵活。同时,pre-trained model往往有其自己的固定输入,我们如果修改其输入很可能会得到相反的效果。如下表:

Trick
(1) 如果使用了hard mining, 单纯的看loss变化往往不能正确把握训练的进程。作者推荐观察一个batch中的有效三元组个数,或者所有pair间的距离。
(2) 初始margin不宜过大;

其他方面实验:

Market-1501有错标
这里写图片描述

hardest positives和hardest negatives

这里写图片描述

Experiments with Distractors

这里写图片描述
这里写图片描述

其他截图
这里写图片描述

网络结构
这里写图片描述

full Barnes-Hut t-SNE visualization from which the teaser image (Fig. in the paper) was cropped. our learned embeddings for the Market-1501 test-set. Best viewed when zoomed-in.
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值