DiffusionTrack: Diffusion Model For Multi-Object Tracking-扩散模型用于多目标跟踪
DiffusionTrack: Diffusion Model For Multi-Object Tracking-扩散模型用于多目标跟踪
概述:DiffusionTrack是第一个将扩散模型应用到多目标跟踪领域的模型。当前只是看了一下论文的主体的内容。(以后的一段时间在逐步的进行完善和学习)结合代码理解一下这个模型。
前置说明
首先概述一下整个跟踪过程的一个核心思想。
DiffusionTrack 将对象关联表述为从成对噪声框到两个相邻帧 t − 1 和 t 内的成对对象框的去噪扩散过程。
DiffusionTrack将数据关联视为在两帧连续帧中配对边界框空间内的生成任务
之前自己学习了基于扩散模型的检测任务,DiffusionDet这里我自己存在一个误区,如果学习这一篇论文则可以规避一下这些误区。
-
这个跟踪模型使用了YOLOX作为一个检测器,就说明了检测框不是有扩散模型生成出来的了。不要简单的想成,deepsort将检测器部分换成DiffusionDet就可以了。
-
这个模型体现了一个一致性的任务,t-1 = t把跟踪任务就退化为了检测的任务了。
-
数据关联作为生成任务,我自己个人看论文的时候理解的主要改进的部分在帧匹配的部分,使用了扩散模型的方式来替换。(也用到了检测器和卡尔曼滤波用来完成MOT的操作。)
摘要总结概括
- 多目标跟踪方法可以分类两阶段的逐检测的跟踪方法(TBD)和单阶段的联合检测和跟踪的方法(JDT)
TBD 和 JDT的具体说明:
TBD的一些情况说明:
-
两阶段的逐检测跟踪方法(TBD):将多目标跟踪任务分为两个阶段:首先进行单帧的目标检测得到每帧的目标框,然后根据帧间同一目标的共性进行关联(association)
-
在TBD框架中,检测器的性能对跟踪效果有很大的影响。TBD方法能够跟踪任意数量的目标,但需要训练特定的目标检测器。
-
TBD方法的优点在于结构清晰、容易优化,但多阶段的训练可能导致次优解。
-
TBD方法中,检测与跟踪是分开进行的,这导致模型框架较为复杂,计算代价较大。
JDT的一些情况说明:
-
JDT方法,也称为Joint Detection and Tracking,在一个共享神经网络中同时学习Detection和Embedding,使用一个多任务学习的思路共享特征学习网络参数并设置损失函数,从而可以实现Detection和ReID的交互和促进
-
JDT算法融合了检测模块和跟踪模块,达到了更快的推理速度,但存在各模块协同训练的问题。
自己曾经接触过的一些MOT算法来举一个例子:
- TBD(Tracking-by-Detection)算法:
- SORT (Simple online and realtime tracking):SORT算法使用卡尔曼滤波来预测目标的运动,并采用匈牙利算法来计算物体的匹配。
- DeepSORT:DeepSORT是SORT的扩展,采用CNN进行特征提取,增强了目标关联的能力。
- ByteTrack:ByteTrack使用YOLO-X检测,并在SORT的基础上进行改进,对检测分数低的对象与未被分配到当前帧的ID进行二次匹配。
- JDT(Joint Detection and Tracking)算法
- CenterTrack:CenterTrack是基于对象中心点的联合检测与跟踪方法,简化了跟踪框架的复杂性,采用CenterNet定位对象中心,并以先前小段轨迹的帧的热图作为先验。
-
该框架将目标检测和关联联合表述为从包含噪声的边框对到真值边界框的一致的去噪扩散处理过程.
-
在训练阶段,成对目标边界框从成对真值框扩散到随机分布,模型通过反转这种噪声处理过程同时学习检测和跟踪.在推理过程中,模型通过一个灵活的一步或者多步的去噪扩散处理将一组成对的随机生成的边界框细化成检测和跟踪结果
这里的扩散头接收以及冻结主干参数的网络提取的两帧图像信息
,然后迭代地
对配对噪声框
进行去噪,以获得最终的配对目标框。
引言与相关工作总结
相关工作部分主要还是对之前的两阶段的具体的细节进行了一定的总结和说明。进而引出了下面的使用扩散模型来进行跟踪的方法,
引入了扩散跟踪模型,并构建了一种新的一致噪声跟踪范式.DiffusionTrack 直接从相邻两帧的一组随机边界框建立目标关联. 其目的是精心细化这些成对的边界框,以便他们能够在两个连续帧中精确的覆盖同一个目标对象,从而在统一的模型管道中隐氏完成检测和跟踪.这种创新的从粗到细的范式被认为迫使模型学习精确区分目标,最终提高性能.DiffusionTrack将数据关联看作是在两个相邻帧中成对边界框空间内的生成尝试,从而解决多目标跟踪问题。
我们提出了DiffusionTrack,首次将扩散模型应用于多目标跟踪领域,将器看做是一个生成式噪声跟踪的扩散处理过程.
这里简单的解释一下隐式跟踪?
它涉及到在不直接观察到完整信息的情况下,对目标的存在和状态进行推断
隐式跟踪是指在目标跟踪过程中,不直接依赖于显式的跟踪特征或者模型,而是通过分析目标在连续帧中的行为和状态变化来实现跟踪。这种方法通常依赖于深度学习模型,能够从数据中学习到目标的隐式表示,并用于跟踪任务。
最后对使用到的技术来进行一个简单的总结
- GNMOT构建了双图神经网络建模表观和运动特征,
- GMTracker强调了帧间匹配和帧内上下文信息
- TrackFormer和MOTR技术使用级联的目标和跟踪查询实现同时的目标检测和数据关联.
方法 Method
DiffusionTrack.与现有的基于运动的方法和基于查询的方法相比,我们设计了一种一致的跟踪器,通过预测和关联在视频序列中两个相邻的帧中同一个目标来隐式的进行跟踪
论文中对一些准备工作的公式进行了描述和说明。主要包括了两个部分的1. 多目标跟踪 2. 扩散模型的部分。
MOT部分
- 多目标跟踪的目标是获取一组按时间排序的输入目标对:
( X t , B t , C t ) \left(\mathbf{X}_{t}, \mathbf{B}_{t}, \mathbf{C}_{t}\right) (Xt,Bt,Ct)
Xt:是t时刻的输入图像
Bt:t时刻边界框标签的集合
Ct:t时刻类别的集合
- 对Bt和Ct进行进一步的细化和描述:其中Bt中的第i个边界框可以这样来进行描述。
B t i = ( c x i , c y i , w i , h i ) \mathbf{B}_{t}^{i}=\left(c_{x}^{i}, c_{y}^{i}, w_{i}, h_{i}\right) Bti=(cxi,cyi,wi,hi)
( c x i , c y i ) ( w i , h i ) \left(c_{x}^{i}, c_{y}^{i}\right) \left(w_{i}, h_{i}\right) (cxi,cyi)(wi,hi)
分别表示第i个边界框的中心点坐标,和对于的第i个边界框的宽度和高度。
- 当第i个目标在Xt中丢失后则有如下的表示形式:
B t i = ∅ \mathrm{B}_{t}^{i}=\emptyset Bti=∅
扩散模型的部分
- 从形式上来说,给定一个数据分布:
x 0 ∼ q ( x 0 ) x_{0} \sim q\left(x_{0}\right) x0∼q(x0)
在t时刻的前项噪声扰动过程可以定义为:
q ( x t ∣ x t − 1 ) q\left(x_{t} \mid x_{t-1}\right) q(xt∣xt−1)
我们根据已知或者已经定义好的方差序列。就可以完成加噪过程的表示
β 1 , ⋯ , β T \beta_{1}, \cdots, \beta_{T} β1,⋯,βT
- 逐步向数据中添加高斯噪声:
q
(
x
t
∣
x
t
−
1
)
=
N
(
x
t
;
1
−
β
t
x
t
−
1
,
β
t
I
)
.
q\left(\mathbf{x}_{t} \mid \mathbf{x}_{t-1}\right)=\mathcal{N}\left(\mathbf{x}_{t} ; \sqrt{1-\beta_{t}} \mathbf{x}_{t-1}, \beta_{t} \mathbf{I}\right) .
q(xt∣xt−1)=N(xt;1−βtxt−1,βtI).
给定x0,通过采样高斯向量ϵ ∼ N ( 0 , I )按照下式即可得到xt的样本(采样或者是加噪
):
x t = α t ‾ x 0 + ( 1 − α t ‾ ) x_{t}=\sqrt{\overline{\alpha_{t}}} x_{0}+\left(1-\overline{\alpha_{t}}\right) xt=αtx0+(1−αt)
其中 α ˉ t = ∏ s = 0 t ( 1 − β s ) \text { 其中 } \bar{\alpha}_{t}=\prod_{s=0}^{t}\left(1-\beta_{s}\right) 其中 αˉt=s=0∏t(1−βs)
训练时,网络会根据不同时刻的t预测x0。推断时,从随机噪声xT开始并迭代进行逆向过程以获得x0
模型结构部分
整体框架如图所示: 首先我们先对图中描述的信息进行一定的说明。
-
给定帧 t 和帧 t-1 中的图像和相关的GT框。通过backbone从相邻的两帧中提取信息。
-
然后扩散头将成对的噪声框作为输入。预测两个相邻帧中同一对象的类别分类、框坐标和
关联分数
。注意这一个关联分数。 -
在训练期间,通过将高斯噪声添加到同一对象的配对GT框来构造噪声框。
-
而在执行推理的阶段的时候。噪声框是通过将高斯噪声添加到前一帧中的先验对象框来构造的。
论文中也提到了模型网络主要是由两部分组成的。
- a feature extraction backbone 只运行一次获取相邻输入图像(Xt-1,Xt)的深度特征表示。
- data association denoising head (diffusion head)以这种深层特征为条件,而不是两个相邻的原始图像,逐步细化来自成对噪声框的成对关联框预测。
这里的数据样本主要是:数据样本是一组成对的边界框:
一组配对的边界框 :
z 0 = ( B t − 1 , B t ) , z 0 ∈ R N ~ × 8 . \mathbf{z}_{0}=\left(\mathbf{B}_{t-1}, \mathbf{B}_{t}\right),\mathbf{z}_{0} \in \mathbf{R}^{\tilde{N} \times 8} . z0=(Bt−1,Bt),z0∈RN~×8.
—个神经网络 :
f θ ( z s , s , X t − 1 , X t ) f_{\theta}\left(\mathbf{z}_{s}, s, \mathbf{X}_{t-1}, \mathbf{X}_{t}\right) fθ(zs,s,Xt−1,Xt)
用于训练根据相应相邻的两帧图像(Xt-1,Xt)来从噪声边界框对zs预测 zo相应的类别标签(Ct-1,Ct)和关联置信度分数S也相应的产生.如果Xt-1=Xt,多目标跟踪任务退化成目标检测问题。
后面我们在结构论文对其中的一些描述信息来进行概述:
Backbone
我们使用YOLOX的骨干网络作为我们的骨干网络.骨干网络使用FPN提取两个相邻帧的高层特征,然后将它们送入接下来的扩散头中用于条件数据关联去噪。
Diffusion head
扩散头将一组建议框作为输入,从骨干生成的特征图中裁剪RoI特征,并将这些RoI特征发送到不同的块,分别获得框回归、分类结果和关联置信度得分。为了解决目标跟踪的问题,我们为每一个扩散的头部模块添加了一个空间-时间融合模块(STF),和一个关联得分头
Spatial-temporal fusion module
-
Spatial-temporal fusion module时空融合模块.我们设计了一种新的时空融合模块,使同一对目标框可以相互交换时间信息,以确保可以完成两个连续帧上的数据关联.
-
给定ROI特征:和当前块的自注意力输出查询
f r o i t − 1 , f r o i t ∈ R N × R × d , \mathbf{f}_{r o i}^{t-1}, \mathbf{f}_{r o i}^{t} \in \mathbb{R}^{N \times R \times d}, froit−1,froit∈RN×R×d,
q pro t − 1 , q pro t ∈ R N × d \mathbf{q}_{\text {pro }}^{t-1}, \mathbf{q}_{\text {pro }}^{t} \in \mathbb{R}^{N \times d} qpro t−1,qpro t∈RN×d
- 使用线性投影和批矩阵乘法获得物体查询:
q t − 1 , q t ∈ R N × d \mathbf{q}^{t-1}, \mathbf{q}^{t} \in \mathbb{R}^{N \times d} qt−1,qt∈RN×d
Association score head
除了定位头和分类头外,我们额外添加了一个关联分数头通过将两对框的融合特征送入线性层来获取数据关联的置信度分数.头部用于确定在后续的非最大抑制(NMS)后处理过程中,成对的目标框输出是否属于同一对象.
模型的训练与推理
训练与损失函数
在训练阶段,我们的方法以5的间隔从训练集中的序列中随机采样一对帧作为输入
-
将一些额外的框添加到出现在两个帧中的原始GT框中,使得所有框相加为固定数Ntrain.
-
然后,我们将高斯噪声添加到GT框中,并在时间步 t 中使用 αt 的单调递减余弦时间表。
-
最后,我们进行去噪处理,从这些构建的噪声框中获得关联结果.
损失函数的部分:
扩展了GIoU的定义,使其与成对边界框的设计兼容.3D GIoU 和3D IoU是原始区域体积扩展的版本.对于每一对出现在有匈牙利匹配算法得到匹配组M中的匹配对(Td,Tgt)
我们分别定义了它的分类分数,预测的边界框结果和关联分数为:
( C d t − 1 , C d t ) , ( B d t − 1 , B d t ) 和 S d \left(C_{d}^{t-1}, C_{d}^{t}\right),\left(B_{d}^{t-1}, B_{d}^{t}\right) \text { 和 } S_{d} (Cdt−1,Cdt),(Bdt−1,Bdt) 和 Sd
之后给出了它最后的损失函数的表达形式。
L c l s ( T d , T g t ) = ∑ i = t − 1 t L c l s ( C d i × S d , C g t i ) L r e g ( T d , T g t ) = ∑ i = t − 1 t L r e g ( B d i , B g t i ) L d e t = 1 N p o s ∑ ( T d , T g t ) ∈ M λ 1 L c l s ( T d , T g t ) + λ 2 L r e g ( T d , T g t ) + λ 3 ( 1 − G I o U 3 d ( T d , T g t ) ) \begin{array}{l} \mathcal{L}_{c l s}\left(\mathbf{T}_{d}, \mathbf{T}_{g t}\right)=\sum_{i=t-1}^{t} \mathcal{L}_{c l s}\left(\sqrt{\mathbf{C}_{d}^{i} \times \mathbf{S}_{d}}, \mathbf{C}_{g t}^{i}\right) \\ \mathcal{L}_{r e g}\left(\mathbf{T}_{d}, \mathbf{T}_{g t}\right)=\sum_{i=t-1}^{t} \mathcal{L}_{r e g}\left(\mathbf{B}_{d}^{i}, \mathbf{B}_{g t}^{i}\right) \\ \mathcal{L}_{d e t}=\frac{1}{N_{p o s}} \sum_{\left(\mathbf{T}_{d}, \mathbf{T}_{g t}\right) \in \mathbf{M}} \lambda_{1} \mathcal{L}_{c l s}\left(\mathbf{T}_{d}, \mathbf{T}_{g t}\right)+ \\ \lambda_{2} \mathcal{L}_{r e g}\left(\mathbf{T}_{d}, \mathbf{T}_{g t}\right)+\lambda_{3}\left(1-G I o U_{3 d}\left(\mathbf{T}_{d}, \mathbf{T}_{g t}\right)\right) \end{array} Lcls(Td,Tgt)=∑i=t−1tLcls(Cdi×Sd,Cgti)Lreg(Td,Tgt)=∑i=t−1tLreg(Bdi,Bgti)Ldet=Npos1∑(Td,Tgt)∈Mλ1Lcls(Td,Tgt)+λ2Lreg(Td,Tgt)+λ3(1−GIoU3d(Td,Tgt))
我自己在看这个损失函数的时候,其实感觉这个损失函数虽然比较长但是其中的两个部分还是比较好理解的
- 对真实框GT和预测的框d之间的回归做一个L1损失函数,用来记作回归损失
- 分类的损失也是不断的改进没有用交叉熵或者BCE而是使用分类损失来完成的。
- 第三部分感觉也是比较新的一部分,没有说用的是匈牙利匹配损失函数,而是用3d的GIOU损失。
I o U 3 D ( T d , T g t ) = ∑ i = t − 1 t Area ( B d i ∩ B g t i ) ∑ i = t − 1 t Area ( B d i ∪ B g t i ) G I o U 3 D ( T d , T g t ) = I o U 3 D ( T d , T g t ) − ∣ ∑ i = t − 1 t Area ( D B d i , B g t i ) − Area ( B d i ∪ B g t i ) ∣ ∣ ∑ i = t − 1 t Area ( D B d i , B g t i ) ∣ \begin{array}{l} I o U_{3 D}\left(\mathbf{T}_{d}, \mathbf{T}_{g t}\right)=\frac{\sum_{i=t-1}^{t} \operatorname{Area}\left(\mathbf{B}_{d}^{i} \cap \mathbf{B}_{g t}^{i}\right)}{\sum_{i=t-1}^{t} \operatorname{Area}\left(\mathbf{B}_{d}^{i} \cup \mathbf{B}_{g t}^{i}\right)} \\ G I o U_{3 D}\left(\mathbf{T}_{d}, \mathbf{T}_{g t}\right)=I o U_{3 D}\left(\mathbf{T}_{d}, \mathbf{T}_{g t}\right)- \\ \frac{\left|\sum_{i=t-1}^{t} \operatorname{Area}\left(\mathbf{D}_{\mathbf{B}_{d}^{i}, \mathbf{B}_{g t}^{i}}\right)-\operatorname{Area}\left(\mathbf{B}_{d}^{i} \cup \mathbf{B}_{g t}^{i}\right)\right|}{\left|\sum_{i=t-1}^{t} \operatorname{Area}\left(\mathbf{D}_{\mathbf{B}_{d}^{i}, \mathbf{B}_{g t}^{i}}\right)\right|} \end{array} IoU3D(Td,Tgt)=∑i=t−1tArea(Bdi∪Bgti)∑i=t−1tArea(Bdi∩Bgti)GIoU3D(Td,Tgt)=IoU3D(Td,Tgt)− ∑i=t−1tArea(DBdi,Bgti) ∑i=t−1tArea(DBdi,Bgti)−Area(Bdi∪Bgti)
推理过程与算法描述
如下图所示为推断过程。与检测不同,由于已知过去帧的估计结果,可由过去帧的边界框生成Ntest个初始的带噪声边界框。基准方案中,重复已有边界框而非添加随机边界框,并只对当前帧添加噪声。得到关联结果以后,使用IoU衡量相似性并连接物体轨迹。为处理潜在的遮挡,使用卡尔曼滤波器重新关联丢失的物体。
-
用给定的噪声框填充重复的先前框,直到达到预定义的数量 Ntest
-
根据 B = (1−αt) · B+αt · Bnoise 将高斯噪声添加到输入框。
-
通过 DDIM 采样步数 s 的去噪过程获得跟踪结果。
一旦得出关联结果,IoU 就被用作连接对象轨迹的相似性度量。 为了解决潜在的遮挡问题,采用了一个简单的卡尔曼滤波器来重新关联丢失的对象.
论文中的附录中给出了一定的伪代码描述。真正的学习和理解这个过程还是要结合源码信息来进行进一步的学习。
输入:视频序列V; 扩散径迹DT; 关联得分阈值τconf; 检测得分阈值τdet; 关联 Na 的框数;
输出:视频的Tactivated轨道
最后自己给出源码地址https://github.com/RainBowLuoCS/DiffusionTrack
也会结合源码进一步的补充学习。
原文地址:https://blog.csdn.net/weixin_46167190/article/details/143406120
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!