[论文阅读笔记28] 对比学习在多目标跟踪中的应用


这次做一篇2D多目标跟踪中使用对比学习的一些方法.

对比学习通过以最大化正负样本特征距离, 最小化正样本特征距离的方式来实现半监督或无监督训练. 这可以给训练MOT的外观特征网络提供一些启示. 使用对比学习做MOT的鼻祖应该是QDTrack, 本篇博客对QDTrack及其后续工作做一个总结.

持续更新…


1. QDTrack

论文: QDTrack: Quasi-Dense Similarity Learning for Appearance-Only Multiple Object Tracking (TPAMI2023)

1.1 主要思想

外观特征在跟踪中是非常重要的线索. 训练外观特征网络的方式有很多, 例如最开始JDE, Fairmot将外观特征网络的训练问题转换为分类问题, 也即每个目标(identity)都自成一类. 然而, 这样一个数据集中可能有成千上万个类, 但是外观特征的维度往往不会很大, 这样就给这个分类网络的训练带来了一定的困难.

如果采用对比学习的方式, 我们每次只关注若干正样本和若干负样本, 我们要做的就是拉大正负样本之间的距离就可以了, 实际上这时候就减少了一些训练的难度. 然而, 我们知道, 对于对比学习来说, 通常来讲样本量越多越好, batch size越大越好. 基于这个认识, QDTrack提出了一种密集采样的方法增大正负样本数量, 进而提高对比学习性能. 同时, 将MOT的关联问题就转换为了求特征距离, 不需要依赖于运动特征.

1.2 具体方法

训练过程在这里插入图片描述
算法流程是这样的. 首先, 选定一帧 I 1 I_1 I1表示key frame, 然后在其附近的时序上再随机采样一帧 I 2 I_2 I2作为reference frame. QDTrack是可以和检测器一起端到端训练的, 因此我们可以根据检测器的结果定位每个目标, 并采用ROI Align方法将每个目标对应区域的特征都提出来.

正负样本的定义: 对于预测的一个边界框, 如果它和某个真值的IoU大于 α 1 \alpha_1 α1, 则认为该边界框是真值的正样本; 如果IoU大于 α 2 \alpha_2 α2, 则认为该边界框是真值的负样本. 对于时序上, key frame和reference frame的两个边界框对应同一个目标, 则该样本对为正, 否则为负.

如果key frame上有 V V V个样本, reference frame上有 K K K个样本, 则对于一个正样本对 ( v , k + ) (\mathbf{v}, \mathbf{k^+}) (v,k+), 损失函数为:

L e m b e d = − log ⁡ exp ⁡ ( v k + ) exp ⁡ ( v k + ) + ∑ k − exp ⁡ ( v k − ) \mathcal{L}_{embed} = - \log \frac{ \exp ({\mathbf{v} \mathbf{k^+}})} {\exp ({\mathbf{v} \mathbf{k^+}})+\sum_{\mathbf{k^-}}\exp ({\mathbf{v} \mathbf{k^-}})} Lembed=logexp(vk+)+kexp(vk)exp(vk+)

其中 v , k + , v , k − \mathbf{v}, \mathbf{k^+}, \mathbf{v}, \mathbf{k^-} v,k+,v,k分别表示key frame的某个样本, 以及它对应的正负样本的特征,

在QDTrack的设计中, 最重要的就是通过密集匹配去增加样本对. 也就是说, 一个key frame的样本要和所有reference frame的样本进行对应. 损失要对所有的正样本求和, 有:

L e m b e d = − ∑ k + log ⁡ exp ⁡ ( v k + ) exp ⁡ ( v k + ) + ∑ k − exp ⁡ ( v k − ) \mathcal{L}_{embed} = - \sum_{\mathbf{k^+}}\log \frac{ \exp ({\mathbf{v} \mathbf{k^+}})} {\exp ({\mathbf{v} \mathbf{k^+}})+\sum_{\mathbf{k^-}}\exp ({\mathbf{v} \mathbf{k^-}})} Lembed=k+logexp(vk+)+kexp(vk)exp(vk+)

整理一下:

L e m b e d = − ∑ k + log ⁡ exp ⁡ ( v k + ) exp ⁡ ( v k + ) + ∑ k − exp ⁡ ( v k − ) = ∑ k + log ⁡ exp ⁡ ( v k + ) + ∑ k − exp ⁡ ( v k − ) exp ⁡ ( v k + ) = ∑ k + log ⁡ [ 1 + ∑ k − exp ⁡ ( v k − − v k + ) ] \mathcal{L}_{embed} = - \sum_{\mathbf{k^+}}\log \frac{ \exp ({\mathbf{v} \mathbf{k^+}})} {\exp ({\mathbf{v} \mathbf{k^+}})+\sum_{\mathbf{k^-}}\exp ({\mathbf{v} \mathbf{k^-}})} \\ = \sum_{\mathbf{k^+}}\log \frac{\exp ({\mathbf{v} \mathbf{k^+}})+\sum_{\mathbf{k^-}}\exp ({\mathbf{v} \mathbf{k^-}})} {\exp ({\mathbf{v} \mathbf{k^+}})} \\ =\sum_{\mathbf{k^+}}\log [1 + \sum_{\mathbf{k^-}}\exp(\mathbf{v} \mathbf{k^-}-\mathbf{v} \mathbf{k^+}) ] Lembed=k+logexp(vk+)+kexp(vk)exp(vk+)=k+logexp(vk+)exp(vk+)+kexp(vk)=k+log[1+kexp(vkvk+)]

上面这个式子将外层的求和放到log里就是连乘号, 计算量比较大, 因此作者采用了一种等价的方式:

L e m b e d = log ⁡ [ 1 + ∑ k + ∑ k − exp ⁡ ( v k − − v k + ) ] \mathcal{L}_{embed} = \log [1 + \sum_{\mathbf{k^+}} \sum_{\mathbf{k^-}}\exp(\mathbf{v} \mathbf{k^-}-\mathbf{v} \mathbf{k^+}) ] Lembed=log[1+k+kexp(vkvk+)]

同时, 还加入了一个辅助的损失函数, 使得正样本对之间相似度接近1, 否则接近0:

L a u x = ( v k ∣ ∣ v ∣ ∣ ∣ ∣ k ∣ ∣ − c ) 2 \mathcal{L}_{aux} = (\frac{\mathbf{v} \mathbf{k}}{||\mathbf{v} |||| \mathbf{k}||} - c)^2 Laux=(∣∣v∣∣∣∣k∣∣vkc)2

其中正样本对对应的是 c = 1 c=1 c=1, 否则 c = 0 c=0 c=0.

为了和检测器端到端训练, 最终的损失函数就是检测损失, L e m b e d , L a u x \mathcal{L}_{embed}, \mathcal{L}_{aux} Lembed,Laux的加权和.

推理过程

推理过程主要是两个创新点. 一个是类间NMS, 这是因为有时候检测器的分类会不准确, 导致同一个目标, 但是出现两个重叠边界框, 这两个边界框被分到不同的类. 所以作者采用了一个类间NMS.

一个是对于外观相似度计算, 没有简单地采用余弦相似度的形式, 而是采用了双向softmax. 本质是差不多的, 就是softmax考虑了所有样本的信息计算相似度. 从消融实验的结果看, 采用密集正样本和双向softmax对效果的提升都是比较明显的.

在这里插入图片描述

2. Towards Discriminative Representation: Multi-view Trajectory Contrastive Learning for Online Multi-object Tracking

论文: Towards Discriminative Representation: Multi-view Trajectory Contrastive Learning for Online Multi-object Tracking (CVPR2022)

2.1 主要思想

类似于QDTrack这种方法, 往往只在相邻的时域当中取样本对, 而没有很好地利用整个轨迹时域上的信息. 针对这个问题, 这篇工作利用历史轨迹的信息更全面地描述一个目标, 进行对比学习.

他们将历史轨迹表示成一个向量, 并存储到一个动态的memory bank中. 并以此构建了以轨迹为中心的对比学习, 就可以利用好丰富的帧间信息. 这就是题目Multi-view的由来.

在这里插入图片描述

2.2 具体方法

论文的创新点一共有三个, 下面逐一介绍:

1.Learnable view sampling

作者的方法称为MTrack. MTrack是基于Fairmot改的. 当然, Fairmot是基于CenterNet, 把backbone换成了DLA-34. CenterNet是以点作为目标中心, 无锚检测器, 但作者认为只用一个点代表目标是不行的, 是因为目标的中心点可能被遮挡, 并且为对比学习产生的样本对也不足.

为了解决这个问题, 作者就加了一个线性层, 去根据目标的中心点坐标预测更多的采样点坐标, 当然, 采样点要在边界框的范围内. 这些采样点都代表了同一个目标, 也就产生了很多正样本. (注意一个点的特征直接就是从预测的heatmap上提取的).

2. Trajectory-center memory bank

作者是如何用一个向量代表一个历史轨迹的呢?

在训练阶段, 网络以许多帧作为输入, 并检测出每个帧中所有的检测样本. 根据Learnable view sampling, 每个检测样本可以衍生出 N k N_k Nk个特征向量.

在训练阶段, 每个检测都有对应的轨迹ID (为什么? 作者没有解释). 那么, 我们就可以以当前帧检测的特征去更新memory bank中的特征. 当然, 作者在这里选择的策略是"hardest sample", 也就是选择特征最不相似的一个(用余弦距离衡量)线性更新memory bank中的对应特征.

对于损失函数, 对每一个外观特征向量 v ~ l k \tilde{v}_l^k v~lk (下标 l l l表示属于的ID, 上标 k k k表示序数), 去拉进它和它对应ID轨迹中心的距离, 放大它和其他ID轨迹中心的距离, 采用对比学习常用的InfoNCE Loss: (Softmax + 一个temperature parameter):

L N C E k = − log ⁡ exp ⁡ ( v ~ l k c l ) / τ ∑ i exp ⁡ ( v ~ l k c i ) / τ L_{NCE}^k = - \log \frac{\exp (\tilde{v}_l^k c_l) / \tau} {\sum_i \exp (\tilde{v}_l^k c_i) / \tau} LNCEk=logiexp(v~lkci)/τexp(v~lkcl)/τ

因此, 对于所有的外观embedding, 总损失为

L T C L = 1 N a ∑ k = 1 N a L N C E k L_{TCL} = \frac{1}{N_a} \sum_{k=1}^{N_a} L_{NCE}^k LTCL=Na1k=1NaLNCEk

最终的损失仿照Fairmot, 采用uncertainty loss.

总的训练框图如下:

在这里插入图片描述

推理阶段比较正常, 主要是提出了一个根据历史和现在特征余弦相似度度进行轨迹特征融合的方法. 如果和过去相似, 就取信于当前的特征, 否则不取信. 这个也是很多方法都有的.

在这里插入图片描述

3. Uncertainty-aware Unsupervised Multi-Object Tracking

论文:Uncertainty-aware Unsupervised Multi-Object Tracking (ICCV2023)

3.1 主要思想

对于无监督MOT, 由于没有目标ID的标签, 那么只能通过一些相似度准则生成伪标签. 然而, 如果发生错误, 这种错误在帧间是会累积的. 为了解决这个问题, 作者认为不确定性是不可避免的(不确定性就指的是在无标签的情况下, 两个不同的相似目标容易混淆, 或者同一个目标产生了遮挡或模糊, 也容易认为是两个目标), 但可以利用不确定性去提升效果(在我理解就是降低不确定性).

既然无监督是训练外观特征提取网络, 那么当外观发生不确定的时候怎么办呢? 那就融合运动特征(IoU)就可以. 这就是这篇文章主要创新点.

此外, 为了增大样本数量, 除了利用历史轨迹外, 该方法还采取了数据增强策略. 然而, 传统对比学习的增强方式不利于跟踪的学习, 因为他们增强并没有融合轨迹的运动信息. 为了解决这个问题, 作者将 t t t, t − τ t - \tau tτ帧的仿射变换求解出来, 然后根据历史轨迹形成当前帧"应该"长成的样子, 这样就增大了样本数量.

3.2 具体方法

不确定度的衡量

在无监督训练的时候, 我们根据外观相似度将 t − 1 t-1 t1帧的目标与 t t t帧目标进行匹配, 匹配矩阵为:

C ∈ R M t × M t − 1 , c i , j = f i t ⋅ f j t − 1 \mathbf{C}\in \mathbb{R}^{M^t \times M^{t-1}}, c_{i, j} = \mathbf{f}_i^t \cdot \mathbf{f}_j^{t-1} CRMt×Mt1,ci,j=fitfjt1

然而, 有两种情况可能让余弦相似度失真: 1) 目标自身发生遮挡或者模糊, 让相似度减小; 2) 相似目标的存在, 使得不该大的相似度变大.

也就是:

c i , j < m 1 , c i , j − c i , j 2 < m 2 c_{i, j} < m_1, c_{i, j} - c_{i, j2} < m_2 ci,j<m1,ci,jci,j2<m2

其中 m 1 , m 2 m_1, m_2 m1,m2是常数. 理想的情况, 我们应该让 c i , j c_{i, j} ci,j接近1, 而 c i , j 2 c_{i, j2} ci,j2接近0. 为了一起衡量以上两种情况, 作者定义不确定度:

σ i , j = − log ⁡ c i , j − log ⁡ ( 1 − c i , j 2 ) \sigma_{i, j} = - \log c_{i, j} - \log (1 - c_{i, j2}) σi,j=logci,jlog(1ci,j2)

该不确定度的下界为

σ i , j ≥ γ i , j = − log ⁡ m 1 − log ⁡ ( 1 + m 2 − c i , j ) \sigma_{i, j} \ge \gamma_{i, j} = - \log m_1 - \log (1 + m_2 - c_{i, j}) σi,jγi,j=logm1log(1+m2ci,j)

因此总的不确定度表现为不确定度和下界值的差:

δ i , j = σ i , j − γ i , j \delta_{i, j} = \sigma_{i, j} - \gamma_{i, j} δi,j=σi,jγi,j

以上就是不确定度的验证过程.

验证出了不确定度后, 就要进行修正.

修正主要是考虑两点: 1) 历史的外观信息 2) 运动信息(IoU)

因此, 新的代价矩阵变为:

C ′ ∈ R M t ′ × M t − 1 ′ , c i , j ′ = ( 1 K ∑ t ^ = t − K t − 1 f i t ⋅ f j t ^ ) × I ( IoU ⁡ ( b i t , b j t − 1 ) > β ) \mathbf{C}'\in \mathbb{R}^{M^{t'} \times M^{t-1'}}, \\ c_{i, j}^{\prime}=\left(\frac{1}{K} \sum_{\hat{t}=t-K}^{t-1} \boldsymbol{f}_i^t \cdot \boldsymbol{f}_j^{\hat{t}}\right) \times \mathbb{I}\left(\operatorname{IoU}\left(b_i^t, b_j^{t-1}\right)>\beta\right) CRMt×Mt1,ci,j= K1t^=tKt1fitfjt^ ×I(IoU(bit,bjt1)>β)

轨迹数据增强

这一块其实就是利用图像之间的仿射变换矩阵, 根据现有帧推测出历史帧长成什么样子, 就得到了增强的图像.

对于增强图像, 也是通过前面不确定度进行匹配衡量. 具体的, 对于第 i i i个轨迹, 轨迹长度为 n n n, 这段时间它的不确定度为

Ω i = 1 n ∑ s = t 0 t exp ⁡ ( δ i s ) \Omega_i=\frac{1}{n} \sum_{s=t_0}^t \exp \left(\delta_i^s\right) Ωi=n1s=t0texp(δis)

我们按照如下Softmax形式的原则将增强图像中的轨迹 a a a认为和 i i i是同一个
:
p ( a = i ∣ t ) = exp ⁡ ( − Ω i ) ∑ i ^ = 1 M t exp ⁡ ( − Ω i ^ ) p(a=i \mid t)=\frac{\exp \left(-\Omega_i\right)}{\sum_{\hat{i}=1}^{M^t} \exp \left(-\Omega_{\hat{i}}\right)} p(a=it)=i^=1Mtexp(Ωi^)exp(Ωi)

上面的概率越大表明二者关联的概率越大.

此外, 作者还通过历史轨迹中"最困难"的样本进行学习, 也就是表现在不确定度最大的时候:

p ( π = t − τ ∣ a ) = exp ⁡ ( δ a t − τ ) ∑ τ ^ = t 0 t − 1 exp ⁡ ( δ a t − τ ^ ) p(\pi=t-\tau \mid a)=\frac{\exp \left(\delta_a^{t-\tau}\right)}{\sum_{\hat{\tau}=t_0}^{t-1} \exp \left(\delta_a^{t-\hat{\tau}}\right)} p(π=tτa)=τ^=t0t1exp(δatτ^)exp(δatτ)

整体框图如下:

在这里插入图片描述
具体实现

在具体实现上, 类似JDE, 作者给YOLOX加了一个reid head进行训练的. 对比学习损失采用经典的InfoNCE.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/578500.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux OpenEuler(欧拉系统)无公网ip实现SSH远程连接

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;…

研究生可以直接当教师吗

在教育领域&#xff0c;教师岗位的竞争日益激烈。许多即将毕业的研究生&#xff0c;尤其是教育学专业的&#xff0c;都怀揣着一个共同的疑问&#xff1a;我能不能一出校门就直接当教师&#xff1f; 成为教师并不只是有个学历那么简单。它需要具备扎实的教育学基础、良好的教学技…

Matlab:解非线性方程组

1、基于问题求解非线性方程组 例&#xff1a; xoptimvar(x,2); %将x定义为一个二元素优化变量 eq1exp(-exp(-(x(1)x(2))))x(2)*(1x(1)^2); %创建第一个方程作为优化等式表达式 eq2x(1)*cos(x(2))x(2)*sin(x(1))1/2; %创建第二个方程作为优化等式表达式 probe…

【数据结构和算法】找到最高海拔

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 前缀和的解题模板 2.1.1 最长递增子序列长度 2.1.2 寻找数组中第 k 大的元素 2.1.3 最长公共子序列…

fpga verilog rs232 发送模块实现

RS-232是一种串行通信协议&#xff0c;用于在计算机和其他外部设备之间进行数据传输。RS-232定义了电气特性、信号级别、机械特性和传输速率等规范&#xff0c;为串行通信提供了一种标准化的接口。 RS-232通常使用DB9连接器&#xff0c;用于传输和接收数据、控制信号以及地线连…

12月25日作业

串口发送控制命令&#xff0c;实现一些外设LED 风扇 uart4.c #include "uart4.h"void uart4_config() {//1.使能GPIOB\GPIOG\UART4外设时钟RCC->MP_AHB4ENSETR | (0x1 << 1);RCC->MP_AHB4ENSETR | (0x1 << 6);RCC->MP_APB1ENSETR | (0x1 <…

边缘计算云边端全览—边缘计算系统设计与实践【文末送书-10】

文章目录 一.边缘计算1.1边缘计算的典型应用 二.边缘计算 VS 云计算三.边缘计算系统设计与实践【文末送书-10】3.1 粉丝福利&#xff1a;文末推荐与福利免费包邮送书&#xff01; 一.边缘计算 边缘计算是指在靠近物或数据源头的一侧&#xff0c;采用网络、计算、存储、应用核心…

STM32CubeIDE在使用freertos的情况下空间占用情况

因为STM32F103C8T6芯片的存储空间太小了&#xff0c;只有64K&#xff0c;在使用STM32CubeIDE的freertos情况下空间占用情况做个简单的测试&#xff1a; 不使用程序优化&#xff1a; 空间占用情况&#xff1a; 如果使用浮点运算功能的printf&#xff1a; 这个使用空间占用更大…

Isaac Sim 仿真机器人urdf文件导入

本教程展示如何在 Omniverse Isaac Sim 中导入 urdf 一. 使用内置插件导入urdf 安装urdf 插件 方法是转到“window”->“Extensions” 搜索框中输入urdf, 并启用 通过转至Isaac Utils -> Workflows -> URDF Importer菜单来访问 urdf 扩展。 表格中的 1,2,3 对应着…

利用MATLAB设计一个(2,1,7)卷积码编译码器

1、条件&#xff1a; 输入数字信号&#xff0c;可以随机产生&#xff0c;也可手动输入 2、要求&#xff1a; &#xff08;1&#xff09;能显示编码树、网格图或状态转移图三者之一&#xff1b; &#xff08;2&#xff09;根据输入数字信号编码生成卷积码并显示&#xf…

堡垒机的演变过程

堡垒机的概念源自跳板机&#xff08;前置机&#xff09;。早在20世纪90年代末21世纪初期&#xff0c;部分中大型企业为了能对运维人员的远程登录进行集中管理&#xff0c;会在机房部署一台跳板机。跳板机其实就是一台unix/windows操作系统的服务器。并且所有运维人员都需要先远…

疯狂刷屏的“小作文”事件,看到Agent智能体成释放生产力与创新力必然

最近&#xff0c;东方甄选“连续剧”迎来了“圆满”结局。“流量密码”董宇辉新身份连跳三级&#xff0c;被任命为新东方教育科技集团董事长文化助理、兼任新东方文旅集团副总裁&#xff0c;此前&#xff0c;发布18日俞敏洪和董宇辉直播预告海报&#xff0c;董已升为东方甄选高…

Floyd(弗洛伊德)算法总结

知识概览 Floyd算法适合解决多源汇最短路问题&#xff0c;其中源点是起点&#xff0c;汇点是终点。时间复杂度是。 例题展示 题目链接 活动 - AcWing 系统讲解常用算法与数据结构&#xff0c;给出相应代码模板&#xff0c;并会布置、讲解相应的基础算法题目。https://www.acw…

Spring高手之路-Spring初了解

目录 什么是Spring Spring 框架的主要功能 Spring体系结构 核心容器&#xff08;Core Container&#xff09; 数据访问与集成&#xff08;Data Access/Integration&#xff09; Web 层&#xff08;Web Layer&#xff09; AOP 与功能扩展&#xff08;AOP and Instrumenta…

pake协议传输文件magic-wormhole

pake协议传输文件magic-wormhole 1 magic-wormhole简介其他介绍 2 安装magic-wormhole3 使用示范发送文件指定虫洞码长度 接收文件 1 magic-wormhole简介 16.7k star 强推&#xff0c;丝滑、简洁、安全的开源工具——magic-wormhole 项目地址&#xff1a;https://github.com/…

Latex正文引用公式编号,以防公式调整,正文编号对应错误

一、背景 最近在改论文时&#xff0c;需要调整某些公式顺序或添加新的公式&#xff0c;导致正文中的公式引用序号错误。 这里特记录解决方法&#xff0c;即在\begin{eqnarray}后添加lable标签&#xff0c;正文不再是手动输入序号&#xff0c;而是使用命令\eqref{}。 具体如下…

Flink 输出至 Redis

【1】引入第三方Bahir提供的Flink-redis相关依赖包 <!-- https://mvnrepository.com/artifact/org.apache.bahir/flink-connector-redis --> <dependency><groupId>org.apache.bahir</groupId><artifactId>flink-connector-redis_2.11</arti…

初中女教师退休年龄是多少岁

“时光荏苒&#xff0c;岁月如梭。作为老师的你&#xff0c;是否已经开始思考自己的退休生活&#xff1f;是悠然自得地享受晚年&#xff0c;还是继续在教育的道路上发光发热&#xff1f;而无论你的选择如何&#xff0c;了解退休年龄的规定都是你规划未来的重要一环。 女教师的退…

nginx+lua+redis实践

nginxluaredis实践 1.概述 nginx、lua访问redis的三种方式&#xff1a; HttpRedis模块。 指令少&#xff0c;功能单一&#xff0c;适合简单的缓存。只支持get 、select命令。 HttpRedis2Module模块。 功能强大&#xff0c;比较灵活。 lua-resty-redis库 OpenResty。api…