MOTR: End-to-End Multiple-Object Tracking with TRansformer阅读笔记
MOTR阅读笔记
- (一) Title
- (二) Summary
- (三) Research Object
- (四) Problem Statement
- (五) Method
- 5.1 构建MOTR的一些相关介绍
- 5.2 MOTR
- 5.2.1 模型框架
- 5.2.2 QIM模块
- 5.2.3 Collective Average Loss
- (六) Experiments
- 6.1 实验设置
- 6.2 同SOTA比较
- 6.3 消融实验
- (七) Conclusion
- (八) Notes
- 8.1 MOT方法
- 8.2 基于Transformer的架构
- (九) TODO
(一) Title
论文地址:https://arxiv.org/abs/2105.03247
代码地址:https://github.com/megvii-model/MOTR
前言:最近有幸看了几篇MOT的工作,感觉目前MOT的工作有一些集中将循环神经网络引入来构建对轨迹的预测,从而实现对遮挡情况的处理,提升性能。然而我自己没有仔细研读过Transformer相关的论文,希望以此为契机,开启循环神经网络在视觉领域的研究,本文最显著的贡献就是将track trajectory当成隐状态,并且在细节上的有很多的考究。
(二) Summary
当前存在的问题:
多目标跟踪任务之前的做法中,往往是基于motion以及appearance相似性使用启发式方式来进行检测地关联,但是这种做法忽略了跟踪任务基于视频的属性,并且过多地信任检测和Re-ID的性能,同时对于遮挡和非线性运动的适应能力较差。不过在MOT性能上表现很好。基于FairMOT端到端学习detection和re-id的思想,如何将data association的过程也引入到端到端的过程中来呢?目前基于卷积+RNN的融合有一些实现方式,也取得了比较好的效果,那么基于Transformer的方式在处理上又能起到什么作用呢?基于Transformer的实现,往往是通过一种隐式的关联来构建
本文的方法:
本文提出了MOTR,一个端到端的MOT框架:
- 学习model the long-range temporal variation of the objects,从而能够实现隐式地association。
- 引入track query,每一个track query models the entire track of an object,track query is transferred and updated frame-by-frame to perform iterative predictions.
- 提出Tracklet-aware label assignment在track queries和object tracks实现一对一的assignment。
- Temporal aggregation network以及collective average loss用来平衡long-range temporal relation。
[注:关于方法这边有一些过于抽象,直接看表述不是很容易理解,Mark下来,等整篇看完回来重新梳理]
实验结果
MOTR取得了competitive performance,可以作为Transformer MOT任务中的一个baseline。
本文贡献
- 提出了一个端到端的MOT框架,基于DETR,能够隐式地学习appearance以及position变化(通过隐状态来说能够学习appearance和position变化,很难get到。)
- 将MOT看成是一个set of sequence prediction的问题,从DETR角度来看,只是将固定的检测框转换成track trajectory和检测框,并且track trajectory以及检测框的定义形式都相同,只不过检测框的id标签为-1,并且引入了QIM来实现对输出检测框(图3中的qtriˉ,qdetiˉ\bar{q_{tr}^i},\bar{q_{det}^i}qtriˉ,qdetiˉ)的编码,并且这里是将track trajectory看成是隐状态。
- TALA用来一对一assignment预测和gt boxes,这里在代码中涉及到很多细节的地方(需要运行代码看下)
引入CAL以及TAN来增强long-range temporal motion
(三) Research Object
本文希望能够构建一种端到端的MOT框架,就需要解决如何定义trajectory?如何处理new-born和death?如何进行轨迹状态的预测等问题,作者这里是将trajectory看成隐状态,使用class score来处理trajectory的生成和退出,并借助transformer的encoder架构来预测下一个时刻的trajectory隐状态。
(四) Problem Statement
本文基于Deformable DETR出发,希望能够使用端到端的方式来解决多目标跟踪任务,使用隐状态(track query)表示track trajectories,需要解决的主要问题包括:
- 怎么根据这个track query跟踪一个目标?这里我觉得说的应该是怎么基于track query来预测下一个时刻的query?
在训练期间使用tracklet-aware label assignment(TALA),也就是说通过具有相同id标签的box sequences来监督,马马虎虎不理解,问题也不是很理解- 怎么处理track query的new-born和dead objects?
采用动态长度,对于当前的N个object queries(其中包括m个track querie以及N-m个detection queries,detection queries设置成zero,设置成zero是不是有问题呢?),同时在inference过程中不再使用IoU matching关联。
(五) Method
5.1 构建MOTR的一些相关介绍
- 关于DETR中使用object query作为隐状态最终生成固定长度的object的描述
DETR中引入的是object queries(在Decoder中使用的,对Transformer代码部分不是特别理解,先留下疑问吧)使用固定长度的embedding来表示目标,在decoder中image feature和object queries之间进行交互,来实现更新他们呢的表示。进一步采用Bipartite matching实现the updated queries和GTs之间的一一匹配,并且作者这里将这个query看成是object detection的query。- 本文是怎么构建track query的,如何实现track query和object query同GTs的一对一对应关系呢?
首先介绍本文基于DETR的改动,本文中从DETR的detect query中增加了track query,文中指出这里的detect queries是固定长度的,track queries是可变长度的,并且track queries自动能够实现自动更新。这里的疑问是:detect query中的固定长度跟DETR中是一样的呢,也就是说都指的是最大可以检测到的目标?还是说detect query和track query的总长度是DETR中detect query的长度呢?也就是可以同时使用detect query和track query来和GTs做one-by-one的对应呢?从论文的理解上来看,这里我更倾向于后面这种,需要回头代码中确认
回答:detect query的长度是固定的,相当于DETR中的固定长度,而track query的长度的不固定的,cat到一起输入到decoder中
这里的问题是TiT_iTi帧中的黄色框是不检测1和2目标了嘛?之前看代码好像是这样的,是将GTs分成两部分,一部分用于track query的回归,另一部分用于detect query的回归,回头再确认下是不是这个情况
是的,这里detect query只用于跟new-born的目标进行one-by-one 匹配,也就是说只负责预测除了tracklets中已经有的目标?
参考论文中的原话:While in MOTR, detect queries are only used to detect the new-born objects and track queries predict these tracked objects.怎么将detect query,track query同GTs一对一对应上呢?本文采用的是tracklet-aware label assignment(TALA)这边应该是本文新起的一个名词,注意这里的detect queries仅仅用来检测new-born目标,并且track queries用来对应已经跟踪上的目标。具体的做法是(这里是博主自己的理解,代码只是粗略的看了下,可能会有问题):
现在有GTs,track queries,detect queries。Track queries不需要使用bipartite matching进行匹配,follow the same assignment of previous frames(这里说的比较抽象,实际上应该是当前已有的track queries中在之前已经将gt的label给到这儿了,接只需要确定当前track queries中和gt id对应上的那个就是要track queries需要对应的gt,如果GTs中没有能够同track queries对应上的,则将当前的track queries设置成无效,应该是将该track query删除),接着剩下的没有匹配上的就看成是detect queries,将detect queries同剩下的GTs做一次匈牙利匹配,也就是一一对应上。
基于上述做法的思考,论文中将TiT_iTi时刻的predictions记作Yi={Ytri,Ydeti}Y_{i}=\left\{Y_{t r}^{i}, Y_{d e t}^{i}\right\}Yi={Ytri,Ydeti},其中YtriY_{t r}^{i}Ytri表示track queries对应的预测边界框,YdetiY_{d e t}^{i}Ydeti表示detect queries对应的预测框。同时将GTs记作Y^i={Y^tri,Y^deti}\hat{Y}_{i}=\left\{\hat{Y}_{t r}^{i}, \hat{Y}_{d e t}^{i}\right\}Y^i={Y^tri,Y^deti},Y^tri\hat{Y}_{t r}^{i}Y^tri表示同track queries对应的gt边界框,Y^deti\hat{Y}_{d e t}^{i}Y^deti表示同detect queries对应的gt边界框。track queries+detect queries同ground truth之间的对应关系使用ωi={ωtri,ωdeti}\omega_{i}=\left\{\omega_{t r}^{i}, \omega_{d e t}^{i}\right\}ωi={ωtri,ωdeti}表示。其中
ωdeti=argminω^deti∈ΩiL(Ydeti∣ω^deti,Y^deti))ωtri={∅i=1ωtri−1∪ωdeti−12≤i≤N\begin{array}{c} \left.{\omega}_{d e t}^{i}=\underset{\hat\omega_{d e t}^{i} \in \Omega_{i}}{\arg \min } \mathcal{L}\left(\left.Y_{d e t}^{i}\right|_{\hat\omega_{d e t}^{i}}, \hat{Y}_{d e t}^{i}\right)\right) \\ \omega_{t r}^{i}=\left\{\begin{array}{ll} \emptyset & i=1 \\ \omega_{t r}^{i-1} \cup \omega_{d e t}^{i-1} & 2 \leq i \leq N \end{array}\right. \end{array} ωdeti=ω^deti∈ΩiargminL(Ydeti∣∣ω^deti,Y^deti))ωtri={∅ωtri−1∪ωdeti−1i=12≤i≤N
这里的符号相对于原文进行了调整,其中NNN表示视频序列的长度,L\mathcal{L}L表示pair-wise matching cost,这里就是匈牙利匹配,主要解决YdetiY_{d e t}^{i}Ydeti和Y^deti\hat{Y}_{d e t}^{i}Y^deti的一一对应关系,在初始时刻T1T_1T1,ωtr1\omega_{tr}^{1}ωtr1没有任何目标,而ωdet1\omega_{det}^{1}ωdet1则是通过YdetiY_{d e t}^{i}Ydeti和Y^deti\hat{Y}_{d e t}^{i}Y^deti的匹配得到,接着ωtri\omega_{tr}^{i}ωtri则是由上一个时刻的跟踪queries对应的ωtri−1\omega_{tr}^{i-1}ωtri−1以及上一个时刻的检测目标ωdeti−1\omega_{det}^{i-1}ωdeti−1表示,对于在Ti−1T_{i-1}Ti−1时刻出现的new-born目标,会加入到TiT_{i}Ti时刻的query中这里的疑问是为什么不使用当前时刻的检测目标呢?
最后就是DETR框架中重复框的置信度非常低,这应该是使用bipartite matching的作用,不再使用一对多的情况。
5.2 MOTR
5.2.1 模型框架
上图以及相关的描述中已经将MOTR的整体框架介绍很清楚了。其中骨干采用CNN实现(ResNet50),接着引入transformer的encoder来提取图像序列特征:f={f1,f2,…,fN}f=\left\{f_{1}, f_{2}, \ldots, f_{N}\right\}f={f1,f2,…,fN},对于第一帧T1T_1T1来说,将经过encoder的图像featuref1f_1f1以及固定长度的detected queriesqdq_dqd输入到Transformer decoder中来生成track queries qot1q^1_{ot}qot1,后面跟FFN来生成预测Y1Y_1Y1,同时qot1q^1_{ot}qot1通过QIM(Query Interaction Module)来得到下一个时刻的track queries,这里其实类似track任务中基于当前的track trajectory来预测未来的track trajectory,得到qt2q_t^2qt2用作第二帧的decoder输入,并且此时detect queries同第一帧输入的detect queries是相同的都是qdq_dqd,
问题:图中提到的Predictions of the video clip are aggregated together and used to calculate the collective average loss with ground-truths难道是整个视频序列的输出同gt序列的输出进行比对嘛?
回答:在CAL中指出不是使用frame-by-frame计算损失,而是通过collect 多个预测。
5.2.2 QIM模块
本文的核心内容就是Query Interaction Module,主要包括两个内容:目标的进入和退出机制以及TAN(temporal aggregation network):
首先就是目标的进入和退出机制:
在TiT_iTi帧时,track queries qitq_i^tqit以及detect queries qdq_dqd输入到Transformer的Decoder中,得到original track queries qotiq^i_{ot}qoti(说实话,我觉得这里起名字交track queries不合适),并将track queries分成两个sets:qoti={qtri,qdet i}q_{o t}^{i}=\left\{q_{t r}^{i}, q_{\text {det }}^{i}\right\}qoti={qtri,qdeti},这里原文说qtriq_{t r}^{i}qtri中同时包含了tracked以及dead目标,需要在接下来的处理中将dead目标去除掉,qdet iq_{\text {det }}^{i}qdeti中是new-born的目标。
这里如图4(a)中所示,qotiq_{o t}^{i}qoti中包含1,2两个目标,2是dead目标,问题:怎么将dead目标去除掉?
回答:训练过程和推理过程是分开来处理的
训练过程通过在ground-truthY^i\hat Y_iY^i和当前的track trajectories的匹配结果ωtri\omega_{t r}^{i}ωtri进行comparison。对应代码在motr matching的step1中:
将没能够和gt idx匹配上的目标看成是dead目标,并将没有dead的track queries保留下来,得到qˉtri\bar{q}_{t r}^{i}qˉtri,并且det queries表示的是new-born的目标,也就是图中所示的qˉdeti\bar{q}_{det}^{i}qˉdeti,通过wdetiw^i_{det}wdeti来获取。此时还没有将new born目标添加到track query(也就是所谓的track轨迹)当中。
推理过程中使用预测YiY_iYi的类别分数来判断一个track query的增加和删除,注意这里是同训练过程不一样的,并且这个地方同时说明了track query的增加和删除,文中的classification分数是目标所有类别分数中的最大值(比如说coco一共有91个类别,然后每一个类别有一个置信度分数,取所有类别中置信度最高的那个作为当前query的类别分数),此外这里图4中关于inference表述有问题,实际上在inference过程中,没有再对qdetiq^i_{det}qdeti做track query和detect query做划分,对应的公式表示相比于原论文进行了调整。
文中所提到的sks_ksk表示qotiq^i_{ot}qoti中的第k个query的分类分数,判断分数sks_ksk是否超过设置的阈值τn\tau_{n}τn,超过当前阈值的话则加入到track轨迹中。
qˉtri={qk∈qoti∣sk>τn}\bar{q}_{t r}^{i}=\left\{q_{k} \in q_{ot}^{i} \mid s_{k}>\tau_{n}\right\} qˉtri={qk∈qoti∣sk>τn}
对于从当前轨迹中删除的话,也就是基于分类分数sks_ksk以及退出阈值τex\tau_{ex}τex,并且设置成当连续MMM帧小于这个阈值时退出,对应的公式表述为:
qˉtri={qk∈qoti∣max{ski,…,ski−M}>τex}\bar{q}_{t r}^{i}=\left\{q_{k} \in q_{ot}^{i} \mid \max \left\{s_{k}^{i}, \ldots, s_{k}^{i-M}\right\}>\tau_{e x}\right\} qˉtri={qk∈qoti∣max{ski,…,ski−M}>τex}
对应到代码上的表述为:
接着就是TAN模块:
这里引入TAN的主要目的在于给tracked目标提供contextual relation,增强temporal relation,TAN的输入是filtered track queries qˉtri\bar{q}_{t r}^{i}qˉtri以及qˉdeti\bar{q}_{d e t}^{i}qˉdeti分别表示已经跟踪上的和new-borned,同时将上一个时刻的tracked queries qˉtri−1\bar{q}_{t r}^{i-1}qˉtri−1也作为输入。TAN实际上就是一个Transformer的encoder,Multi-Head Self-Attention的输出记作tgttgttgt表示成:
tgt=σs((qˉtri+qˉtri−1)⋅(qˉtri+qˉtri−1)Td)⋅qˉtrit g t=\sigma_{s}\left(\frac{\left(\bar{q}_{t r}^{i}+\bar{q}_{t r}^{i-1}\right) \cdot\left(\bar{q}_{t r}^{i}+\bar{q}_{t r}^{i-1}\right)^{\mathrm{T}}}{\sqrt{d}}\right) \cdot \bar{q}_{t r}^{i} tgt=σs(d(qˉtri+qˉtri−1)⋅(qˉtri+qˉtri−1)T)⋅qˉtri
这里TTT表示转置,σs\sigma_{s}σs表示sigmoid函数,ddd表示track queries的维度,经过通过FFN refine tgttgttgt最终同qˉdeti\bar{q}_{d e t}^{i}qˉdeti做cat得到下一个时刻的track queries qti+1{q}_{t }^{i+1}qti+1
5.2.3 Collective Average Loss
这里作者提出通过在视频序列上的multiple predictions计算损失,来学习temporal variances。使用序列上的损失,相比于frame-by-frame的损失有什么差异呢?
符号表述:这里假定视频序列的长度为NNN,对应的预测boxes分别为Y={Yi}i=1NY=\left\{Y_{i}\right\}_{i=1}^{N}Y={Yi}i=1N,并且视频序列对应的真实boxes为Y^={Y^i}i=1N\hat Y=\left\{\hat Y_{i}\right\}_{i=1}^{N}Y^={Y^i}i=1N,使用ω={ωi}i=1N\omega=\left\{\omega_{i}\right\}_{i=1}^{N}ω={ωi}i=1N表示一对一的对应关系。此时整个序列的损失为:
Lo(Y∣ω,Y^)=∑n=1N(L(Ytri∣ωtri,Y^tri)+L(Ydeti∣ωdeti,Y^deti))∑n=1N(Vi)\mathcal{L}_{o}\left(\left.Y\right|_{\omega}, \hat{Y}\right)=\frac{\sum_{n=1}^{N}\left(\mathcal{L}\left(\left.Y_{t r}^{i}\right|_{\omega_{t r}^{i}}, \hat{Y}_{t r}^{i}\right)+\mathcal{L}\left(Y_{d e t}^{i} \mid \omega_{d e t}^{i}, \hat{Y}_{d e t}^{i}\right)\right)}{\sum_{n=1}^{N}\left(V_{i}\right)} Lo(Y∣ω,Y^)=∑n=1N(Vi)∑n=1N(L(Ytri∣∣ωtri,Y^tri)+L(Ydeti∣ωdeti,Y^deti))
上式中Vi=Vtri+VdetiV_{i}=V_{t r}^{i}+V_{d e t}^{i}Vi=Vtri+Vdeti表示TiT_iTi帧的GTs的总数,VtriV_{t r}^{i}Vtri表示tracked objects的数量,VdetiV_{d e t}^{i}Vdeti表示new-born的目标的数量,L\mathcal{L}L表示损失函数,这里的损失函数同DETR中相似。对于单帧的损失L\mathcal{L}L可以表示成:
L(Yi∣ωi,Y^i)=λclsLcls+λl1Ll1+λgiou Lgiou \mathcal{L}\left(\left.Y_{i}\right|_{\omega_{i}}, \hat{Y}_{i}\right)=\lambda_{c l s} \mathcal{L}_{c l s}+\lambda_{l_{1}} \mathcal{L}_{l_{1}}+\lambda_{\text {giou }} \mathcal{L}_{\text {giou }} L(Yi∣ωi,Y^i)=λclsLcls+λl1Ll1+λgiouLgiou
这里Lcls\mathcal{L}_{c l s}Lcls为类别损失,使用focal loss;Ll1\mathcal{L}_{l_{1}}Ll1损失表示的是L1损失这里是边界框参数的l1loss,Lgiou \mathcal{L}_{\text {giou }}Lgiou是GIoU损失。L1损失和GIoU损失对应到代码上为:
(六) Experiments
6.1 实验设置
- 数据集
MOT16,MOT17- 评价指标
MOTA,MT,ML,IDS,IDF1.其中IDF1用来表示轨迹标签的准确性,MOTA用来描述整体的detection和tracking性能。- 训练设置
同CenterTrack相同,使用了random flip和random crop等增强方式
短边resize到800,最大size限制到1536.
randomly sample key frames from video sequences来解决不同帧率的问题.
以pdropp_{drop}pdrop的概率erase掉tracked queries来为new-born生成更多的样本,同时还要以pinsertp_{insert}pinsert的概率模拟dead objects这是咋想到的,这样处理是不是相当于调整了gt,对性能会有影响吗
在COCO检测数据集上预训练,采用AdamW训练200epochs,使用初始学习率2e−42e-42e−4,学习率在第150个epoch衰减到2e−52e-52e−5,batch设置成1,并且每一个batch包括了一个视频clip的5帧。在SOTA中,在联合数据集上训练(MOT17 train以及CrowdHuman),视频的initial clips为2,接着在50,90和150个epoch时变成了3,4,5,在消融实验中,基于MOT17数据集进行训练,不使用CrowdHuman。
6.2 同SOTA比较
讲道理这种端到端的训练方式效果上应该要比detection+association要好很多吧,主要还是目前Tracking方面端到端模型的研究比较少,应该还有很大的改进空间。
6.3 消融实验
消融实验使用不同的数据集来fast training。
(a)图表示TAN和CAL对模型性能的影响,两个结合起来用性能提升好多啊~
(b)图表示视频序列长度对于CAL性能的影响,多帧计算损失能够提升跟踪性能,帮助网络处理一些遮挡问题。
©(d)图表示在训练过程中增加的pdropp_{drop}pdrop和pinsertp_{insert}pinsert的影响。
(e)表示QIM的两个阈值对模型性能的影响。
(七) Conclusion
本文提出的MOTR是一个真正的端到端的多目标跟踪框架,将track query看成是隐状态来迭代更新。同时引入了TAN和CAL来增强帧间的long-term关系,取得了有竞争力的结果。achieves competitive performance
(八) Notes
8.1 MOT方法
当前tracking-by-detection的方式,实际上将MOT任务分成了两个阶段,detection和data association。目前的association还是采用基于appearance和location差异来构建的不同frame之间的联系。appearance差异主要体现在Re-ID来度量不同frame上boxes的相似性,位置上的相似性度量主要体现在利用kalman实现的下一帧位置预测同当前检测结果的相似性。然而这种方式中learning of temporal motion not end-to-end.每一个检测box分配一个轨迹,整个pipeline并不是端到端的。
从上述来看,目前tracking-by-detection的方式主要存在的问题是:
- 没有考虑temporal motion
- 没有考虑整个pipeline的端到端学习
从这种情况来看,目前tracking-by-detection方式中还是存在着较多的不足之处的。
在DETR中是将目标检测问题描述成一个set prediction problem
如图中(a)所示,object queries(可以看成是decoupled representation of objects,从代码上来看的话,nn.Embedding(num_queries, hidden_dim).weight)输入到Transformer的decoder中,然后跟图像feature进行interact。同时采用Bipartite matching来试先one-to-one的assignment(在object queries和ground-truths之间),从而消除了NMS。
而图(b)表示的是利用,隐状态同sentence feature交互从而进行序列预测。而MOT问题也可以看成是序列 预测问题,因为最终MOT是要得到一组object sequences,这里作者是将每一个sequence对应到一个轨迹上,并且track queries是作为一个隐状态对应到图3中的qtiq^i_{t}qti,相比于DETR中的做法这里是将检测query和track的query放到一起会不会有问题呢?有没有可能是做一个2N的query查询呢?一个用于查询detections,另一个用于查询track trajectories?,接着在Decorder中进行update得到图3中qotiq^i_{ot}qoti,将qotiq^i_{ot}qoti通过FFN(Feed Forword Network)得到类别分数以及边界框的预测值,这里跟One-Stage的方式不同了,主要是通过全连接层来得到最终的预测,而不是feature map得到最终的预测输出。。疑问:既然在输出qotiq^i_{ot}qoti时已经进行了query的更新,为什么还有引入QIM这个模块呢?
这里的话我觉得应该是decoder对query解码得到对应的预测边界框,接着再通过QIM中的TAN编码成隐状态。并且TAN中引入了一个shortcut来集成历史信息。
其他的一些基于Transformer框架的MOT比如TransTrack以及TrackFormer。这里本文提出的方法同其他的方法存在的差异是:
8.2 基于Transformer的架构
DETR中结合了CNN,Transformer以及bipartite matching来进行端到端的目标检测,在Deformable DETR中引入了deformable attention module到Transformer中。
VIT中构建了一个pure Transformer架构用于图像分类,在swin transformer中引入了shifted windowing scheme来进行self-attention
(九) TODO
- 1. detect query中的固定长度跟DETR中是一样的呢,也就是说都指的是最大可以检测到的目标?还是说detect query和track query的总长度是DETR中detect query的长度呢?也就是可以同时使用detect query和track query来和GTs做one-by-one的对应呢?从论文的理解上来看,这里我更倾向于后面这种,需要回头代码中确认
- 2. 5.1小节中 问题是TiT_iTi帧中的黄色框是不检测1和2目标了嘛?之前看代码好像是这样的,是将GTs分成两部分,一部分用于track query的回归,另一部分用于detect query的回归,回头再确认下是不是这个情况
MOTR: End-to-End Multiple-Object Tracking with TRansformer阅读笔记相关推荐
- TransTrack: Multiple Object Tracking with Transformer
摘要 TransTrack利用transformer架构,这是一种基于query-key机制多目标跟踪方法,就是通过前一帧的对象特征来跟踪当前帧的目标,并对当前帧进行对象检测,以检测新的对象.通过在一 ...
- 多目标跟踪综述、论文、数据集大汇总 Awesome Multiple object Tracking
Awesome Multiple object Tracking(持续更新) 综述 论文 2022 2021 2020 2019 2018 2017 2016 数据集 综述 Multiple Obje ...
- 跟踪算法基准--Tracking the Trackers: An Analysis of the State of the Art in Multiple Object Tracking
Tracking the Trackers: An Analysis of the State of the Art in Multiple Object Tracking https://arxiv ...
- Multiple Object Tracking:多目标跟踪综述
Multiple Object Tracking:多目标跟踪综述 多目标跟踪综述 多目标跟踪综述 摘要 1. 介绍 2. 算法知识 3. 总结 4. 可学习的资源及代码 摘要 本篇博客是多目标跟踪最综 ...
- FairMOT: On the Fairness of Detection and Re-Identification in Multiple Object Tracking 效果展示
FairMOT: On the Fairness of Detection and Re-Identification in Multiple Object Tracking 效果展示 公开数据集指标 ...
- Quasi-Dense Similarity Learning for Multiple Object Tracking
QDTrack 论文标题:Quasi-Dense Similarity Learning for Multiple Object Tracking 论文地址:https://arxiv.org/pdf ...
- Quasi-Dense Similarity Learning for Multiple Object Tracking(用于多目标跟踪的拟密集相似度学习)
Quasi-Dense Similarity Learning for Multiple Object Tracking 论文:下载地址 代码:下载地址 QDTrack: 一. 介绍 二. 方法 1. ...
- 多目标跟踪(MOT,Multiple Object Tracking)评价指标
简述 在事先不知道目标数量的情况下,对视频中的行人.轿车.卡车.自行车等多个目标进行检测并赋予ID进行轨迹跟踪.不同的目标拥有不同的ID,以便实现后续的轨迹预测.精准查找等工作. 多目标跟踪中即要面对 ...
- Multiple Object Tracking with Mixture Density Networks for Trajectory Estimation 详细解读
文章目录 简介(abstract) 介绍(introduction) 相关工作(Related Work) 轨迹预测(Trajectory Estimation) Mixture Density Ne ...
最新文章
- 不讲码德!坏味道偷袭我这个老码农
- Placement new
- 专访1药网技术副总裁黄哲铿:揭秘技术跨界管理之道
- 关于release后retainCount还是1的问题
- Python-装饰器-案例-获取文件列表
- python soup findall_Python之BeautifulSoup常用详细使用
- C语言基础篇(零)gcc编译和预处理
- linux 内核源码学习
- 让VB6 IDE“认识”鼠标滚轮
- 快速判断一个数能否被 2 ,3 ,4 ,5, 7,9,11 整除
- ESP8266开发——安信可IDE环境搭建
- 声明$(function(){})的含义
- 程序员去哪里找靠谱的兼职?(附项目库)
- 【云计算学习教程】云计算架构参考模型
- 计算机网课自我鉴定,计算机实习自我鉴定
- E-puck2机器人系列教程-7.机器人本体STM32固件更新
- oracle中的modify,数据库Oracle modify
- 该内存不能为written或read的解决方案
- 12.bacnet mst/tp 报文 解析
- Python字典dict