DiffusionTrack: Point Set Diffusion Model for Visual Object Tracking—用于视觉对象跟踪的点集扩散模型
点集扩散模型,将点跟踪应用到之前学过的上一篇论文扩散模型的多目标跟踪中去。是学习点跟踪相关方向的一篇论文。
作者来自:上海交通大学和华为的实验室
对实验部分进行省略。
因为自己也是边读文章边记录一下,这里就不在更改论文的顺序,更多的只是对论文内容的初步了解。对其中的一些关键点来进行总结。便于进一步的总结和学习。
摘要核心概括
- 论文中首先提出了现有的 Siamese 或 Transformer 跟踪器通常将视觉对象跟踪视为一次性检测问题。(也就是说双阶段的检测问题依赖于检测器的检测结果)
这种想法随之就产生了一个问题:缺乏自我校正,这些跟踪器可能很容易漂移到具有相似外观的干扰物。间接的导致跟踪性能的下降
-
于是本文提出将视觉跟踪作为基于点集的去噪扩散过程,并提出了一种新颖的基于生成学习的跟踪器,称DiffusionTrack。
-
后面作者分了两个方面对这个跟踪器的贡献和特色来进行介绍。
- 第一点:是相对比较熟悉的一个点。也就是使用了扩散模型利用多个去噪扩散步骤以每帧动态搜索方式定位目标。使用了去噪的范式
- 第二点:它使用点集表示来模拟扩散过程 可以更好地处理外观变化,实现更精确的定位。作者也说明了这样可以可以简化后处理的步骤。
Introduction介绍
阅读一下其中的介绍的部分,并对其中的一些要点和总结的好的地方进行一下记录。文章开头先说明了论文的方向是VOT问题-视觉对象追踪。
之前的将跟踪问题视为检测问题的跟踪算法,跟踪器首先执行模板匹配,然后在单次前向传播中预测目标的位置和大小变化会存在两个不可避免的问题:
- 检测器强调
类别级别
的差异
来检测,而跟踪器则专注于实例级别的差异
,以将目标与具有相似外观的
干扰物区分开来。 - 从而也导致了跟踪器很难在单次前向传播中定位外观变化较大和复杂场景的目标。
为了解决这些问题,我们将跟踪问题重新表述为噪声到目标(N2T)过程,如图所示:依然还是使用的扩散模型的思想来进行跟踪的
- 使用以渐进扩散的方式定位目标。
- 定制了点集表示来为跟踪任务的目标对象建模
- 不是采用现有的表示形式,例如用于分割的噪声图 和用于对象检测的随机框。
这种渐进式搜索方式直观上优于仅通过一次前向传播来预测目标大小和位置变化。
它的去噪扩散的过程有点集来进行表示。
通过点来进行物体的跟踪这也是学习这一篇论文的主要的原因。
、
DiffusionTrack has an encoder-decoder architecture。其中编码器提取目标感知特征,解码器在去噪扩散过程中预测目标。
在这篇论文的介绍里。说到整个算法的一个最为核心的设计思想与整体的一个流程信息。是从整体上理解这一篇论文的一个关键了。
-
DiffusionTrack 通过将对象跟踪作为搜索区域中点集空间的生成任务,使用扩散模型来处理 VOT 任务。
-
训练阶段,将高斯噪声添加到GT框中以获得噪声点集估计。训练解码器来预测没有噪声的GT框。
-
在推理阶段,DiffusionTrack 通过反转学习到的扩散过程来估计目标,它细化随机点集以聚焦于目标。
- 它使用任意数量的点来表示目标,并使用任意步骤来过滤掉每帧中的背景杂波
首次尝试将点集表示引入去噪扩散模型。
相关工作整理
- Diffusion model:最初用于图像生成任务的扩散模型。后来用于到目标检测和多目标跟踪的任务中去了。
- 提到了点集表示的任务,RPT跟踪器是用一组代表点对目标状态进行建模的开创性工作,它借用了Reppoints检测器[112]中由两级卷积层组成的预测头。
点集被安排对整个图像区域进行采样,以明确区分实例级差异
这个地方从导师那里也了解到了,在图像区域内对点集的采样,是做点跟踪的一个很关键的任务
自己初步看这个图总结一下步骤大体上就是:
-
将一张图片进行patch操作后和vit类似进行encode操作堆叠N次后提取出图像的特征和相似性信息。
-
将最后的patch框通过reshape成点集集合,然后在上面进行点的采样步骤。(目标状态由点集描述。)
-
通过定义的扩散头结构进行去噪扩散的过程,根据最后点集剩余的结果框选出目标框来。
之后自己猜测后面的步骤可能和之前学习的DiffusionTrack用在多目标跟踪上是相同的。
核心方法
- 预备知识
- 噪声到目标跟踪范式
- 网络结构
- 训练和推理过程
预备公式
视觉跟踪部分
- 视觉跟踪的目标是从连续输入图像 x 中定位目标 b。其中 b 表示轴对齐边界框
- bz是模板图像z中目标的状态。 x代表的是连续图像。
b = f ( z , x , b z ) b=f\left(z, x, b_{z}\right) b=f(z,x,bz)
- 其中学习模型 f 可以在单个前向评估中预测目标的位置和大小变化,给定图像对(模板 z 和搜索图像 x)作为训练和推理阶段的输入
扩散模型部分
扩散模型的加噪过程:adding noise Ns。
q ( i t ∣ i 0 ) = N ( i t ∣ α ˉ t i 0 , ( 1 − α ˉ t ) N s ) . q\left(\boldsymbol{i}_{t} \mid \boldsymbol{i}_{0}\right)=\mathcal{N}\left(\boldsymbol{i}_{t} \mid \sqrt{\bar{\alpha}_{t}} \boldsymbol{i}_{0},\left(1-\bar{\alpha}_{t}\right) \boldsymbol{N}_{\boldsymbol{s}}\right) . q(it∣i0)=N(it∣αˉti0,(1−αˉt)Ns).
α ˉ t : = ∏ s = 0 t α s = ∏ s = 0 t ( 1 − β s ) \bar{\alpha}_{t}:=\prod_{s=0}^{t} \alpha_{s}=\prod_{s=0}^{t}\left(1-\beta_{s}\right) αˉt:=s=0∏tαs=s=0∏t(1−βs)
L train = 1 2 ∥ f θ ( i t , t ) − i 0 ∥ 2 . \mathcal{L}_{\text {train }}=\frac{1}{2}\left\|f_{\theta}\left(\boldsymbol{i}_{t}, t\right)-\boldsymbol{i}_{0}\right\|^{2} . Ltrain =21∥fθ(it,t)−i0∥2.
噪声跟踪方案
Noise-to-target tracking paradigm.噪声到目标的跟踪范例。
- 在跟踪过程中,我们采用一组点集GN来去估计目标状态 b
G N = { p 1 , p 2 , … , p N } p = sets { ( x k , y k ) } k = 1 m . G_{N}=\left\{\mathbf{p}_{1}, \mathbf{p}_{2}, \ldots, \mathbf{p}_{N}\right\} \text {p = sets }\left\{\left(x_{k}, y_{k}\right)\right\}_{k=1}^{m} \text {. } GN={ p1,p2,…,pN}p = sets { (xk,yk)}k=1m.
-
每个点集 p 从搜索区域中提取目标候选框。
-
Noise-to-Target范式的目标是学习一个跟踪模型f,它可以通过总共T个扩散步骤(间隔为ΔT)逐渐细化目标估计:
G N T → f G N T − Δ T → f … → f G N 0 , G_{N}^{T} \xrightarrow{f} G_{N}^{T-\Delta T} \xrightarrow{f} \ldots \xrightarrow{f} G_{N}^{0}, GNTfGNT−ΔTf…fGN0,
- 其中扩散步骤 T → 0 描述了目标估计从绝对随机状态到最高确定性的变化。 因此,基于扩散模型f的跟踪过程可以表述为:
Δ G N t , C N t = f ( z , x , t , G N t − Δ t ) , G N t = G N t − Δ t ⊕ Δ G N t , \begin{aligned} \Delta G_{N}^{t}, C_{N}^{t} & =f\left(z, x, t, G_{N}^{t-\Delta t}\right), \\ G_{N}^{t} & =G_{N}^{t-\Delta t} \oplus \Delta G_{N}^{t}, \end{aligned} ΔGNt,CNtGNt=f(z,x,t,GNt−Δt),=GNt−Δt⊕ΔGNt,
- 其中模型 f 通过了解扩散步骤索引 t 和前一步估计来细化当前估计
G N t − Δ t G_{N}^{t-\Delta t} GNt−Δt
- ⊕ 是按元素求和
- Ct N 是相应的置信度得分也就是对于估计的G的得分情况。
- 作为跟踪输出的最终目标状态 b 可以通过以下方式获得:
B N = Γ ( G N t ) b = B i ^ , s.t. i ^ = arg max { C i } i = 1 N , \begin{aligned} B_{N} & =\Gamma\left(G_{N}^{t}\right) \\ b=B_{\hat{i}}, \quad & \text { s.t. } \hat{i}=\arg \max \left\{C_{i}\right\}_{i=1}^{N}, \end{aligned} BNb=Bi^,=Γ(GNt) s.t. i^=argmax{ Ci}i=1N,
- 其中 Γ 是一个可微函数,它将点集转换为框格式(也就是对应最后如何从一个点集得到目标框的集合) 我们采用 Min-Max [112] 作为函数 Γ。 详情请参阅附录。
网络结构
- 编码器。 我们采用普通视觉变换器(ViT)作为编码器,并对搜索图像和模板图像联合进行编码。
- 在将它们投影到特征标记之前我们首先将模板和搜索图像分割成补丁 Patch{zNz,xNx}。
[ f z , f x ] = [ E x 1 , … , E x N x , E z 1 , … , E z N z ] \left[f_{z}, f_{x}\right]=\left[\mathbf{E} x_{1}, \ldots, \mathbf{E} x_{N_{x}}, \mathbf{E} z_{1}, \ldots, \mathbf{E} z_{N_{z}}\right] [fz,fx]=[Ex1,…,ExNx,Ez1,…,EzNz]
补充说明:其中E是线性投影层。 特征 {fz,fx} 以联合风格编码。
- 其中 {fz,fx} 首先在开头连接并在多个Transform块 {BLKi, 1 ≤ i ≤ l} 中联合编码。仅搜索图像 fx 的特征被馈送到解码器中
f z x i = Concat ( f z i , f x i ) , i ∈ { 0 } f z x i = BLK i ( f z x i − 1 ) , i ∈ { 1 , l } \begin{array}{l} f_{z x}^{i}=\operatorname{Concat}\left(f_{z}^{i}, f_{x}^{i}\right), \quad i \in\{0\} \\ f_{z x}^{i}=\operatorname{BLK}^{i}\left(f_{z x}^{i-1}\right), \quad i \in\{1, l\} \end{array} fzxi=Concat(fzi,fxi),i∈{ 0}fzxi=BLKi(fzxi−1),i∈{ 1,l}
- 解码器的结构说明:The decoder of DiffusionTrack is a stack of
diffusion layers. As shown in Fig. 3
每个扩散层由三个部分组成:
- global instance interaction 全局实例交互
- a dynamic convolutional layer 动态卷积层
- a refinement layer 细化层
每个扩散层从之前的扩散步骤 t − Δt 中总共获取 N 个点集 Gt−Δt N 来裁剪实例特征
裁剪实例特征通过ROI层来进行裁剪
F N i n s = { f 0 i n s , f 1 i n s , … , f N ins } F_{N}^{\mathrm{ins}}=\left\{\mathbf{f}_{0}^{\mathrm{ins}}, \mathbf{f}_{1}^{\mathrm{ins}}, \ldots, \mathbf{f}_{N}^{\text {ins }}\right\} FNins={ f0ins,f1ins,…,fNins }
3. 之后,通过简化自注意力(SSA)层对全局关系进行建模:
F N i n s = RoI [ f x , Γ ( G N t − Δ t ) ] , F N i n s : = SSA ( F N i n s ) , \begin{array}{l} F_{N}^{\mathrm{ins}}=\operatorname{RoI}\left[f_{x}, \Gamma\left(G_{N}^{t-\Delta t}\right)\right], \\ F_{N}^{\mathrm{ins}}:=\operatorname{SSA}\left(F_{N}^{\mathrm{ins}}\right), \end{array} FNins=RoI[fx,Γ(GNt−Δt)],FNins:=SSA(FNins),
其中:
F N i n s F_{N}^{\mathrm{ins}} FNins
包括N个实例级嵌入,自注意力层去除了原始多头注意力层中的线性投影层 -SSA层。
- 在细化层中,我们将扩散步骤信息嵌入到实例嵌入中,并通过动态卷积层预测目标状态:
F N i n s : = DyConv [ GAP ( F N i n s ) , F N i n s ] F N i n s : = F N i n s ⊕ ToEmbed ( t ) \begin{array}{l} F_{N}^{\mathrm{ins}}:=\operatorname{DyConv}\left[\operatorname{GAP}\left(F_{N}^{\mathrm{ins}}\right), F_{N}^{\mathrm{ins}]}\right. \\ F_{N}^{\mathrm{ins}}:=F_{N}^{\mathrm{ins}} \oplus \operatorname{ToEmbed}(t) \end{array} FNins:=DyConv[GAP(FNins),FNins]FNins:=FNins⊕ToEmbed(t)
- 其中 GAP 和 ⊕ 表示全局平均池化和逐元素求和
- ToEmbed 是一个嵌入网络,它将步长索引 t 从标量转换为特征向量
- DyConv[A,B] 表示输入 B 和卷积核 A 之间的卷积。最终,我们预测点集的细化和置信度分数:
Δ G N t = ϕ reg ( F N i n s ) , C N t = ϕ c l s ( F N i n s ) \Delta G_{N}^{t}=\phi_{\text {reg }}\left(F_{N}^{\mathrm{ins}}\right), \quad C_{N}^{t}=\phi_{c l s}\left(F_{N}^{\mathrm{ins}}\right) ΔGNt=ϕreg (FNins),CNt=ϕcls(FNins)
{ ϕ r e g , ϕ c l s } \left\{\phi_{r e g}, \phi_{c l s}\right\} { ϕreg,ϕcls}
代表的是两个轻量级的网络。 ΔGtN 表示细化 G 的相对偏移量
之后我们就进入了最后的一个步骤了。
输出可用于下一层或迭代评估。 GtN 转换为框格式用于训练监督。
根据上面的介绍在结合论文中给出的原文信息。就可以将其划分为3个部分从而构成了扩散头的结构
我们的解码器与 DiffusionDet [11] 的区别如下: 1)DiffusionDet [11] 预测用于对象检测的类别标签,而我们的解码器只需要执行二元分类。 2) DiffusionDet [11] 有固定的层来制定解码器,而我们的解码器可以在早期层退出以加速(参见第 3.4 节)。 3)我们的解码器细化点集以逐渐定位目标,而DiffusionDet [11]则预测图像中对象的边界框和类别标签。
训练与推理过程
训练与损失函数
训练的部分:
在训练期间,跟踪模型 f 被训练为根据在扩散步骤 t 的扩散过程 q(b0|bt) 中采样的噪声版本 bt 来预测GT框 b0。 扩散步骤 t 处的每个噪声版本 bt 对动态跟踪场景下的跟踪估计进行建模。
-
我们将噪声点集 Ne 和地面实况 b 结合起来,构建训练阶段的输入 GNt N。
-
另一个超参数是真实值与噪声之间的比例(信噪比)。 我们凭经验发现,高斯噪声和设置较大的 SNR (=1) 最适合基于扩散的跟踪。
损失函数部分:
首先我们需要明确的是:扩散解码器以噪声点集 Gt N 作为输入,预测 N 个置信度分数以及对应点的相对移动。
- 我们将集合预测损失应用于 N 个预测集,并根据 IoU分数选择前 K (=5) 个预测,将多个预测分配给真实值。TOP5
损失函数就可以定义为如下所示的部分:
L = ∑ i = 1 L ( L cls i + λ iou L iou i + λ L 1 L 1 i ) . \mathcal{L}=\sum_{i=1}^{L}\left(L_{\text {cls }}^{i}+\lambda_{\text {iou }} L_{\text {iou }}^{i}+\lambda_{L_{1}} L_{1}^{i}\right) . L=i=1∑L(Lcls i+λiou Liou i+λL1L1i).
- Lcls:是用来计算分类用的focal loss损失函数。
- L1 和广义 IoU 损失 Liou 用于框回归。