zoukankan      html  css  js  c++  java
  • CenterTrack

    ori:https://blog.csdn.net/sinat_37532065/article/details/105418661

    主流目标跟踪方法:大多遵循tracking-by-detection思路。

    本文提出新的跟踪模型结构:CenterTrack,通过在一对图像上执行检测,并结合先前帧的detection结果估计当前帧的运动情况。简单、在线(不需要引入未来信息)、实时(MOT17 22fps)。

    简介:

    input:一对图像+根据首帧图像的检测结果渲染出的heatmap。

    output:一个从当前对象中心到前一帧对象中心的偏移向量,且这个偏移向量将作为中心点的一个附加属性来学习。

    有了中心点和偏移量之后,仅靠贪婪匹配策略即可将当前帧的对象与先前帧的相应对象建立起联系。

    简化了传统跟踪方法的两个关键步骤:跟踪条件检测和时间上的对象关联。

    CenterTrack的输入端将首帧的检测结果对应的heatmap也作为了输入,因为相邻帧间相关性往往较高,这样的做法会促使模型简单地复制先前的预测结果而拒绝做更多对跟踪有利的预测,因此作者在训练过程中加入了很多看起来极为激进的增强策略,试验结果表明,这些数据增强方法效果极佳。
    在模型训练上,CenterTrack有一个很大的优点是,其既可以在有标注的视频序列上训练,也可以通过对静态图像做数据增强来进行训练。
    相关工作:

    传统跟踪方法(tracking-by-detection)两个缺点

    (1)在建立跟踪联系过程中仅联合高层数(比如框位置等),会丢失图像外观信息,或者还需要有一个计算量比较大的特征提取器。

    (2)检测和跟踪分开进行

    CenterTrack优点

    (1)目标和联合与检测一起学习,同时还将前一帧的结果作为输入,从而帮助模型恢复被遮挡和中断的目标;

    (2)将跟踪的预测作为点的附加特征,这样网络可以推理并匹配处在画面里的所有目标,即使它们没有存在重叠部分。

    预备知识:CenterNet

    CenterTrack

    CenterNet将跟踪看做一个从局部角度观察的问题,比如当一个目标离开画面或被遮挡又重新出现时,跟踪模型不会记住它,而是会重新给它分配一个新的ID. 因此,CenterTrack将跟踪建模成了一个在连续帧之间传递检测结果ID的问题,而没有考虑如何给时间上有较大间隔的对象重新建立联系的问题。

    问题描述

    在时间t,给定当前帧I^{t}及上一帧I^{t-1},以及上一帧跟踪到的所有目标T^{t-1}={b^{t-1}_0,b^{t-1}_1,...,b^{t-1}_i},其中每个目标包含的信息有其位置、大小、置信度得分、编号ID。我们的目的是检测和跟踪当前帧中的目标,得到T^{t}={b^{t}_0,b^{t}_1,...,b^{t}_i},并为每个对象分配ID(如果该对象从上一帧就开始出现,那分配的ID要求是一致的)。

    面临两个挑战:

    (1)如何在每一帧中找出所有对象,甚至包含被遮挡的对象;

    (2)如何在时间上为这些对象建立联系。

    解决办法是:

    Tracking-conditioned detection:利用先前帧的检测结果改善当前帧的预测。

    Association through offsets:在时间轴上建立检测结果之间的联系

    4.1 Tracking-conditioned detection

    作为一个检测器,CenterNet已经能够给出跟踪所需的很多信息,如位置、大小和得分。但是它不具备预测未直接出现在当前帧的目标的功能,所以在CenterTrack中,将当前帧及其上一帧图像共同输入模型当中,旨在帮助网络估计场景中对象的变化并根据上一帧图像提供的线索恢复当前帧中可能未观察到的对象。

    此外,CenterTrack还将上一帧图像的检测结果添加到输入中,具体做法是根据上一帧的检测结果绘制一张单通道heatmap,其中peak位置对应目标中心点,并使用与训练CenterNet过程中相同的高斯核渲染办法(根据目标大小调整高斯参数)进行模糊处理,为了降低误报概率,作者只对检测结果中得分高于一定阈值的目标进行渲染(即得分低的目标不会体现在新生成的heatmap上)。
    综上,CenterTrack与CenterNet模型结构几乎相同,但是输入通道多了4个上一帧图像(3 channels)、渲染出的heatmap(1 channel)。

    4.2  Association through offsets

    为了能够在时间上建立检测结果的直接联系,CenterTrack添加了2个额外的输出通道,用于预测一个2维的偏移向量,即描述的是各对象在当前帧中的位置相对于其在前一帧图像当中的位置的X/Y方向的偏移量。此处的训练监督方式与CenterNet中对目标对象长宽或中心偏移情况的部分训练方式相同。

    在有了各个对象的位置以及对应的偏移情况之后,使用简单的贪婪匹配策略即可建立起对应目标在帧之间的联系。

     4.3 在视频数据上训练

    概况来说,CenterTrack = CenterNet + 4 * Input-channels + 2 * output-channels.

    CenterTrack本质上也是一个检测器,所以其训练方法也和训练CenterNet类似,也就意味着我们可以从一个预训练好的CenterNet上finetune出一个CenterTrack。具体做法是,首先根据常规做法,在当前视频数据上训练一个CenterNet模型,然后从它当中拷贝所有权重,并为新添加的部分结构进行随机初始化参数,而后遵循CenterNet的训练方法进行训练,并且额外加上对偏移量分支的监督。
    在训练CenterTrack过程中一个最主要的挑战是如何生成一张接近真实情况的tracklets heatmap的问题:在模型推理期间,tracklets heatmap是根据模型预测结果渲染而来的,可能会存在数量不定的missing tracklets、错误定位的目标以及还可能有误检的目标存在。而这些情况在Ground Truth中是不存在的,也就是说如果我们直接利用基于Ground Truth渲染出的heatmap,是无法模拟这种实际情况的,也就会导致模型效果不佳。
    上述问题解决办法是在训练过程中通过一些trick来模仿这些test-time error,具体而言:

    1.  在前一帧的预测结果上,对各个检测目标点进行高斯扰动(模拟“目标错误定位”的情况,超参数);

    2.  在Ground Truth目标中心附近以一定概率随机渲染出一些虚假的峰值(模拟“误检”的情况,超参数);

    3.  以一定概率,随机去除掉一些检测结果(模拟“漏检”的情况,超参数)。

    此外,在实际训练过程中,先前帧I^{t-1}不是必须是前一帧,它可以是相同视频序列中的其他帧。通过这种增强的方式,可以规避掉模型对视频帧率的敏感性。在CenterTrack中,从与当前帧间隔小于一定范围(比如前后3帧)的帧中来随机选择I^{t-1}.
    4.4 在静态图片上训练
    如果没有带标注的视频数据,我们还可以使用静态图像来训练CenterTrack:通过随机缩放和变换当前图像,来生成先前帧,从而达到模拟目标运动的目的。实验证明这一trick很有效,几乎不会影响跟踪模型的效果。
    5 分解研究
    5.1 两个主要的技术改进点的提升效果研究
    CenterTrack为了解决跟踪问题,设计了两个关键的思路:跟踪条件的检测(Sec. 4.1)和目标偏移量的预测(Sec. 4.2).
    为了分析效果,作者做了3个baseline模型:
    Detection only:顾名思义,只使用原版CenterNet进行检测,跟踪通过目标2D距离来匹配对象;
    Without offset:使用CenterTrack中对输入端的改进,但不使用预测出的offset,目标的匹配还是通过距离来计算;
    Without heatmap:在CenterTrack的基础上,去掉tracklets heatmap的输入,但是输出还是会预测offset,目标的匹配基于预测得到的偏移量结合贪婪匹配的策略进行。

    最终实验效果如上图,可以看出,如果不添加tracklets heatmap作为附加输入,效果会大打折扣。虽然看起来不使用offset效果下降不明显,但是这是因为做实验用的这些数据集帧率相对较高,换句话说就是目标的运动不会过于剧烈,这会弱化offset的表现,可能换一个帧率低些的数据集,或者目标运动速度快的,可能offset的作用会更加明显。
    5.2 使用noisy heatmap进行训练及使用静态图像进行训练
    主要是想分析一下对tracklets heatmap做增强的必要性,个人认为这是CenterTrack能取得不错效果的最关键的一环。
    同时还对仅使用静态图像训练的情况作了对比,可以看出与用视频序列进行训练相比,几乎没有差别。

  • 相关阅读:
    构建Web API服务
    AutoMapper(七)
    AutoMapper(六)
    AutoMapper(五)
    AutoMapper(四)
    AutoMapper(三)
    递归函数练习:输出菲波拉契(Fibonacci)数列的前N项数据
    递归程序练习:输出十进制数的二进制表示
    递归函数练习——累乘
    递归练习——累加和
  • 原文地址:https://www.cnblogs.com/ariel-dreamland/p/13362603.html
Copyright © 2011-2022 走看看