Towards Real-Time Multi-Object Tracking 的介绍与分析

论文链接:https://arxiv.org/pdf/1909.12605.pdf
代码链接:https://github.com/Zhongdao/Towards-Realtime-MOT
翻译链接:https://blog.csdn.net/weixin_42907473/article/details/104407606

摘要

现在的MOT系统通常使用tracking-by-detection的方式。这种方式有以下两个部件:1)用于目标定位的检测模型,2)用于数据关联(data association)的外观嵌入模型(appearance embedding model)。两个模型分开执行可能会导致效率问题,其运行时间只是简单的将两个结构的运行时间加起来,而没有去探究它们之间可能某些结构可以共享的潜在可能性。现有的实时MOT的方法主要研究association step,所以这些方法事实上只是实时association model而不是实时MOT系统。在本文中,我们提出了一个将目标检测和外观嵌入共享结构学习的MOT模型。具体而言,我们将外观嵌入模型合并到single-shot detector中,以便该模型可以同时输出检测结果和相应的嵌入。因此,该系统被转化为一个多任务的学习问题:存在多个学习目标,即,anchor classificationbbox regressionembedding learning,以及各个损失的自动权重。

算法介绍

现有MOT出现的问题

现在的MOT系统通常使用tracking-by-detection的方式。这种方式分为两部分:

  1. 用于目标定位的检测模型
  2. 用于数据关联(data association)的外观嵌入模型(appearance embedding model)。

一般MOT的结构使得它具有以下缺陷:

  • 这意味着系统至少需要两个计算密集型组件:detector modelembedding(re-ID) model。作者将将这种方法称为Separate Detection and Embedding (SDE)方法。
  • 两个模型分开使得效率低下,该方法的总体推测时间大致为两个部件之和,且随着检测数量的增加而增加。
  • 这一特性会在SDE方法构建一个实时的MOT系统时带来严重挑战,而实时是实践中的基本要求。
  • 该方式的结构使得两个模型完全独立开来,并没有探究两者之间某些结构可以共享的问题。

解决方案

作者在论文中提到通过单个深度网络联合学习Detector和Embedding模型(JDE)。换句话说, 提出的JDE使用单个网络来同时输出检测结果和检测盒的相应外观嵌入。
相比之下, SDE方法和two-stage方法分别以重新采样的像素(边界框)和特征图为特征。边界框和特征图都被馈入单独的re-ID模型中以提取外观特征。

该算法主要优势?

  • 介绍了JDE,这是用于联合检测和嵌入学习的单一框架。作为在线MOT系统,它可以(近)实时运行,并且在准确度上与单独的检测+嵌入(SDE)SOTA结果相当。
  • 多目标跟踪的一般解决方案采用检测+Re-ID(目标重识别)。这种方法将检测与目标跟踪分离开来能够获取较好的结果,但是效率较低。

实现效果

在MOT-16 test 数据集上获得MOTA=64.4%的精度下,帧率达到18.8帧,作为比较,Faster R-CNN+QAN embedding在获得MOTA=66.1%的精度下,帧率只有不到6帧。

  • 与当时的一些SOTA进行对比,在准确率差距不大的情况下,FPS大大提升
    在这里插入图片描述

与其他模型的区别

下面这张图就介绍了三种不同的MOT实现方案:
在这里插入图片描述

  • SDE:将Detection与Embedding独立开来,效果较好但是性能较低。
  • Two-stage:通过RPN提取出区域特征,该特征与Embedding模块共享,但其本质上还是一个两阶段的算法,仍然达不到实时性的要求。
  • JDE:Detection与Embedding通过同一个网络实现,one-stage方法,直接获取Detection与Embedding。

检测和表观特征联合学习

在这里插入图片描述

  • JDE的目标是在单次前向运算过程中输出检测框和目标的外观特征。
  • 数据集可以分为三个部分:视频帧,每个视频帧k个目标的位置信息,以及每个目标对应的label(identity labels,这里表示每个目标具体细分,比如张三和李四)。
  • 对于每个视频帧,模型的输出是目标类别(粗分类:人、车等等)、坐标信息以及特征信息
  • JDE应该满足下述要求:
    • 模型输出的检测坐标应该与GT尽可能的接近(检测阶段),即检测结果要准
    • 同一个目标不同帧之间的表观特征要比不同目标不同帧之间的表观特征距离小,即两个相同目标表观特征要相近。理论上来说,如果上述两个目标函数可以很好的满足,那么即便使用最简单的关联策略,例如匈牙利算法,也可以产生良好的追踪效果。
网络结构

JDE使用了FPN作为骨干网络,利用多尺度的方式提取不同大小目标的特征。图中输入的视频帧通过FPN获取了3个不同尺度的特征图,分别将尺寸缩小了32、16和8倍。每个特征图都连接了一个prediction head,将基于三个尺度融合的特征图的prediction head进行叠加。预测头由数个堆砌的卷积层组成,输出尺寸为(6A+D) * H * W的预测。A表示各尺度的anchor box的数目,D是特征embedding的维度。
最后通过该叠加预测头可以得到3个结果:

  1. box分类结果,大小为 2A * H * W;
  2. box回归系数,大小为 4A * H * W;
  3. 特征embedding的尺寸,大小为 D * H * W。

从这里可以看处JDE相对于SDE来说它复用了已有的共享特征图,一次提取便可以得到3个结果,这是一个one-stage的模型。

检测分支
这个过程类似于RPN过程,是基于anchor实现的。它相对于Faster-RCNN中的RPN做了两处修改:

  1. 针对行人目标,重新设计了anchor的数量、大小和长宽比。所有的anchor的宽高比设置为1:3,每个尺度下的anchor数量设为4,anchor的宽度从11 -> 512。
  2. 调整了anchor属于前景和背景的阈值。在JDE中,anchor和gt的IOU大于0.5则认为其是前景目标,但如果其与任意ground truth的IOU都小于0.4则被认为是背景。作者这里使用了0.4,而不是普遍使用的0.3,这样会使得更多的少量重叠的目标被判定为背景,有助于减少误报率,在高度重叠的场景下比较有益。

这里可以根据场景调整适合自己的参数,比如针对车可以调整宽高比为3:1,而针对狗可以调整为3:2,前背景阈值也可以自行调整,具体参数视情况而定。

检测的损失函数包含两部分,分别是分类损失和定位损失,分类损失使用交叉熵损失,定位损失使用smooth-L1损失,和Faster R-CNN一致。

表观特征分支
这里是论文中的难点所在,它采用了三元组的形式实现。这里还没有理解清除,可以参考文章:
Towards Real-Time Multi-Object Tracking

分析:为什么该模型效率优于其他模型?

1. SDE

以yolov5 + deepsort为例,这个算法分为检测和重识别两个步骤:

pred = model(img, augment=opt.augment)[0]		# 目标检测
...
outputs = deepsort.update(xywhs, confss, im0)	# 目标重识别

为什么说SDE没有用到可能存在的共享结构呢?
我们先查看yolov5的输出结果:

for i, det in enumerate(pred):
	...
	
	bbox_xywh = []
    confs = []

    for *xyxy, conf, cls in det:
    	...

可以看到检测网络输出的结果仅仅只有目标的位置、置信度以及类别,并没有保存目标的特征信息。

我们跟进目标重识别的update()方法:
在这里插入图片描述
如图,红框有个_get_features(bbox_xywh, ori_img)函数,继续跟进

    def _get_features(self, bbox_xywh, ori_img):
        im_crops = []
        for box in bbox_xywh:
            x1, y1, x2, y2 = self._xywh_to_xyxy(box)
            im = ori_img[y1:y2, x1:x2]
            im_crops.append(im)		# 根据目标框坐标裁剪图片
        if im_crops:
            features = self.extractor(im_crops)		# 提取目标特征
        else:
            features = np.array([])
        return features

可以看到这里利用一个特征提取器对裁剪后的目标图片提取特征

看到这里我们应该可以明白了SDE效率低下的原因:既然检测器本来就是通过特征图的方式完成目标位置检测的,那么Re-ID又进行了特征提取,这就可能会重复前面进行的工作,浪费资源。

2. Two-stage

我们以Faster-RCNN为例。
Faster-RCNN网络图:
在这里插入图片描述
主要看中间的RPN部分。我们知道RPN的工作就是将骨干网络输出的共享特征图通过分类与回归两条分支完成对目标进行前背景分类坐标回归,其内部实现基于anchor。
RPN的输出为Proposal,它包括目标的坐标信息以及分类信息(只能确定前景和背景)。该坐标信息是映射到原图像的。
我们注意在ROIPooling之前做了一步操作:通过目标的坐标信息映射到Feature map上,将区域特征从Feature map从抠出来作为池化层的输入。回到上面的三种模型图中,这里的区域特征可以共享于Embedding model,这是比SDE一个明显的优点:即只提取了一次特征,但是可用于两个模块。
但是由于Faster-RCNN仍然是二阶段的,RPN只能确定目标是否属于前景,区域特征仍然要输送到头部网络实现目标细分类依据边框的精准回归,虽然提高了运行时间,但仍然达不到实时效果。

环境搭建与实验复现

这里可以参考我的另一篇文章:
Window下的Towards Real-Time Multi-Object Tracking的环境搭建与训练

参考

  1. JDE 《Towards Real-Time Multi-Object Tracking》学习笔记
  2. 目标跟踪 - Towards Real-Time Multi-Object Tracking
  3. Towards Real-Time Multi-Object Tracking
  4. faster rcnn中Roi pooling层的个人理解
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值