Towards Real-Time Multi-Object Tracking 论文的一些理解

每日一问

  • MOT最常被引述的方法是什么?
  • 这些方法可以分成哪些主要派别?
  • 每个派别的主要特色(优点和缺点)是什么?
  • 这个领域大家认为重要的关键问题有哪些?
  • 这些优点与缺点通常在哪些应用场合会比较被重视?
  • 在哪些场景下不会被重视?

精读一篇论文应该的收获

  • 这篇论文的主要假设是什么,这些假设在现实条件下容易成立吗?
  • 这篇论文的主要好处?
  • 这些好处主要表现在哪些公式上,哪些模型上?
  • 这一派的主要缺点是什么?

Abstract

对于tracking-by-detection的方法, 检测追踪是分两步走: 1.检测模型用来定位目标, 2.追踪模型用来对数据建立联系. 那么一个直观的感受就是运行时间是这两个模块的简单叠加.
作者提出了一个模型,它能够同时输出检测结果和对应的embeddings. 那么这个模型是一个multi-task learning.作者论文中说达到了实时.

Introduction

之前主流的工作将MOT分解成两个步骤: 1.检测步骤,单个视频帧中的目标已经本地化(localized); 2. 关联步骤, 分配被检测的目标分配给已经存在的轨迹中.
总的推理时间是两个分量的和,并且随着目标数量的增加而增加.(这个应该主要体现在步骤二的时间增加上).

为了节省计算, 一个可行(fesible)的方法是继承检测器和embedding模型到一个网络中. 目的是共享同一组低级特征,避免了重新计算.

Joint Learning of Detection and Embedding Problem Settings

JDE的目的是在单次前向传播中同时输出目标的位置和外观嵌入。 假定有一个数据集{I,B,Y},I表示图像帧,B表示此帧中k个目标的边界框注释,y表示部分身份标签标注,其中-1表示目标没有身份标签。JDE的目的是暑促预测的边界框B和外观嵌入 F ^ ∈ R k ∗ D \hat{F}\in \mathbb{R}^{k*D} F^RkD,其中D标识embedding的维度. JDE应该满足以下两个目标:
在这里插入图片描述第一个目标要求模型能够准确度检测目标;
第二个目标是要求外观嵌入具有以下特性. 连续帧中相同身份的检测框之间的距离应小于不同身份之间的距离. 距离度量d可以是欧式距离或者余弦距离.
从技术上讲,如果两个目标都得到满足,那么即使是简单的关联策略,如匈牙利算法,也会产生良好的跟踪效果.

Architecture Overview

在这里插入图片描述使用特征金字塔(FPN)的体系结构, FPN从多个尺度进行预测,从而在目标尺度变化很大的检测中带来了改进.
输入的视频帧首先经过骨干网络分别获得三个尺度的特征图(1/32, 1/16, 1/8的下采样),然后通过 skip connection将多个特征图融合. Predicion Head 由几个堆叠的卷基层组成, 并输出一个大小为(6A+D) * H *W的密集预测图. A是分配给该比例anchor template的数量,D是嵌入的维度.
密集预测图的三个任务:

  1. 检测框的分类结果: 2AHW
  2. 检测狂的坐标 4AHW
  3. embedding map DHW

接下来是分模块的讨论

检测用什么检测,嵌入用什么嵌入.

Learning to Detect

检测分支类似于RPN. 两点修改: 1. 根据数量,比例,长宽比重新设计锚; 2. 为前景/背景分配的双重阈值非常重要.

分类loss: 交叉熵损失函数:
L C r o s s E n t r o p y = − 1 n − 1 ∑ i = 1 n [ y l n y ^ + ( 1 − y ) l n ( 1 − y ^ ) L_{CrossEntropy} = -\frac{1}{n-1}\sum _{i=1}^n[yln\hat{y} + (1-y)ln(1-\hat{y}) LCrossEntropy=n11i=1n[ylny^+(1y)ln(1y^)
pytorch中的交叉熵loss描述如下,其实没有看太懂
l o s s ( x , c l a s s ) = − l o g e x p ( x [ c l a s s ] ) ∑ j e x p ( x [ j ] ) = − x [ c l a s s ] + l o g ( ∑ j e x p ( x [ j ] ) loss(x, class) = -log\frac{exp(x[class])}{\sum_j exp(x[j])} = -x[class] + log(\sum _{j}exp(x[j]) loss(x,class)=logjexp(x[j])exp(x[class])=x[class]+log(jexp(x[j])

回归loss: smooth-L1 loss:
l o s s ( x , y ) = 1 n ∑ i z i loss(x, y) = \frac{1}{n}\sum _i z_i loss(x,y)=n1izi
在这里插入图片描述

Learning Appearance Embeddings

外观嵌入问题作者并没有给出一个具体的模型, 只是说这是一个度量学习问题, 即学习一个嵌入空间, 其中相同身份的实例彼此靠近, 而不同身份的实例相距甚远. 这不禁让我想到了学习pytorch时使用的tensorboard, embedding.
FPN网络输出的高维embedding应该是无序的底层特征, 需要使用一个算法来对它进行类似聚类的操作?
作者借鉴了triplet loss的工作,将其和cross-entropy loss类比,最后选择了交叉熵损失函数作为embedding loss.

Automatic Loss Balancing

关于三个loss的权重问题,作者借鉴了独立任务不确定性的概念 . 总的losss可以写为:
在这里插入图片描述

Online Association

对于给定的视频,JDE模型处理每个帧并输出边框和相应的外观嵌入。我们计算观测值的嵌入(当前帧embedding的输出) 与之前存在的轨迹池中的嵌入之间的关联矩阵(affinity matrix).
使用Hungarian 算法将观测值(当前帧的检测结果)分配给轨迹(之前帧); kalman滤波器用于平滑轨迹并预测先前轨迹在当前帧的位置. 如果分配的observation embedding 在空间上与卡尔曼滤波器预测的位置太远, 那么该分配将被拒绝. 然后, 对一个跟踪器的embedding 进行如下更新:
如果没有任何观察值分配给Tracklet, 则将该 Tracklet标记为丢失,如果丢失的时间大于给定的阈值, 则标记为已丢失的跟踪,从当前的跟踪池中删除; 或者在分配步骤中重新找到.

Experiments

又需要再进一步更新.

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值