D&T(Detect to Track and Track to Detect)论文详读

abstract

        近些年,视频目标分类与检测领域为了达到更高的准确率,不断融合各种复杂的处理方式,最终的网络结构也变得越来越复杂。本文提出一个名为ConvNet的结构,该结构比较简洁,且可以有效的进行目标跟踪和分类。

本文的contribute:

  1. ConvNet可以同时进行目标分类和跟踪,使用多任务目标进行基于帧的目标检测和帧间轨迹回归;
  2. 引入correlation feature(关系特征),表示跨时间共存的object,在跟踪过程中辅助ConvNet;
  3. 引入基于跨帧tracklets(跟踪片)的帧级检测方法,来提高检测的准确率。

introduce

        近些年的目标检测方法因为包含大量卷积网络,导致结构非常臃肿。

        对于目标检测和跟踪,通常是把目标检测作为第一步,作为跟踪器的后处理方法接收检测分数进行下一步处理。那些“基于检测的跟踪方法”的变形方法虽然处理效果也不错,但是还是不如基于帧级特征的检测方法。

与静态图像中的目标检测不同,视频目标检测有着特殊的困难:

  1. 数量:视频能提供的绝对意义上的帧数量巨大(VID数据集大约130万张图像,DET数据集大约40万张图像,COCO数据集大约10万张图像);
  2. 动作模糊:因为目标运动或相机剧烈移动导致的动作模糊;
  3. 图像质量:大部分视频片的质量不如静态图像;
  4. 目标不完整(partial occlusion):因为目标或拍摄者移动导致;
  5. 姿势:视频中,目标经常会出现一些不常见的姿势。

        为了解决这个问题,本文提出了ConvNet结构——在R-FCN检测器的基础上添加一个跟踪器。基于检测和跟踪损失对全卷积网络进行端到端的训练,最终得到一个可以处理跟踪和检测的方法——D&T。

        输入帧首先通过卷积网络的主干(如ResNet-101网络)进行处理,得到用于检测和跟踪的卷积特征;然后计算邻近帧的相关卷积特征来估计目标对象在不同帧的位移;然后使用ROI池化层对这些特征进行分类和回归,使用ROI跟踪层把回归框在帧间进行变换(平移、缩放等);最后为了推断视频中目标的运动轨迹,把检测结果进行链接。

        实验表明,在D&T中添加跟踪损失(track loss)可以使静态图像学习进行更好的特征学习;在输入帧中添加时间间隔可以使得处理速度提高。

D&T方法的实现细节

在这里插入图片描述
在这里插入图片描述
D&T方法的处理步骤:

  1. 对于输入的两个连续帧,使用卷积网络(如ResNet-101)分别进行计算,得到两个卷积特征图,这两个特征图将会在检测和跟踪过程中使用;
  2. 使用RPN网络对两个特征图分别进行处理,得到ROI(region-of-interest);
  3. ROI池化层的输入来自ResNet的最后一个卷积层,该卷积层最终得到一组位置敏感分数 D c l s = K 2 ( C + 1 ) D_{cls} = K^2(C+1) Dcls=K2(C+1),在该卷积层后应用一个滑动卷积层,然后通过ROI池化层进行池化操作,得到类别未知的边框信息 b = ( b x , b y , b w , b h ) b=(b_x,b_y,b_w,b_h) b=(bx,by,bw,bh),在ROI池化层的输出上应用softmax函数,得到最终的检测结果;
  4. 把两个特征图进行correlation,然后作为ROI track的输入,ROI track最终输出目标物体在两帧间的运动轨迹。

        总的来说,RPN的输入是特征图,输出ROI;ROI池化层的输入来自ResNet最后一层卷积得到的位置敏感分数,得到对应的类别信息,ROI池化层输入滑动卷积层得到的map,输出类别未知的边框信息,ROI池化处理后的结果经过softmax函数进行处理,得到类别检测结果;ROI track的输入是ROI、两个特征图的关联结果,输出连续两帧之间目标物体的移动轨迹(也就是连续视频帧之间目标物体坐标位置的偏差值)。

R-FCN的实现细节

t t t 时刻的帧 I t ∈ R H 0 × W 0 × 3 I_t \in R^{H_0×W_0×3} ItRH0×W0×3 作为输入,通过ConvNet得到特征图 x l t ∈ R H l × W l × D l x^t_l \in R^{H_l×W_l×D_l} xltRHl×Wl×Dl其中 H l 、 W l 、 D l H_l、W_l、D_l HlWlDl分别为高、宽和通道数, l l l为层数。R-FCN中,把最后一个卷积层的effective stride(有效步长)由32减少为16(通过把conv5 的步长设置为1实现),同时通过膨胀学习增加了R-FCN的接收域。

R-FCN的实现主要包含两步——首先是使用RPN得到ROI(region of interest);然后使用一个位置敏感的ROI池化层将region进行分类,区分出具体的类别和背景。

ROI池化层的输入来自ResNet的最后一个卷积层。该卷积层层最终得到一组位置敏感分数 D c l s = K 2 ( C + 1 ) D_{cls} = K^2(C+1) Dcls=K2(C+1),对应描述相对位置的 k × k k×k k×k个网格,用于对每个类别C和背景进行ROI池化操作。然后在ROI池化层的输出结果上应用softmax函数,对每个ROI分别得到一个关于C+1类的概率分布p。

在ResNet最后一个卷积层之后应用一个滑动卷积层(输出为 x r e g t x^t_{reg} xregt)进行边框回归,在 D c l s = 4 k 2 D_{cls}=4k^2 Dcls=4k2个map上使用位置敏感的ROI池化层进行处理,得到类别未知的边框信息 b = ( b x , b y , b w , b h ) b=(b_x,b_y,b_w,b_h) b=(bx,by,bw,bh)

多任务检测和目标跟踪

        为了实现回归器,在Fast R-CNN的基础上拓展了一个多任务损失,其中包含一个联合分类损失 L c l s L_{cls} Lcls、一个联合回归损失 L r e g L_{reg} Lreg、记录两帧之间的轨迹的 L t r a L_{tra} Ltra。对于批量大小为N个ROI的一次迭代,网络预测的softmax概率为 { P i } i = 1 N \{ P_i \}^N_{i=1} { Pi}i=1N,回归偏差为 { b i } i = 1 N \{b_i\}^N_{i=1} { bi}i=1N,帧间的ROI-track为 { △ i t + τ } i = 1 N t r a \{\triangle^{t+\tau}_i \}^{N_{tra}}_{i=1} { it+τ}i=1Ntra,每个ROI的ground-truth的类别标签定义为 c i ∗ c^*_i ci,预测得到的softmax的分数为 P i , c ∗ P_{i,c^*} Pi,c,ground-truth的回归目标为 b i ∗ b^*_i bi,track 回归目标为 △ i ∗ , t + τ \triangle^{*,t+\tau}_i i,t+τ,指示函数 c i ∗ > 0 c^*_i>0 ci>0对于前景ROI为1,对于背景ROI为0, L c l s ( P i , c ∗ ) = − l o g ( P i , c ∗ ) L_{cls}(P_{i,c^*})=-log(P_{i,c^*}) Lcls(Pi,c)=log(Pi,c)是边框分类的交叉熵损失, L r e g L_{reg} Lreg L t r a L_{tra} Ltra使用平滑的L1函数定义,其中 λ = 1 \lambda = 1 λ=1

在这里插入图片描述
        如果ROI中的IOU与ground-truth的重叠部分大于0.5,则对分类标签 c ∗ c^* c和回归目标 b ∗ b^* b进行赋值;如果ground-truth目标在两帧中均出现,则对跟踪目标 △ ∗ , t + τ \triangle^{*,t+\tau} ,t+τ进行赋值。N是一个训练批次中所有的边框, N f g N_{fg} Nfg是前景ROI的数量, N t r a N_{tra} Ntra是在两帧之间有轨迹联系的ground-truth ROI的数量。

        为了实现轨迹回归(track regression),使用R-CNN中的边界框回归参数变量,对于单个目标,其在t帧的groun-truth边框坐标为 B t + τ = ( B x t , B y t , B w t , B h t ) B^{t+\tau}=(B^t_x,B^t_y,B^t_w,B^t_h) Bt+τ=(Bxt,Byt,Bwt,Bht)(其中 ( B x t , B y t ) (B^t_x,B^t_y) (Bxt,Byt)为边框的中心坐标),从而得到目标的轨迹回归值 △ ∗ , t + τ = { △ x ∗ , t + τ , △ y ∗ , t + τ , △ w ∗ , t + τ , △ h ∗ , t + τ } \triangle^{*,t+\tau}=\{\triangle^{*,t+\tau}_x,\triangle^{*,t+\tau}_y, \triangle^{*,t+\tau}_w,\triangle^{*,t+\tau}_h\} ,t+τ={ x,t+τ,y,t+τ,w,t+τ,h,t+τ}:

在这里插入图片描述

目标跟踪使用的关联特征

        为了实现多目标同时跟踪,计算特征图所有位置的关联图(correlation map),为了实现track regression,在所有的特征图上进行ROI池化操作。

        考虑特征图中所有可能的循环变换会导致一个大的输出维度,同时会对过大的位移产生相应。因此对局部邻近帧的关联关系进行限制——correlation layer被用来在两个特征图 X l t 、 X l t + τ X^t_l、X^{t+\tau}_l XltXlt+τ进行point-wise特征对比:
在这里插入图片描述
        其中 − d < = p < = d -d<=p<=d d<=p<=d − d < = q < = d -d<=q<=d d<=q<=d为特征图在 ( i , j ) (i,j) (i,j)位置处正方形邻域内compare feature(比较特征)之间的偏移量,定义最大的位移为d,则correlation layer的输出为一个大小为 x c o r r ∈ R H l × W l × ( 2 d + 1 ) × ( 2 d + 1 ) x_{corr} \in R^{H_l×W_l×(2d+1)×(2d+1)} xcorrRHl×Wl×(2d+1)×(2d+1)

        上式可以看作是两个特征图在大小定义为d的正方形邻域内的correlation,为了得到该correlation,使用conv3、conv4、conv5进行计算(为了与conv4和conv5得到同样大小的分辨率,在conv3中使用的stride大小为2),详细计算情况如下:
在这里插入图片描述
        上图可以看出,输入帧(a)和(b)经过conv3、conv4、conv5计算得到的correlation map,特征图以数组的形式展现,中心的图的偏移量p和q设为0,而相邻的行和列则增加相应的p和q的值。可以看出飞机的是向右上方移动的,所以位于中心位置偏差为p=2,q=3的特征图有着strong response(图中红框内的特征图)
在这里插入图片描述

Linking tracklets to object tubes 将跟踪片与物体tubes进行连接(tracklet一般被翻译为“跟踪片”、“跟踪过程中的小片段”之类的意思)

        高准确率目标检测有一个缺点就是高分辨率的输入图像必须要进行处理,这使得网络结构每次迭代过程中可以处理的帧数数量有了限制(主要是因为GPU的硬件限制)。因此如何权衡检测准确率和每次迭代可以处理的帧数(也就是检测速度)非常重要。

        因为视频内含有大量的冗余信息且目标的移动通常都是平顺的,所以可以使用帧内的检测器来实时连接检测结果,并建立一个长期的对象通道(long-term object tube)。为此,采用一种动作定位的方法,将每帧检测结果和tube实时进行连接。

        对于某一帧在时刻 t t t 的检测结果为 D i t , c = { x i t , y i t , w i t , h i t , p i , c t } D^{t,c}_i=\{ x^t_i, y^t_i,w^t_i,h^t_i,p^t_{i,c} \} Dit,c={ xit,yit,wit,hit,pi,ct},其中 D i t , c D^{t,c}_i Dit,c为编号为i的边框,中心点为 ( x i t , y i t ) (x^t_i,y^t_i) (xit,yit),宽和高为 ( w i t , h i t ) (w^t_i, h^t_i) (wit,hit) p i , c t p^t_{i,c} pi,ct为类别c的softmax概率分布。与之类似的还有时刻 t t t 到时刻 t + τ t+\tau t+τ 的轨迹 T i t , t + τ = { x i t , y i t , w i t , h i t ; x i t + △ x t + τ , y i t + △ y t + τ , w i t + △ w t + τ , h i t + △ h t + τ } T^{t,t+\tau}_i=\{ x^t_i,y^t_i,w^t_i,h^t_i;x^t_i+\triangle^{t+\tau}_x,y^t_i+\triangle^{t+\tau}_y,w^t_i+\triangle^{t+\tau}_w,h^t_i+\triangle^{t+\tau}_h \} Tit,t+τ={ xit,yit,wit,hit;xit+xt+τ,yit+yt+τ,wit+wt+τ,hit+ht+τ},从而可以结合检测和跟踪结果来定义一个类别的连接分数:

在这里插入图片描述
        如果检测边框 D i t D^t_i Dit D i t + τ D^{t+\tau}_i Dit+τ T t , t + τ T^{t,t+\tau} Tt,t+τ之间的IoU值大于0.5,则 ψ \psi ψ的值为1否则为0。这一点非常重要,因为这样的话轨迹回归器(track regressor)的结果不需要额外与边框回归器(box regressor)的结果进行对比和匹配。

        然后,可以通过最大化视频持续时间 T \Tau T内的分数找到帧间的最优路径:
在这里插入图片描述

        因为该等式使用了Viterbi algorithm(维特比算法),所以效率有所下降。一旦最佳tube D ˉ c ∗ \bar{D}^*_c Dˉc被发现,对于该tube的检测结果被从region集合内删除,然后上述等式被应用在剩余的region上。

        在发现了特定类别对应的 D ˉ c \bar{D}_c Dˉc后,使用最高检测分数的 α = 50 \alpha =50% α=50对所有的检测分数进行重新赋值——因为发现整体的性能表现对该参数具有很大的鲁棒性(当 α \alpha α的值在10%到100%内浮动时,性能的变化区间低于0.5%)。

        对检测分数进行重新赋值主要是为了增加那些因为检测器失误而被排除在检测结果外的positive 边框的分数,从而提高跟踪器的鲁棒性。该想法受Canny边缘检测器中滞后跟踪(hysteresis track)方法的启发。

猜你喜欢

转载自blog.csdn.net/weixin_41963310/article/details/114534153