Beyond triplet loss—— Re-ID

2023-12-13 11:18
文章标签 id re loss beyond triplet

本文主要是介绍Beyond triplet loss—— Re-ID,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一篇讲Person Re-ID的论文,来自CVPR2017,同样是改进了Triplet Loss。

文章链接: 《Beyond triplet loss: a deep quadruplet network for person re-identification》

Introduction

float

文章的出发点就在上面这张图。 如上图a,传统的Triplet Loss可能在test集上泛化效果一般,主要是因为类内方差依然比较大。文章对此增加了新的约束,用于 减小类内方差增加类间方差

即,新的Loss不仅要求 \(B_1B_3< B_1A_3\) 同时要求 \(C_1C_2< B_1A_3\)。

减小类内方差增加类间方差 这一经典思想早期主要流行在线性判别分析(LDA)上。 Deep Learning时代,DeepLDA(参考文献[1])将这一思想继续发扬光大,不过好像训练难度比较大。 ImpTrpLoss(参考文献[2]) 同样考虑到进一步约束类内误差,他们在Triplet Loss的基础上进一步约束属于同类的pair的距离应当小于一个预设值。

Method

float

首先是传统的Triplet Loss,如下式: \(x_i\) 、 \(x_j\)属于同一类,\(x_k\)属于另一类,\(\alpha_{trp}\) 表示预设的margin, \(f(x_i)\)表示归一化的高度嵌入的特征。 其描述的网络结构如上图a所示

float

上式直接使用欧式距离作为相似性度量,作者准备用一种可以学习的方式来代替,于是就有了下式: \(g(x_i,x_j)\)表示一种新的相似性测度,其描述的网络结构如上图b所示

float

上式中的\(g(x_i,x_j)\)还有必要约束一下范围,否则会造成学习很不稳定。(比如要求 \(g_1-g_2<0.1\), 如果\(g\)不约束范围,那么\(g_1 和g_2\) 同时放大10000倍将会使得约束阈值毫无意义。)于是作者在后面增加了一个Softmax约束来获得
[0,1]的相似度,同时作者也增加了一个softmax loss,整体网络结构如上图c所示

在上面的基础上,作者完善了自己的Quadruplet Loss

float

上式共有两项,前一项是传统的Triplet Loss,后一项用于进一步缩小类内差距。 由于前一项的重要更大,因此作者控制 \(\alpha_1 > \alpha_2\).

另一方面,如何确定margin的值也是一件让人很头疼的事情,选择小了收敛不好,选择大了不好收敛。 文章为此采用了一种自适应margin设定策略:

float

即margin设定为同类距离均值与异类距离均值之差,w用来调整大小,具体地对于\(\alpha_1\),\(w=1\);对于\(\alpha_2\),\(w=0.5\)。

训练初期,上面的margin策略可能导致难以收敛,因此作者前期先使用固定的margin,稳定后再实行该策略。

具体训练时,作者采用了如下图所示的四元组

float

评价

实验部分就不分析了。 最近改进Triplet Loss来做Re-ID的很多,虽然各各都声称效果不错,但实际上也都没有特别明显的提高。 同时,很多文章里面的一些结论或者说经验都有相互冲突的地方。因此,我还是比较欣赏那个说法:

我只能保证我的方法在这个任务上比较好,对于其它任务,还需要实际的检验。

参考文献

[1] L. Wu, C. Shen, and A. van den Hengel. Deep linear discriminant analysis on fisher networks: A hybrid architecture for person re-identification. Pattern Recognition, 2016

[2] D. Cheng, Y. Gong, S. Zhou, J. Wang, and N. Zheng. Person re-identification by multi-channel parts-based cnn with improved triplet loss function. In CVPR, 2016

这篇关于Beyond triplet loss—— Re-ID的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

4-4.Andorid Camera 之简化编码模板(获取摄像头 ID、选择最优预览尺寸)

一、Camera 简化思路 在 Camera 的开发中,其实我们通常只关注打开相机、图像预览和关闭相机,其他的步骤我们不应该花费太多的精力 为此,应该提供一个工具类,它有处理相机的一些基本工具方法,包括获取摄像头 ID、选择最优预览尺寸以及打印相机参数信息 二、Camera 工具类 CameraIdResult.java public class CameraIdResult {

集群环境下为雪花算法生成全局唯一机器ID策略

雪花算法是生成数据id非常好的一种方式,机器id是雪花算法不可分割的一部分。但是对于集群应用,让不同的机器自动产生不同的机器id传统做法就是针对每一个机器进行单独配置,但这样做不利于集群水平扩展,且操作过程非常复杂,所以每一个机器在集群环境下是一个头疼的问题。现在借助spring+redis,给出一种策略,支持随意水平扩展,肥肠好用。 大致策略分为4步: 1.对机器ip进行hash,对某一个(大于

在实现回显功能模块的时候,把ID设置成全局变量了

在hsapprove.jsp中: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><script type="text/javascript">function edittodayhs(hsid){//alert(hsid);//

PL/SQL工具创建Oracle数据库表,实现id字段的自动递增

通过PL/SQL工具,创建Oracle数据库表,如何实现字段ID自动递增; Oracle的自增需要依靠序列和触发器共同实现 比如:先创建一个表 create table test (id int primary key, name varchar2(10)); 创建一个序列 create sequence test_seq increment by 1 start with 1  min

分布式项目中使用雪花算法提前获取对象主键ID

hello,大家好,我是灰小猿! 在做分布式项目开发进行数据表结构设计时,有时候为了提高查询性能,在进行数据库表设计时,会使用自增ID来代替UUID作为数据的主键ID,但是这样就会有一个问题,数据的自增ID应该如何获取到下一个ID并且插入到库中呢? 如果你使用的是mybatisPlus,可以使用自带的自增注解加在id字段上即可,这样在数据入库时就可以自动给数据赋值自增的主键ID, 但是对于不

013.Python爬虫系列_re正则解析

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈 PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈 Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈 优

Beyond Compare4.2.4 64位OS最新密钥

亲测可用,拿来主义 6TTCoWi2N0Pv+o2HGfqUpZfuaMhtf2zX0u1OuNeqTYkKKWh-CKwBWkPUG3+CiAQ2q4MNPbf0t8+gmPdo+Vyw64aU-zuQQt9d7Q6EcJ+T42by0E+kxf+q3QLs40H+RD3h5OLjFGpxClodRnTCNoAM39xsWm2aHZI0Z9KdXzLo1fo1OdNlaptoK17SsxNK-

《长得太长也是错?——后端 Long 型 ID 精度丢失的“奇妙”修复之旅》

引言 在前后端分离的时代,我们的生活充满了无数的机遇与挑战——包括那些突然冒出来的让人抓狂的 Bug。今天我们要聊的,就是一个让无数开发者哭笑不得的经典问题:后端 Long 类型 ID 过长导致前端精度丢失。说到这个问题,那可真是“万恶之源”啊,谁让 JavaScript 只能安全地处理 Number.MAX_SAFE_INTEGER(也就是 9007199254740991)以内的数值呢?

练习实践-git工具-id:1-git 工具的基础命令

参考来源: csdn技能树-git https://fishc.com.cn/forum-334-1.html fishc论坛的扩展阅读 git能做什么? 进行版本控制,版本记录、版本回退; 需求场景:一个新的开发项目,随着功能的增加,代码量、相关文件数量也在逐渐增多…… 这样开发就会遇到一个问题:当需要修改一些代码的时候,不得已要删除另外一些代码。第二天脑袋突然被门框给夹了一下,又想恢复回

练习实践-git工具-id:2-git 仓库部分的基础命令

参考来源: csdn技能树-git https://fishc.com.cn/forum-334-1.html fishc论坛扩展阅读-git实用教程 git分支的实现原理理解–三棵树-工作、缓存、仓库 1.创建一个新文件license,修改readme.txt文件内容,之后查看git状态信息 F:\tmp\learning-git>echo "This is a license." >