DaSiamRPN、SiamRPN++论文阅读


前言

  本文分析下近几年比较火的几篇基于anchor的目标跟踪论文:Siam系列,其中包括SiamRPN、DaSiamRPN、SiamRPN++,SiamRPN分析请翻看我之间的文章有详解,后面的分析仅代表个人理解。
  SiamRPN论文链接
  DaSiamRPN论文链接
  SiamRPN++论文链接


1、DaSiamRPN

  在这之前孪生网络跟踪算法的问题有如下

  1. 特征提取网络提取的特征只能区分前景和非语意背景,这里解释下非语义背景,可以理解为不含有用信息的背景,比如一张图像上有二人个(A、B)和一辆汽车C,跟踪的对象是A,前景就是A,B和C就是包含具体语义背景。当图像存在类间干扰B时跟踪器很容易发生偏移。
  2. 训练数据集的物体类别较少,不足以训练具有泛化能力的特征表达,SiamRPN使用vid(20 classes)和ytbb(30 classes)两个训练集,极端情况下,跟踪器漂移到汽车C处。
  3. 大部分跟踪器都是短期跟踪,短期跟踪从另一种角度讲是跟踪过程中,目标总是出现。

  针对这三个问题,一一来看下DaSiamRPN是如何解决的

  1. 提取的特征只能区分前景和非语言背景的原因是:训练时语义背景和非语义背景样本极度不平衡,大多数anchor是非语义的,如下图所示,图像中红色是非语义背景,绿色是语义背景,可以看到样本多不平衡增加具有语义背景的训练样本。在这里插入图片描述所以,DaSiamRPN在训练过程中增加含有语义背景的训练样本,增加的训练样本有两类,类间语义背景和异类语义背景,如论文Fig.2。在这里插入图片描述

  2. 为了解决训练数据集类别少的问题,DaSiamRPN引入了两个新的数据集,coco和det,极大地扩展了正样本对的类别,如下图,这些类别在实际应用中,几乎不现实,但使用它们来训练网络可以有效增强特征表达的泛化能力。并且通过对数据集增强技术(平移、旋转、运动模糊等),可以使用检测数据集静止的图像生成跟踪领域动态的图像。在这里插入图片描述通过1、2两部的训练策略,模型的泛化能力已经够好了,能够排除一定的类间干扰,但是对一些及其相似的物体(类似下图情况),仍然很难区分。在这里插入图片描述所以DaSiamRPN提出了一种感知干扰物增量学习(Distractor-aware Incremental Learning),可以有效地将泛化的特征表示转移到某特征视频领域,而不仅仅使用以往Siam跟踪器的度量方式。先回顾下以往的度量方式,表达式如下,简单使用互相关来度量相似度,顺便再贴张SiamRPN的图方便分析。在这里插入图片描述在这里插入图片描述如论文所述,先使用NMS策略得到一些不重叠的proposals(proposals必定也存在待跟踪目标),当图像中出现相似物体时,这些proposals必定存在干扰物体,然后选择n个大于给定阈值的干扰proposals,这个阈值是根据相关值得来的在这里插入图片描述函数f(z,di)表示z与di的互相关,zt是第t帧选择的目标,第1帧的话它就是groundtruth,最后,得到了n个proposals。
      接着使用distractor-aware objective function对这k个相似性最大的proposals重新排序在这里插入图片描述
    最终选择的对象标记为q,这个公式可以看出,当它取最大值时,也就是目标与某个proposal的相似值减去某个proposal与干扰物的相似值的值最大,即前者尽可能大,后者尽可能小。
      但是上式的计算复杂度和内存使用量增加了n倍,由于互相关是线性因子,所以作者使用结合律减小计算量
    在这里插入图片描述
    有了这种策略,就可以在每一帧跟踪时学习一个增量,下一帧跟踪时就可以利用前一帧的增量信息来找到准确目标,如下式,同时考虑了T帧的增量信息,类似于常用的模板更新策略。在这里插入图片描述

  3. DaSiamRPN提出了一种长期跟踪策略,这种策略比较简单,但也是得益于DaSiamRPN才能实现,当跟踪失败时,加大搜索图像区域即可。重点在于,如何判断失败,我们人当然肉眼可见,但跟踪器如何得知呢?SiamRPN就无法使用该策略,因为在跟踪过程中,一直选择相似值最大的proposal作为跟踪,即使在视野消失的情况下,这个值仍然会很高,也就是说,SiamRPN的特征表示不具有指向性,简而言之,就是跟踪器在跟踪某物体时并不知道它是什么。而DaSiamRPN由于训练和测试的一系列优化,提取的特征具有指向性,比如要跟踪的目标是人,那么他就不会漂移到其他类别位置上去。

2、SiamRPN++

  SiamRPN++的分析流程是提出问题——>解决
问题
  之前Siamese跟踪器都是利用AlexNet等较为浅层的网络来提取特征,在使用深层网络,如resnet等时,性能反而下降。论文给出了造成性能下降的原因是深层网络不具备空间平移不变性,而且跟踪任务不同于分类,浅层特征有助于目标的精确定位而不仅仅使用深层语义特征取识别。
  造成深层网络平移不变性的主要因素是卷积过程中padding的影响,平移不变性可以这么理解: 原 始 图 像 中 目 标 相 对 于 图 像 中 心 的 位 移 ∗ 网 络 步 距 = 特 征 图 中 目 标 相 对 于 特 征 图 中 心 的 位 置 原始图像中目标相对于图像中心的位移*网络步距=特征图中目标相对于特征图中心的位置 =而包含padding操作的卷积+池化下采样的组合会破坏这种性质,padding会在特征图上引入其他信息(0填充引入的值为0),当这些信息大于附近的像素时,那么最大池化下采样之后的网络传播将会使用padding的信息,而不是原图有用的信息,这样就会造成最终得到的特征图边缘可能出现大量0的值。论文对该问题基于了证明,证明结果如下所示:在这里插入图片描述直接看左侧图就行,可以看到左侧很大一部分的信息都是填充的无用信息。
解决

  1. 提出了一个简单而有效的采样方式,打破了深度网络深层的空间限制。如上图所示,只是在训练过程中简单对目标进行随机的位移,达到收敛后,测试出来的效果就很好。中间图的随机位移范围(Rand Shift Range)是-64~16,右侧图是-32 ~32,可以从图中直观看到这种方式的有效性,那么理论上该如何解释呢?SiamRPN++在训练过程中使用这些策略,使得目标的位置不在图像中心,那么达到收敛后模型就会对padding具有很大的鲁棒性,因为从本质上讲,padding操作也会使目标发生位移。在进行了一系列范围取值后在VOT2018数据集上实验,如下,最终SiamRPN++选择的shift范围是(-64,64)在这里插入图片描述

  2. 有了上述简单而有效的策略,就可以使用resnet50等深层网络结构作为特征提取了,并且在从基础上,SiamRPN++提出了一种特征整合结构给互相关操作,这样可以丰富相似度度量的特征使用量,而且在理论上,resnet50使用这种整合策略比浅层网络更有效,因为resnet50整合的不同层信息的感受野差变化很大,换句话讲,不同层的特征信息差异更大、更丰富。接下来结合论文给的框架图和代码进行分析在这里插入图片描述从图中,可以看出融合了3层的特征,具体输出形式如代码中注释

        def forward(self, template, detection):
            zf = self.features(template)  #[8,512,15,15] [8,1024,15,15] [8,2048,15,15]
            xf = self.features(detection) #[8,512,31,31] [8,1024,31,31] [8,2048,31,31]
            zf = self.neck(zf) #3个[8,256,7,7]
            xf = self.neck(xf) #3个[8,256,31,31]
            cls, loc = self.head(zf, xf) #[8,10,25,25]   [8,20,25,25]
    

    这里仅看self.features即可,可以看到输出了3个大小相同的feature map,然后将它们融合,具体的融合公式如下:在这里插入图片描述其中 β \beta β α \alpha α是融合权重,个数图融合层数一致,为3,直接嵌入网络中在训练时学习。S和B是分类回归和边界框回归,即在这里插入图片描述而不是feature map,融合的对象是不同层feature map得到的B和S。

  3. SiamRPN++还提出了Depth-Wise的分组相关操作,该相关操作提出的原因在于SiamRPN上下通道的参数不平衡,上通道参数太多导致训练学习困难,论文给出了SiamRPN参数量上下通道的参数量在这里插入图片描述为了克服这个缺陷,Depth-Wise分组相关操作由此提出。下面以代码的形式讲解SiamFC、SiamRPN、SiamRPN++所使用的互相关。

    #  from pysot : https://github.com/STVIR/pysot
    def xcorr_fast_siamfc(x, kernel):
    #x.shape=(8,256,22,22) kernel.shape=(8,256,6,6)
        """group conv2d to calculate cross correlation, fast version
        """
        batch = kernel.size()[0] #6
        pk = kernel.view(-1, x.size()[1], kernel.size()[2], kernel.size()[3]) #(8,256,6,6)
        px = x.view(1, -1, x.size()[2], x.size()[3]) #(1,256*8,22,22)
        po = F.conv2d(px, pk, groups=batch) #(1,8,17,17)
        po = po.view(batch, -1, po.size()[2], po.size()[3]) #(8,1,17,17)
        return po
    def xcorr_fast_siamrpn(x, kernel):
    #x.shape=(8,256,20,20) kernel.shape=(8,256*2k,4,4) 对应*4k回归类似分析
        """group conv2d to calculate cross correlation, fast version
        """
        batch = kernel.size()[0] #8
        pk = kernel.view(-1, x.size()[1], kernel.size()[2], kernel.size()[3]) #(8*2k,256,4,4)
        px = x.view(1, -1, x.size()[2], x.size()[3]) #(1,256*8,20,20)
        po = F.conv2d(px, pk, groups=batch) #(1,8*2k,17,17)
        po = po.view(batch, -1, po.size()[2], po.size()[3]) #(8,2k,17,17)
        return po
    def xcorr_depthwise(x, kernel):
    #x.shape=(8,256,31,31) kernel.shape=(8,256,7,7)
        """depthwise cross correlation
        """
        batch = kernel.size(0) #8
        channel = kernel.size(1) #256
        x = x.view(1, batch*channel, x.size(2), x.size(3)) #(1,8*256,31,31)
        kernel = kernel.view(batch*channel, 1, kernel.size(2), kernel.size(3)) #(8*256,1,7,7)
        out = F.conv2d(x, kernel, groups=batch*channel) #(1,8*256,25,25)
        out = out.view(batch, channel, out.size(2), out.size(3)) #(8,256,25,25)
        return out
    

    SiamRPN与SiamFC的相关操作其实是一样的,只不过SiamRPN相关kernel的通道数更多,代码假设进入相关之前就已经增加了通道数,注释中给出了明确的推导过程,depthwise最后的结果是(8,256,25,25),然后在经过网络层的调整之后变为(8,10,25,25),就是论文所要得到的分类feature map。最后,对两者作一个直观的对比验证。

    if __name__ == '__main__':
        z = torch.randn([8,256,6,6])
        x = torch.randn([8,256,22,22])
        out = xcorr_fast(x,z) #(8,1,17,17)
        out_depthwise = xcorr_depthwise(x,z) #(8,256,17,17)
    

  最后,再来看一下SiamRPN++的实验结果分析在这里插入图片描述  Finetune表示是否采用离线训练的方法,采用DepthWise性能提升有:VOT2018 0.414-0.390=2.4% ;OTB2015 0.696-0.684=0.8%。

猜你喜欢

转载自blog.csdn.net/qq_41831753/article/details/113973427
今日推荐