Advertisement

Deep-SorT论文阅读总结

阅读量:

本文旨在阐述Deep SORT论文的核心内容及其创新之处。
具体涉及状态估计、匹配方法、级联匹配以及表观模型等技术。
文中首先介绍了SORT算法的基本原理及其局限性。
尽管该方法具有很高的计算效率(基于IOU的匹配),但存在较大的ID switch问题。
针对这一缺陷,本文提出了一种改进方案——Deep SORT算法。
通过这种扩展机制,在目标长时间被遮挡的情况下表现更为出色。
具体而言,在SORT算法的基础上增加了表观信息的融合机制。
文中指出:表观信息即为目标对应的特征描述。
论文采用深度关联度量(源自ReID领域)对表观特征进行提取,并基于大型行人重识别数据集进行训练以优化模型参数。
沿用SORT算法的基本框架,并将其状态空间扩展至8维。

在这里插入图片描述

,其中**(u,v)代表bbox的中心点**,宽高比r , 高h 以及对应的在图像坐标上的相对速度
论文使用具有等速运动和线性观测模型的标准卡尔曼滤波器 ,将以上8维状态作为物体状态的直接观测模型。每一个轨迹,都计算当前帧距上次匹配成功帧的差值,代码中对应time_since_update变量。该变量在卡尔曼滤波器predict的时候递增,在轨迹和detection关联的时候重置为0。超过最大年龄的轨迹被认为离开图片区域,将从轨迹集合中删除,被设置为删除状态。代码中最大年龄默认值为70,是级联匹配中的循环次数。如果detection没有和现有track匹配上的,那么将对这个detection进行初始化,转变为新的Track。新的Track初始化的时候的状态是未确定态,只有满足连续三帧都成功匹配,才能将未确定态转化为确定态。如果处于未确定态的Track没有在n_init帧中匹配上detection,将变为删除态,从轨迹集合中删除。

在这里插入图片描述

2.2匹配问题
Assignment Problem通常被称为指派问题或匹配问题,在本研究中主要涉及将轨迹Track与观测结果Detection进行配对。
该类配对问题常用匈牙利算法(简称KM算法)来解决。
该算法的核心目标是构建一个代价矩阵。
采用平方马氏距离作为度量工具来计算Track与Detection之间的差异程度。
因为两者均采用高斯分布来进行表示,并且马氏距离又被称为协方差距离,它是一种有效评估两个未知样本集之间相似程度的方法。
因此,在本研究中我们利用该方法来评估Track与Detection之间的配对效果。

在这里插入图片描述

第二个公式是一个度量工具,在马氏空间与卡方分布之间进行比较分析,并计算得到t(1)=9.4877。当观察到的马氏距离值低于该阈值时,则表明特征匹配成功。采用余弦相似度计算表观特征之间的差异程度;ReID模型通过提取128维特征向量完成识别任务,并基于余弦相似度进行对比分析以实现目标识别功能:

在这里插入图片描述

同样地,在该方法中也采用了余弦相似度指标,在这种情况下当余弦相似度低于某个阈值时,则判定匹配成功。这个阈值在代码实现中是由参数t(2)决定的,默认被设定为0.2(由参数max_dist控制),这一超参数在人脸识别任务中通常会设置为0.6左右。
综合匹配程度则是通过运动模型与外观特征进行加权融合来计算得出

在这里插入图片描述

说明

在这里插入图片描述

bi,j也是标志变量,在bi,j=1的情况下才会被初步人工配对

在这里插入图片描述

在伪代码中需要注意的关键点之一是匹配顺序问题。其中一项重要原则是优先选择年轻轨迹进行配对。例如,在下面的伪代码片段中展示了这一逻辑:

复制代码
    # 1. 分配track_indices和detection_indices
    if track_indices is None:
    track_indices = list(range(len(tracks)))
    
    if detection_indices is None:
    detection_indices = list(range(len(detections)))
    
    unmatched_detections = detection_indices
    
    matches = []
    # cascade depth = max age 默认为70
    for level in range(cascade_depth):
    if len(unmatched_detections) == 0:  # No detections left
        break
    
    track_indices_l = [
        k for k in track_indices
        if tracks[k].time_since_update == 1 + level
    ]
    if len(track_indices_l) == 0:  # Nothing to match at this level
        continue
    
    # 2. 级联匹配核心内容就是这个函数
    matches_l, _, unmatched_detections = \
        min_cost_matching(  # max_distance=0.2
            distance_metric, max_distance, tracks, detections,
            track_indices_l, unmatched_detections)
    matches += matches_l
    unmatched_tracks = list(set(track_indices) - set(k for k, _ in matches))
    return matches, unmatched_tracks, unmatched_detections

在最后一次匹配过程中同时对unconfirmed状态以及age=1的状态下的未匹配轨迹进行基于IOU的距离计算(与SORT算法一致)。这种方法能够有效减轻由于外观变化或部分遮蔽所带来的轨迹变化带来的影响。

在这里插入图片描述

2.4 表观特征
本节主要基于行人重识别领域的网络模型进行设计。其中涉及的网络架构在离线阶段经过系统性优化。其主要作用在于提取具有鉴别能力的关键特征。论文中采用的是Wide Residual Network(WRN),具体结构如图2所示:

在这里插入图片描述

网络最后的输出是一个128维的向量用于代表该部分表观特征(一般维度越高区分度越高带来的计算量越大)。最后使用了L2归一化来将特征映射到单位超球面上,以便进一步使用余弦表观来度量相似度。
3.总结
Deep SORT可以看成三部分:
检测: 目标检测的效果对结果影响非常非常大, 并且Recall和Precision都应该很高才可以满足要求. 据笔者测试, 如果使用yolov3作为目标检测器, 目标跟踪过程中大概60%的时间都花费在yolov3上,并且场景中的目标越多,这部分耗时也越多(NMS花费的时间).
表观特征: 也就是reid模型,原论文中用的是wide residual network,含有的参数量比较大,可以考虑用新的、性能更好、参数量更低的ReID模型来完成这部分工作。笔者看到好多人推荐使用OSNet,但是实际使用的效果并不是特别好。
**关联:**包括卡尔曼滤波算法和匈牙利算法。
**改进空间:**最近非常多优秀的工作的思路是认为reid这部分特征提取和目标检测网络无法特征重用,所以想将这两部分融合到一块。
JDE=YOLOv3和reid融合
FairMOT=CenterNet和reid融合
最近看了CenterNet,感觉这种无需anchor来匹配的方式非常优雅,所以非常推荐FairMOT,效果非常出色,适合作为研究的baseline。
5.参考:
距离:
论文地址:https://arxiv.org/pdf/1703.07402.pdf
代码地址:https://github.com/nwojke/deep_SORT
FairMOT: https://github.com/ifzhang/FairMOT
博客:https://www.cnblogs.com/YiXiaoZhou/p/7074037.html

全部评论 (0)

还没有任何评论哟~