Re-ID with Triplet Loss
一篇讲Person Re-ID的论文,与人脸识别(认证)有很多相通的地方。
文章链接: 《In Defense of the Triplet Loss for Person Re-Identification》
Github链接:https://github.com/VisualComputingInstitute/triplet-reid 目前还没有放出代码,作者说等论文录用了就放出来。
- Introduction
- Triplet Loss
- Large Margin Nearest Neighbor loss
- FaceNet Triplet Loss
- Batch All Triplet Loss
- Batch Hard Triplet Loss
- Lifted Embedding Loss
- Distance Measure
- Soft-margin
- Experiments
- 多种Triplet Loss性能对比
- To Pretrain or not to Pretrain
- Trick
- 参考文献
Introduction
Re-ID和图像检索有点类似。这样来看,Google的FaceNet利用Triplet Loss训练的高度嵌入的特征,似乎很适合做这样大范围的快速比对。 但是,很多的研究文献表明常见的classification或者结合verification Loss比Triplet Loss似乎更适合这个任务。 他们通常将CNN作为特征提取器,后面再接专门的测度模型。但是这两种Loss有着明显的缺点:
Classification Loss: 当目标很大时,会严重增加网络参数,而训练结束后很多参数都会被摒弃。
Verification Loss: 只能成对的判断两张图片的相似度,因此很难应用到目标聚类和检索上去。因为一对一对比太慢。
但是 Triplet Loss还是很吸引人啊: 端到端,简单直接; 自带聚类属性; 特征高度嵌入。
为什么Triplet训不好呢或者说不好训呢?
首先需要了解,hard mining在Triplet训练中是一个很重要的步骤。 没有hard mining会导致训练阻塞收敛结果不佳,选择过难的hard又会导致训练不稳定收敛变难。此外,hard mining也比较耗时而且也没有清楚的定义什么是 “Good Hard”。
文章的贡献主要有两个方面:
(1) 设计了新的Triplet Loss,并和其它变种进行了对比。
(2) 对于是否需要 pre-trained模型,进行了实验对比分析。
Triplet Loss
这一小节主要介绍几种Triplet 变种。
Large Margin Nearest Neighbor loss
比较早的Triplet形式(参考文献[1])。 \(L_{pull}\) 表示拉近属于同一目标的样本; \(L_{push}\) 表示拉远不同目标的样本。
由于是最近邻分类,所以同一类当中可能有多个cluster,而且固定的cluster中心也比较难以确定。
FaceNet Triplet Loss
Google的人脸认证模型FaceNet(参考文献[2]), 不要求同类目标都靠近某个点,只要同类距离大于不同类间距离就行。完美的契合人脸认证的思想。
Batch All Triplet Loss
FaceNet Triplet Loss训练时数据是按顺序排好的3个一组3个一组。假如batch_size=3B,那么实际上有多达 \(6B^2-4B\)种三元组组合,仅仅利用B组就很浪费。
所以我们可以首先改变一下数据的组织方式:\(batch\ size = K\times B\),即随机地选出K个人,每个人随机地选B张图片。 这样总共会有 \(PK(PK-K)(K-1)\)种组合,计算loss时就按照下式统计所有可能。
Batch Hard Triplet Loss
Batch All Triplet Loss看起来一次可以处理非常多的三元组,但是有一点很尴尬:数据集非常大时训练将会非常耗时,同时随着训练深入很多三元组因为很容易被分对而变成了“无用的”三元组。
怎么办? Hard Mining. 但是,过难得三元组又会导致训练不稳定,怎么办? Mining Moderate Hard.
作者定义了下面的“较难”的Triplet Loss,之所以是“较难”,是因为只是在一个小的Batch里面选的最难的。
其中 \(x_j^i\) 表示第 \(i\) 个人的第 \(j\)张图片。
Lifted Embedding Loss
文献[3]针对3个一组3个一组排列的batch,提出了一种新的Loss:将anchor-positive pair之外的所有样本作为negative,然后优化Loss的平滑边界。
文章针对 \(batch\ size = K\times B\)的形式对上式稍作改进:
Distance Measure
很多相关工作中,都使用平方欧式距离 \(D(a,b) = |a-b|_2^2\) 作为度量函数。 作者虽然没有系统对比过其它度量函数,但是在实验中发现非平方欧氏距离 \(D(a,b) = |a-b|_2\) 表现的更为稳定。 同时,使用非平方欧氏距离使得margin 这个参数更具有可读性。
Soft-margin
之前的很多Triplet Loss都采用了截断处理,即如果Triplet三元组关系正确则Loss直接为0。 作者发现,对于Re-ID来说,有必要不断地拉近同类目标的距离。因此,作者设计了下面的soft-margin函数:
\(s(x) = ln(1+e^x)\)
Experiments
多种Triplet Loss性能对比
(1) 没有Hard Mining的 \(L_{tri}\)往往模型效果不好,如果加上简单的offline hard-mining(OHM),则效果很不稳定,有时候很好有时候完全崩掉。
(2) Batch Hard形式的 \(L_{BH}\)整体表现好于 Batch All形式的 \(L_{BA}\)。作者猜测,训练后期很多三元组loss都是0,然后平均处理时会把仅剩的有用的信息给稀释掉。为了证明该猜想,作者计算平均loss时只考虑那些不为0的,用 \(L_{BA\neq 0}\)表示,发现效果确实会变好。
(3) 在作者的Re-ID实验中,Batch Hard + soft-margin的效果最好,但是不能保证在其他任务中这种组合依然是最好的,这需要更多的实验验证。
To Pretrain or not to Pretrain?
TriNet表示来自pre-trained model,LuNet是作者自己设计的一个普通网络。
从上面的表格来看,利用pre-trained model确实可以获得更好一点的效果,但是从头开始训练的网络也不会太差。
特别的,pre-trained model往往体积较大模式固定,不如自己设计网络来的灵活。同时,pre-trained model往往有其自己的固定输入,我们如果修改其输入很可能会得到相反的效果。如下表:
Trick
(1) 没有必要对输出特征进行归一化;
(2) 如果使用了hard mining, 单纯的看loss变化往往不能正确把握训练的进程。作者推荐观察一个batch中的有效三元组个数,或者所有pair间的距离。
(3) 初始margin不宜过大;
参考文献
[1] K. Q. Weinberger and L. K. Saul. Distance Metric Learning for Large Margin Nearest Neighbor Classification. JMLR,10:207–244, 2009
[2] F. Schroff, D. Kalenichenko, and J. Philbin. FaceNet: A Unified Embedding for Face Recognition and Clustering. In CVPR, 2015
[3] H. O. Song, Y. Xiang, S. Jegelka, and S. Savarese. Deep Metric Learning via Lifted Structured Feature Embedding. In CVPR, 2016
Re-ID with Triplet Loss相关推荐
- triplet loss 在深度学习中主要应用在什么地方?有什么明显的优势?
作者:罗浩.ZJU 链接:https://www.zhihu.com/question/62486208/answer/199117070 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非 ...
- Unified Batch All Triplet Loss for Visible-Infrared Person Re-identification
论文:https://arxiv.org/pdf/2103.04607.pdf 问题 对于跨膜态难样本三元组损失, 在一批中选择P个身份ID,对每个ID随机选择K张可见图像和K张红外图像.这样的采样策 ...
- 论文阅读29 | Parameter Sharing Exploration and Hetero-center Triplet Loss for V-TReID
论文:Parameter Sharing Exploration and Hetero-center Triplet Loss for Visible-Thermal Person Re-Identi ...
- 论文笔记3 --(ReID)In Defense of the Triplet Loss for Person Re-Identification
<In Defense of the Triplet Loss for Person Re-Identification> 论文:https://arxiv.org/abs/1703.07 ...
- Torch 中添加自己的 nn Modules:以添加 Dropout、 Triplet Loss 为例
Preface 因为要复现前面阅读的一篇论文:<论文笔记:Deep Relative Distance Learning: Tell the Difference Between Similar ...
- REID triplet loss 图片按照N * K 进行预处理
我们在进行triplet loss 的计算时候,必须使得送入网络的mini_batch中的数据是按照N 个ID,每个ID存在K个不同个体的方式进行的,但是如果我们按照普通的dataloader 获取方 ...
- Triplet loss 源码解析
2021最后一天,赶紧学习一手吧.由于 Triplet loss 很重要,而代码不复习又很容易忘,这里记录一下. 代码在这里:https://github.com/VisualComputingIns ...
- 一文理解Ranking Loss/Margin Loss/Triplet Loss
点击蓝字 关注我们 作者丨土豆@知乎 来源丨https://zhuanlan.zhihu.com/p/158853633 本文已获授权,未经作者许可,不得二次转载. 前言 Ranking loss在 ...
- 三元组损失 Triplet Loss及其梯度
Triplet Loss及其梯度 Triplet Loss及其梯度_jcjx0315的博客-CSDN博客 Triplet Loss简介 我这里将Triplet Loss翻译为三元组损失,其中的三元也就 ...
- Person Re-Identification by Multi-Channel Parts-Based CNN with Improved Triplet Loss Function
作者:西安交大的De Cheng, Yihong Gong, Sanping Zhou, Jinjun Wang, Nanning Zheng 主要贡献: 贡献有两个,一个是改进的网络结构,一个是改进 ...
最新文章
- 数据中心布线系统构成及不同规模范例
- PHP vs Node.js vs Nginx-Lua(转)
- 论文排版怕翻车?这个排版神器赶紧用起来!
- 简单c语言课设计题目,C语言课程设计题目
- mysql从库延时好高_部署MySQL延迟从库的几个好处
- 11倍增长!支付宝自研数据库OceanBase再次刷新世界纪录
- iBATIS In Action(六)执行非查询语句
- SQL——连接查询、聚合函数、开窗函数、分组功能、联合查询、子查询
- 【python】编程语言入门经典100例--11
- [转]数据恢复 文件恢复工具 DiskGenius v4.9.1 绿色专业版及单文件
- H5页面和微信小程序的优劣对比
- 项目管理软件-禅道-内网部署
- leetcode739
- Boost:shared_memory_object --- 共享内存
- 为什么打印还要另存为_为什么打印时会出现另存为保存文件
- 大连鸿蒙刺青怎么样,哪个部位纹身最“疼”?纹身师:敢在这三个地方纹身的,是真汉子...
- PotPlayer 播放器美化设置
- JavaWeb购物系统
- Mac如何安装numpy,pandas,matplotlib,spicy等包,以及下载速度慢遇到read timed out问题如何解决
- 假设为一个大学今年的学费是10000元,而且以每年7%的速度增加。多少年后学费会翻倍?
热门文章
- 网络工程管理 第七章 应用层协议 万维网 DNS 电子邮件 FTP DHCP TELNET
- 1----sim模块的使用
- 通达信资金净流入公式_通达信成交额资金净流入指标公式
- 分享一个统计 Android 模块构建时长的脚本工具
- 中南林业科技大学Java实验报告十二:数据库系统设计 - 从0到1搭建java可视化学生管理系统源代码
- 鸿蒙传世官网,《传奇世界》官网-17周年力作“时长版”火爆公测!
- 关于图文识别功能相关技术的实现
- 安卓开发与ios开发!一个Android应届生从上海离职,复习指南
- 虚拟化(六):vmware 桌面虚拟化 horizon view 介绍
- ZZULIOJ:1134: 字符串转换