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

本文主要是介绍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.
这里写图片描述

这篇关于1703.In Defense of the Triplet Loss for Person Re-Identification 论文阅读笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/234437

相关文章

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

AI hospital 论文Idea

一、Benchmarking Large Language Models on Communicative Medical Coaching: A Dataset and a Novel System论文地址含代码 大多数现有模型和工具主要迎合以患者为中心的服务。这项工作深入探讨了LLMs在提高医疗专业人员的沟通能力。目标是构建一个模拟实践环境,人类医生(即医学学习者)可以在其中与患者代理进行医学

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓