One More Check: Making “Fake Background” Be Tracked Again

CSTracker原团队的论文,设计了re-check子网络,可以添加在JDE范式的跟踪器之中,涨点明显。
论文:http://arxiv.org/abs/2104.09441
代码:https://github.com/JudasDie/SOTS


Abstract

近来,ons-shot的方法在MOT中取得了开创新的结果。one-shot方法即是JDT(JDE)范式的多目标跟踪方法,在同一网络内,提取到用于检测和ReID任务的特征。但这些方法大多有一个相同的问题,仅仅依靠单帧输入来进行当前帧bbox的预测,而当遇到遮挡、模糊之类的模糊时,有用的视觉信息缺失,跟踪器的性能便会下降。这也是最近很多论文想要的应对的问题。如果一个目标,其在当前帧被误分为背景类别,那么便不会被连接到本属于的轨迹中,造成轨迹的中断或者终止。于是,作者在这篇文章中提出了一个re-check网络来存储这些没有检测到的目标,作者称之为“fake background”。re-check通过修进后的互相关性层(cross-correlation layer)来捕获先前轨迹和当前帧的候选框之间的关系,以此将先前的轨迹传播到当前帧来。


Introduction

现有的MOT方法大多分为two-step和one-shot两种。two-step方法,也就是TBD(tracking-by-detection)范式,将MOT分解成目标检测和数据关联两个独立的子任务。虽然效果很好,但对每个bbox进行独立的外貌embedding的提取所带来的的计算量过于庞大。而one-shot方法则将两个任务的特征提取融合到了一个网络之中。通过共享特征和进行多任务学习,它们能够以准实时速度运行。作者发现,大多数已有的one-shot跟踪器都是以一个强大的完备的检测器为基础的,换句话说,在ReID任务看来,会假定所以的目标都被检测器正确检测到。然而,真实场景中有很多困难,使得这个假设是不太可能的,如图。

红色框圈出的目标,在一些帧中,因为遮挡或者其他原因,被分为前景的概率较小,所以并没有被检测器检测到,所以会造成轨迹的中断。而检测器检测不到这些目标,因为其仅仅采用了当前帧那一帧的信息,这样是远远不够的。作者通过时序信息,对检测器错误分类的目标其周围的环境信息进行检查,来恢复那些没有找到的目标。和之前的某些方法直接采用前一阵的特征来丰富当前帧的特征的操作不同,re-check网络其实是将前一阵的目标转移到当前帧来,弥补被误分类的目标,类似于一个预测模型。re-check通过前一帧目标的位置,检查其在当前帧位置附近的环境信息,来生成一个候选框。如果候选框并不在当前帧的检测结果中,那么便可以认为它是被当前帧的检测器误分类的目标,便可以将其加入到最终的结果中。


Methodology


上图是方法的整体结构,在JDE范式的跟踪器之后添加了一个模块,灰框中可以改用其他JDE范式的算法,作者在文中采用的是CSTrack。

Overview

输入当前帧xxx,通过特征提取器(backbone和neck)得到特征图Ft\boldsymbol{F}_{t}Ft
Ft=Ψ(x)\boldsymbol{F}_{t}=\Psi(\boldsymbol{x}) Ft=Ψ(x)之后,Ft\boldsymbol{F}_{t}Ft再通过网络的head得到检测结果和外貌embedding:[Rtde,Ftid]=Φ(Ft)\left[\boldsymbol{R}_{t}^{d e}, \boldsymbol{F}_{t}^{i d}\right]=\Phi\left(\boldsymbol{F}_{t}\right) [Rtde,Ftid]=Φ(Ft)Rtde\boldsymbol{R}_{t}^{d e}Rtde是检测结果,其中包括前景概率Ptde∈RH×W×1\boldsymbol{P}_{t}^{d e} \in \mathbb{R}^{H \times W \times 1}PtdeRH×W×1和bbox结果Btde∈RH×W×4\boldsymbol{B}_{t}^{d e} \in \mathbb{R}^{H \times W \times 4}BtdeRH×W×4Ftid∈RH×W×C\boldsymbol{F}_{t}^{i d} \in \mathbb{R}^{H \times W \times C}FtidRH×W×C(C=512)为ID embedding。检测结果Rtde\boldsymbol{R}_{t}^{d e}Rtde通过greedy-NMS得到当前帧检测器最终的结果Dbase \boldsymbol{D}_{\text {base }}DbaseDbase \boldsymbol{D}_{\text {base }}Dbase中的每一个检测结果,对应着Ftid\boldsymbol{F}_{t}^{i d}Ftid中的一个1×1×C1 \times 1 \times C1×1×C的embedding。假设Etid\boldsymbol{E}_{t}^{i d}EtidDbase \boldsymbol{D}_{\text {base }}Dbase中检测结果的embedding的集合,在先前的one-shot方法中,Dbase \boldsymbol{D}_{\text {base }}DbaseEtid\boldsymbol{E}_{t}^{i d}Etid会用来进行数据关联,通过匈牙利算法,和之前的轨迹进行连接。
CSTrack通过加入互注意力机制来缓解检测任务和ReID任务之间的竞争,以极小的代价提升了JDE,所以作者采用CSTrack作为baseline。
SiamMOT: 作者将提出的方法命名为SiamMOT,设计了一个re-check网络来修复被检测器误分为背景的目标。

如上图所示,上一帧的embeddingEt−1id\boldsymbol{E}_{t-1}^{i d}Et1id被用来作为这一帧的时序信息。网络通过计算Etid\boldsymbol{E}_{t}^{i d}EtidFtid\boldsymbol{F}_{t}^{i d}Ftid之间的相似度,将轨迹沿伸到当前帧来。作者通过实验还发现,如果一个目标在当前帧消失了,那么在相似度图中便对应着FP的反应。为了缓解这个问题,作者又将相似度图与当前帧特征Ft\boldsymbol{F}_{t}Ft进行融合,来进行微调。最终,re-check网络可以表示为:Mp=Π(Ftid,Et−1id,Ft)\boldsymbol{M}_{p}=\Pi\left(\boldsymbol{F}_{t}^{i d}, \boldsymbol{E}_{t-1}^{i d}, \boldsymbol{F}_{t}\right) Mp=Π(Ftid,Et1id,Ft)其中,Mp\boldsymbol{M}_{p}Mp代表着先前的轨迹在当前帧预测的结果,输出的是分类为前景的概率。
然后将Mp\boldsymbol{M}_{p}Mp和原本的当前帧的bbox结果Btde\boldsymbol{B}_{t}^{d e}Btde一起进行greedy-NMS。这次NMS的结果记为Dtrans \boldsymbol{D}_{\text {trans }}DtransDtrans \boldsymbol{D}_{\text {trans }}DtransDbase \boldsymbol{D}_{\text {base }}Dbase通过相互之间的IoU进行融合,最后得到Dfinal\boldsymbol{D}_{\text {final}}DfinalDfinal\boldsymbol{D}_{\text {final}}Dfinal和其在Ftid\boldsymbol{F}_{t}^{i d}Ftid中对应的embedding用于数据关联。

Re-check Network

re-check网络分为两个子模块:沿伸检测模块(the transductive detection module)用于轨迹传播和精修模块(the refinement module)。
Transductive Detection Module: 此模块的目的是通过前一帧embeddingEt−1id={et−11,⋯,et−1n}\boldsymbol{E}_{t-1}^{i d}=\left\{\boldsymbol{e}_{t-1}^{1}, \cdots, \boldsymbol{e}_{t-1}^{n}\right\}Et1id={et11,,et1n}和当前帧候选embedding之间的相似度,来预测之前轨迹在当前帧的位置。响应图mim_imi的计算方式是:mi=(et−1i∗Ftid)∣i=1n\boldsymbol{m}_{i}=\left.\left(\boldsymbol{e}_{t-1}^{i} * \boldsymbol{F}_{t}^{i d}\right)\right|_{i=1} ^{n} mi=(et1iFtid)i=1nmim_imi中的最大值便代表之前轨迹在当前帧的位置。nnn为上一帧embedding的个数,所以最终会得到nnn张响应图,M={m1,⋯,mn}\boldsymbol{M}=\left\{\boldsymbol{m}_{1}, \cdots, \boldsymbol{m}_{n}\right\}M={m1,,mn}。将响应图mim_imi转换成二元的mask,将高反应区域设为1,其余位置均是0。这样会减少其他模糊的容易混淆的预测:m^ixy={1if ∥x−cx∥≤r,∥y−cy∥≤r0otherwise \hat{\boldsymbol{m}}_{i}^{x y}=\left\{\begin{array}{ll} 1 & \text { if }\left\|x-c_{x}\right\| \leq r,\left\|y-c_{y}\right\| \leq r \\ 0 & \text { otherwise } \end{array}\right. m^ixy={10ifxcxr,ycyrotherwisecxc_xcxcyc_ycymim_imi中最大值的坐标,rrr为设置的范围。再将得到的m^i\hat{\boldsymbol{m}}_{i}m^i和原始的mi\boldsymbol{m}_{i}mi相乘,得到最终的响应图:Ms=∑i=1n(m^i⋅mi)\boldsymbol{M}_{s}=\sum_{i=1}^{n}\left(\hat{\boldsymbol{m}}_{i} \cdot \boldsymbol{m}_{i}\right) Ms=i=1n(m^imi)Ms\boldsymbol{M}_{s}Ms代表着当前帧各位置上存在上一帧轨迹的概率。如果Ms\boldsymbol{M}_{s}Ms中的某个位置值很大,说明此处有一个候选框可以连接到轨迹上。
Refinement Module: 作者观察到没有出现在当前帧的那些目标在tracklet transduction模块中会带来一些假阳性样本,为了缓解这个问题,所以作者设计了refinement模块,采用原始的特征Ft∈RH×W×C(C=256)\boldsymbol{F}_{t} \in \mathbb{R}^{H \times W \times C}(\mathrm{C}=256)FtRH×W×C(C=256)来对响应图Ms\boldsymbol{M}_{s}Ms进行微调。首先,将Ms\boldsymbol{M}_{s}Ms放入一个反向bottleneck模块,将Ms\boldsymbol{M}_{s}Ms映射到高维空间,再降为到原本的维度,得到Ms′∈RH×W×1\boldsymbol{M}_{s}^{\prime} \in \mathbb{R}^{H \times W \times 1}MsRH×W×1,然后与当前帧的特征进行融合:F^=Ft⋅Ms′\hat{\boldsymbol{F}}=\boldsymbol{F}_{t} \cdot \boldsymbol{M}_{s}^{\prime} F^=FtMs再通过几层卷积,将F^\hat{\boldsymbol{F}}F^转换为最终的Mp\boldsymbol{M}_{p}Mp
Optimization: 响应图Mp\boldsymbol{M}_{p}Mp的gt定义为多个高斯分布的组合。对于每个目标来说,ti=exp⁡(−(x−cix)2+(y−ciy)22σi2)\boldsymbol{t}_{i}=\exp \left(-\frac{\left(x-c_{i}^{x}\right)^{2}+\left(y-c_{i}^{y}\right)^{2}}{2 \sigma_{i}^{2}}\right) ti=exp(2σi2(xcix)2+(yciy)2)其中,ci=(cix,ciy)c_{i}=\left(c_{i}^{x}, c_{i}^{y}\right)ci=(cix,ciy)为目标的中心点坐标,σi\sigma_{i}σi和目标大小有关。然后可以得到和目标数量相同的gt,t={t1,…,tn}\boldsymbol{t}=\left\{\boldsymbol{t}_{1}, \ldots, \boldsymbol{t}_{n}\right\}t={t1,,tn}。最终,将t\boldsymbol{t}t沿着通道维度进行相加,得到最终的T\boldsymbol{T}T。为了减小两个高斯分布之间重叠部分的影响,σi\sigma_{i}σi的上限设为1。最终采用Logistic−MSE损失监督训练:Lg=−1n∑xy{(1−Mpxy)log⁡(Mpxy),if Txy=1(1−Txy)Mpxylog⁡(1−Mpxy),else \mathcal{L}_{g}=-\frac{1}{n} \sum_{x y}\left\{\begin{array}{l} \left(1-\boldsymbol{M}_{p}^{x y}\right) \log \left(\boldsymbol{M}_{p}^{x y}\right), \quad \text { if } \boldsymbol{T}^{x y}=1 \\ \left(1-\boldsymbol{T}^{x y}\right) \boldsymbol{M}_{p}^{x y} \log \left(1-\boldsymbol{M}_{p}^{x y}\right), \text { else } \end{array}\right. Lg=n1xy{(1Mpxy)log(Mpxy),ifTxy=1(1Txy)Mpxylog(1Mpxy),else

Fusing Basic and Transductive Detections

这一部分介绍了Dtrans \boldsymbol{D}_{\text {trans }}DtransDbase \boldsymbol{D}_{\text {base }}Dbase进行融合的过程。首先,对Dtrans \boldsymbol{D}_{\text {trans }}Dtrans中的每一个bbox,bi\boldsymbol{b}_{i}bi,计算一个得分ssss=1−max⁡(IOU⁡(bi,Dbase ))s=1-\max \left(\operatorname{IOU}\left(\boldsymbol{b}_{i}, \boldsymbol{D}_{\text {base }}\right)\right) s=1max(IOU(bi,Dbase))sss越高说明bi\boldsymbol{b}_{i}bi没有出现在Dbase \boldsymbol{D}_{\text {base }}Dbase中(阈值设为0.5),可能是当前帧的检测器将其误分类为背景。算法流程也较为简单,如下:


Experiments

boundaryaware regression

在之前的方法中,网络预测的是anchor的中心点(ax,ay)\left(a_{x}, a_{y}\right)(ax,ay)到bbox中心点(bx,by)\left(b_{x}, b_{y}\right)(bx,by)之间的归一化的偏移量:Δ=b−a=Sigmoid⁡(r)\boldsymbol{\Delta}=\boldsymbol{b}-\boldsymbol{a}=\operatorname{Sigmoid}(\boldsymbol{r}) Δ=ba=Sigmoid(r)然而,在下图中,绿色框的中心点在图像的外面,而由于sigmoid函数的限制,网络预测的偏移量生成的bbox很难覆盖整个目标。当目标只是部分可见时,bbox的预测也是不完全的,那么由于gt的bbox和预测的不完全的bbox差别很大,所以会被认定为假阳性样本。

为了缓解这个问题,作者提出了boundaryaware regression方法(BAR)。让模型预测:Δ=b−a=(Sigmoid⁡(r)−0.5)×h\boldsymbol{\Delta}=\boldsymbol{b}-\boldsymbol{a}=(\operatorname{Sigmoid}(\boldsymbol{r})-0.5) \times h Δ=ba=(Sigmoid(r)0.5)×h其中的hhh也是一个可学习的参数。这使得网络预测的偏移量能够大于1,使得预测的bbox覆盖得更多

实验结果


上表是消融实验,可以看出re-check网络对baseline的提升效果比较大,BAR模块也可以在re-check模块的基础上再次提高方法的效果。

上表是本文方法和其他方法之间的对比实验,可以看出,SiamMOT达到了sota的水平,比baseline(CSTrack)在MOT16和MOT17上均高了6%左右,涨点明显。

CSTrackV2(SiamTracker):One More Check:Making “Fake Background” Be Tracked Again相关推荐

  1. 项目场景: gyp verb check python checking for Python executable python2 in the PATH

    项目场景: gyp verb check python checking for Python executable "python2" in the PATH 环境 ​ node ...

  2. 解决git拉取代码时报:Auto packing the repository in background for optimum performance

    问题:git本地仓库,如果长时间不进行清理,拉取代码的时候突然提示: Auto packing the repository in background for optimum performance ...

  3. IDEA插件问题备忘录:有关The Doki Theme和Background Image Plus 的问题

    IDEA插件问题备忘录:有关The Doki Theme和Background Image Plus 的问题 0.idea版本信息 1.两个插件同时使用会报错!!!!!! 2.期待有大佬能解决这个问题 ...

  4. md5withrsa java_浏览器运行java插件报错:Algorithm constraints check failed: MD5withRSA

    今天使用kvm管理机房机器的时候发现一只连不上,报以下错误: sun.security.validator.ValidatorException: PKIX path validation faile ...

  5. 报错:Unable to check if JNs are ready for formatting

    完整报错信息: WARN namenode.NameNode: Encountered exception during format: org.apache.hadoop.hdfs.qjournal ...

  6. Zoom Out and Observe:News Environment Perception for Fake News Detection

    Zoom Out and Observe: News Environment Perception for Fake News Detection 摘要 现有方法进行谣言检测利用新闻帖子的语言模式,聚 ...

  7. 论文阅读笔记:Towards Fine-Grained Reasoning for Fake News Detection

    Towards Fine-Grained Reasoning for Fake News Detection author={Jin, Yiqiao and Wang, Xiting and Yang ...

  8. vue使用elementUI报错:custom validator check failed for prop “index“

    在elementUI中使用el-menu-item时,给index绑定index的值时,报错custom validator check failed for prop "index&quo ...

  9. oracle select with read only,oracle创建视图的一些总结:包括with check option和with read only...

    oracle创建视图的一些总结: create [or replace][force | noforce] view [user.] viewName (column [,column2]...) a ...

最新文章

  1. 2017国二java题库,2017全国计算机二级考试JAVA考试题库
  2. python 科学计算基础教程电子版-自学Python 编程基础、科学计算及数据分析
  3. 黄聪:buffer overflow detected问题解决及gcc-4.1安装
  4. access超过255列数据_Access的数据类型,与Excel虽类似,数据库+sql更适合大量数据管理...
  5. css3动画--位移加阴影
  6. ionic移动开发流程api
  7. DCOS实践分享(6):基于DCOS的大数据应用分享
  8. [css] 请描述css的权重计算规则
  9. Spring Boot文档阅读笔记-Creating Asynchronous Methods解析
  10. pythonATM,购物车项目实战_补充1-结构图
  11. Windows下 Jenkins 下载、安装
  12. NPOI导出Excel自适应行高
  13. pythonarray去除inf_Python中的inf与nan
  14. Python中路径的写法
  15. 大数据热的冷思考:无法取代传统的新闻传播科研方法
  16. Android记账系统可行性分析,毕业设计论文-基于安卓的大学生记账管理系统的设计与实现.doc...
  17. flink中的时间属性
  18. matlab的mex安装,matlab安装使用mex
  19. 基础运放电路-含波形图分析-运算放大器
  20. ansoft:Com Engine non-responsive since

热门文章

  1. android MediaPlayer架构
  2. java微信开发教程
  3. 【Week9作业 B】东东学打牌【模拟】
  4. host ntrip 千寻rtk_「图文教程」千寻RTK连接千寻cors账号的操作步骤
  5. C#实现SQL数据库备份与恢复
  6. pip安装软件时:raise ReadTimeoutError(self._pool, None, ‘Read timed out.‘) pip._vendor.urllib3.exceptions.
  7. 微信聊天内容可以被监听吗?
  8. 如何将自己chrome中的拓展程序分享给别人
  9. 什么是任务,微任务和宏任务?
  10. 自带多平台解析接口短视频去水印图集水印微信小程序源码下载支持多流量主