A Simple Baseline for Multi-Object Tracking

本文提出一种简单基线方法,解决了one-shot多目标跟踪任务中的关键问题,包括基于锚点的方法不适用、多层特征聚合及Re-ID特征维度选择等。通过实验验证了方法的有效性。

A Simple Baseline for Multi-Object Tracking

论文信息

Paper:[CVPR2020] A Simple Baseline for Multi-Object Tracking

Link : https://arxiv.org/abs/2004.01888

Code : https://github.com/ifzhang/FairMOT/

背景

多目标跟踪(MOT)是计算机视觉领域的一个重要问题。其目的是估计视频中多个感兴趣目标的轨迹。目前多目标追踪任务的解决方法通常分为两类:

two-step MOT: 首先用检测模型确定图像中感兴趣的对象的边界框,然后用关联模型为每个边界框提取重识别(Re-ID)特征,并根据在特征上定义的某些度量将其与一个现有跟踪结果联系起来。但是,这两个网络不共享特征,因此无法以视频帧速率执行推断。

one-shot MOT: 同时进行目标检测和Re-ID特征提取,通过共享大部分计算来减少推理时间。但是准确性显着下降,而且存在目标ID关联不正确的问题。

关键性因素分析

1、基于anchor的方法不适用于Re-ID任务

首先,对应于不同图像块的多个anchor可能负责估计同一目标的id,这会导致严重的歧义。此外,通常会将特征图进行下采样缩小为原来的1/81/81/8 以平衡精度和速度,这对于Re-ID太过粗糙,因为目标中心可能与在粗糙锚点位置提取的特征不一致。

文章通过将MOT问题视为高分辨率特征图上的像素级关键点(目标中心)估计和id分类问题来解决该问题。

2、多层特征聚合

对于MOT特别重要,因为Re-ID特征需要利用低级和高级特征来适应大型和小型的目标。研究者在实验中观察到,由于提高了处理尺度变化的能力,可以有效减少one-shot方法的id转换数量。

3、Re-ID特征维度

以前的Re-ID方法通常学习高维特征,并在其基准测试中取得了可喜的结果。但是,文章发现低维特征实际上更适合MOT,因为MOT任务的训练图像比Re-ID少,学习低维特征有助于减少过拟合小数据的风险,并提高跟踪的鲁棒性。

方法

文章采用anchor-free对象检测方法来估计高分辨率特征图上的目标中心。消除锚点减轻了歧义性问题,并且高分辨率特征图的使用使Re-ID特征能够更好地与对象中心对齐。然后,文章添加了一个并行分支,用于估计用于预测对象身份的逐像素Re-ID特征。文章方法通过学习低维Re-ID特征,减少了计算时间同时提高了特征匹配的鲁棒性。文章还为骨干网络配备了“深层聚合”运算符,以融合来自多个层的特征,处理不同规模的对象。

Backbone网络

文章采用ResNet-34作为backbone,同时为了适应不同大小的目标,将DLA的一种变体DLA-34应用于骨干网络。这里输入图像大小为Himage×WimageH_{image}\times W_{image}Himage×Wimage,输出的特征图大小为C×Himage/4×Wimage/4C\times H_{image}/4\times W_{image}/4C×Himage/4×Wimage/4

目标检测分支

本方法中将目标检测视为高分辨率特征图上基于中心的包围盒回归任务。将三个并行回归头(regression heads)附加到主干网络以分别估计heatmap,目标中心偏移和边界框大小。通过对主干网络的输出特征图应用3×3卷积(具有256个通道)来实现每个回归头(head),然后通过1×1卷积层生成最终结果。

Heatmap Head

该部分负责估计目标中心的位置。如果heatmap中位置与GT目标中心不一致,则该处响应为1,随着heatmap中位置和目标中心之间的距离变大,响应呈指数衰减。

Center Offset Head

该部分负责更精确地定位目标。这对于追踪至关重要,因为需要根据准确的目标中心提取Re-ID特征。

Box Size Head

该部分负责估计每个anchor位置的目标边界框的高度和宽度,与Re-ID特征没有直接关系,但是定位精度将影响对象检测性能的评估。

ID嵌入分支

ID嵌入分支的目标是生成可以区分不同对象的特征。理想情况下,不同对象之间的距离应大于同一对象之间的距离。文章在主干特征之上应用了具有128个内核的卷积层,以提取每个位置的身份嵌入特征。

损失函数

heatmap 损失函数

对于图像中每个GT框bi=(x1i,y1i,x2i,y2i)\textbf{b}_i=(x_1^i, y_1^i, x_2^i, y_2^i)bi=(x1i,y1i,x2i,y2i), 首先计算目标中心(cxi,cyi)=(x1i+x2i2,y1+y2i2)(c_x^i, c_y^i)=(\frac{x_1^i+x_2^i}{2}, \frac{y_1^+y_2^i}{2})(cxi,cyi)=(2x1i+x2i,2y1+y2i),则其对应的特征图上的位置为(c~xi,c~yi)=(⌊cxi4⌋,⌊cyi4⌋)(\tilde{c}_x^i, \tilde{c}_y^i)=(\lfloor\frac{c_x^i}{4}\rfloor,\lfloor\frac{c_y^i}{4}\rfloor)(c~xi,c~yi)=(4cxi,4cyi)。heatmap上(x,y)(x,y)(x,y)处的响应为Mxy=∑i=1Nexp−(x−c~xi)2+(y−c~yi)22σc2M_{xy}=\sum_{i=1}^Nexp^{-\frac{(x-\tilde{c}_x^i)^2+(y-\tilde{c}_yi)^2}{2\sigma_c^2}}Mxy=i=1Nexp2σc2(xc~xi)2+(yc~yi)2,其中NNN表示目标数量,σc\sigma_cσc表示标准偏差。则heatmap损失函数定义为

Lheatmap=−1N∑xy{(1−M^xy)αlog(M^xy),if Mxy=1(1−Mxy)β(M^xy)αlog(1−M^xy),otherwise L_{heatmap}=-\frac{1}{N}\sum_{xy}\left\{ \begin{array}{lr} (1-\hat{M}_{xy})^{\alpha}log(\hat{M}_{xy}), & \text{if } M_{xy}=1\\ (1-M_{xy})^{\beta}(\hat{M}_{xy})^{\alpha}log(1-\hat{M}_{xy}), & \text{otherwise} \\ \end{array} \right. Lheatmap=N1xy{(1M^xy)αlog(M^xy),(1Mxy)β(M^xy)αlog(1M^xy),if Mxy=1otherwise

偏移和大小损失函数

将大小和偏移分别记为S^∈RW×H×2\hat{S}\in R^{W\times H\times 2}S^RW×H×2O^∈RW×H×2\hat{O}\in R^{W\times H\times 2}O^RW×H×2。对于GT框bi\textbf{b}^ibi,大小为si=(x2i−x1i,y2i−y1i)s^i=(x_2^i-x_1^i, y_2^i-y_1^i)si=(x2ix1i,y2iy1i)。同理,oi=(cxi4,cyi4)−(⌊cxi4⌋,⌊cyi4⌋)o^i=(\frac{c_x^i}{4}, \frac{c_y^i}{4})-(\lfloor\frac{c_x^i}{4}\rfloor,\lfloor\frac{c_y^i}{4}\rfloor)oi=(4cxi,4cyi)(4cxi,4cyi)。将对应位置的大小和偏移记为s^i,o^i\hat{s}^i, \hat{o}^is^i,o^i,则这两个heads的loss为

Lbox=∑i=1N∥oi−o^i∥1+∥si−s^i∥1 L_{box}=\sum_{i=1}^N\Vert o^i-\hat{o}^i\Vert_1+\Vert s^i-\hat{s}^i\Vert_1 Lbox=i=1Noio^i1+sis^i1

ID嵌入损失函数

对于每个GT框bi\textbf{b}^ibi,在其heatmap目标中心位置上提取出ID特征Exi,yiE_{x^i, y^i}Exi,yi并学习将其映射到一个类分布向量p(k)p(k)p(k)上。将GT类标签的one-hot表示记为Li(k)L^i(k)Li(k),类别数目记为KKK,则softmax loss为

Lidentify=−∑i=1N∑k=1KLi(k)log(p(k)) L_{identify}=-\sum_{i=1}^N\sum_{k=1}^KL^i(k)log(p(k)) Lidentify=i=1Nk=1KLi(k)log(p(k))

在线追踪

网络推理:在预测的heatmap之上,根据heatmap得分执行非最大抑制(NMS),保留得分大于阈值的关键点的位置。然后根据据估计的偏移量和框大小来计算相应的边界框,并在估计的目标中心提取ID嵌入。

在线框连接:使用标准的在线跟踪算法,根据第一帧中的估计框来初始化多个小轨迹。在随后的帧中,根据通过Re-ID特征和IoU测量的距离将这些框链接到现有的轨迹。文章还使用卡尔曼滤波器预测轨迹在当前帧中的位置。如果距离连接的检测目标距离太远,则将相应的成本设置为无穷大。

实验

消融实验

Anchor-based vs. Anchor-free

与anchor-based的方法相比,文章anchor-free方法受对齐误差问题的影响较小,并且MOTA得分明显更高。尤其是当stride为4时,ID转换数量从137显著减少到93。更重要的是,当将stride从8减小到4时,文章方法会受益匪浅。将stride进一步减小到2会降低结果的质量,因为引入了较低层级的特征会使表示形式对外观变化的鲁棒性降低。

多层特征聚合

本部分评估骨干网中多层功能聚合的影响。文章评估了许多主干网,如vanilla ResNet ,FPN,HRNet和DLA-34。为了公平比较,将方法的其余因素控制为相同。对于本实验中的所有方法,最终特征图的stride为4。实验表示,在改善ID嵌入方面,多层融合相对于使用更深的网络具有明显的优势,而由于多层特征聚合,DLA-34中Re-ID特征的判别能力得到了提高。

文章还评估了主流的多层聚合方法,例如HRNet,HRNetV2和FPN。所有方法均比ResNet-34获得更好的MOTA分数。改进不仅来自增强的检测结果,还归因于Re-ID功能的改进的区分能力。但是DLA-34比HRNetV2具有更多的判别性Re-ID特征。

Re-ID特征维度

这里评估了多个维度选择。当维度从512减少到128时,TPR持续提高,这表明使用低维度特征的优势。将尺寸进一步减小到64会开始降低TPR,因为Re-ID功能的代表功能受到影响。尽管MOTA分数的变化非常微小,但ID转换的数量实际上从210个大大减少到136个。这实际上在改善用户体验方面起着至关重要的作用。同时,通过减少Re-ID特征的维数,推理速度也略有提高。

State-of-the-art比较

One-shot MOT

这篇文章仅与JDE进行比较,实验结果表明,文章的方法在两个数据集上都比JDE方法表现优秀很多。ID转换的数量从218个减少到80个,这在改善用户体验方面有很大的提高。两种方法的推理速度都接近视频速率,但本文方法更快。

Two-Step MOT

这里将本文方法与最新的在线跟踪器进行了比较,表中展示了在2DMOT15,MOT16,MOT17和MOT20数据集的测试集的结果。文章提出的方法在四个数据集上都取得了第一的成绩。

结论

文章为one-shot多对象跟踪提供了一个简单的基准。文章首先研究以前的one-shot方法无法获得与两步法类似结果的原因。并相应地提出了一种简单的anchor-free方法,该方法在30 fps的几个基准数据集上表现均优于先前的最新技术。

### 基于LLM的Web代理的基线模型 构建基于大型语言模型(LLM)的Web代理时,通常需要考虑几个核心要素:任务理解、工具调用以及上下文管理。一种强大的简单基线模型可以由以下几个部分组成: #### 1. **任务分解模块** 此模块负责将用户的自然语言请求解析为可执行的任务序列。通过利用预训练的语言理解和生成能力,LLMs能够高效地完成这一过程[^1]。 ```python def parse_user_request(user_input): """ 将用户输入转换成结构化任务列表。 参数: user_input (str): 用户提供的原始查询字符串 返回: list: 结构化的任务指令集合 """ structured_tasks = llm_generate(f"Parse the following request into tasks:\n{user_input}") return structured_tasks.split("\n") # 简单分割作为示例 ``` #### 2. **工具接口适配器** 为了增强LLM的功能范围,可以通过设计轻量级工具接口来扩展其能力。这些工具可能涉及搜索引擎集成、数据库访问或其他特定领域服务。尽管某些基础计算可以直接依赖LLM内部逻辑实现[^3],但对于复杂操作仍需外部支持。 例如,在处理数值运算时虽然无需显式调用API即可获得合理结果,但在更广泛的应用场景下引入专用插件将是必要的改进方向之一。 #### 3. **对话历史跟踪机制** 维持连贯性的交互体验对于提升用户体验至关重要。为此,应建立有效的记忆存储方案以记录过往交流详情并据此调整后续响应策略。 ```python class ConversationHistory: def __init__(self): self.history = [] def add_entry(self, role, content): entry = {"role": role, "content": content} self.history.append(entry) def get_context(self): context_str = "\n".join([f"{entry['role']}: {entry['content']}" for entry in self.history]) return f"Context:\n{context_str}" ``` 综上所述,上述三个组成部分共同构成了一个适用于多种实际需求的基础架构框架——即具备良好泛化性能的同时又能灵活适应不同业务环境下的定制化开发要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值