目标跟踪中cross correlation时间复杂度小结

naive correlation

对于卷积操作有局部关联性和平移不变性
SiamFC,直接就是模板特征作为核去和搜索帧特征互相关,实现上就是一个卷积操作,示意图可看下面:

在这里插入图片描述
就是模板帧特征在搜索帧特征上滑动,逐通道之间互相作内积,最后输出的就是一个通道数为1的特征。
比如说input=6x6,in_channels=3,out_channels=4,kernel_size=3,那么需要用4组3x3x3的卷积,每个3x3x3的卷积计算结果为1x4x4,总共结果为4x4x4;(计算卷积次数为3x4次)
在这里插入图片描述

def naive_xcorr(self, z, x):
        # naive cross correlation
        nz = z.size(0)
        nx, c, h, w = x.size()
        x = x.view(-1, nz * c, h, w)
        out = F.conv2d(x, z, groups=nz)
        out = out.view(nx, -1, out.size(-2), out.size(-1))
        return out

depth-wise correlation

把某几个通道的信息进行混合,下面是对单独的一个通道的。
SiamRPN++,思路上和naive correlation差不多,只不过一个是全部通道加和起来了,一个就是一个通道就输出一个通道,示意图可看下面:在这里插入图片描述
比如说input=6x6,in_channels=4,out_channels=4,kernel_size=3,那么需要用1组3x3x4的卷积,每个3x3x1的卷积与对应通道的计算结果为1x4x4,总共结果为4x4x4;(计算卷积次数为4次)

def depthwise_xcorr(search, kernel):
    """depthwise cross correlation
    """
    batch = kernel.size(0)
    channel = kernel.size(1)
    search = search.view(1, batch * channel, search.size(2), search.size(3))
    kernel = kernel.reshape(batch * channel, 1, kernel.size(2), kernel.size(3))
    out = torch.nn.functional.conv2d(search, kernel, groups=batch * channel)
    #groups=输入的维度的时候,就是depth-wise correlation
    out = out.view(batch, channel, out.size(2), out.size(3))
    return out

pixel-wise correlation

不考虑周围点(即局部关联性),只考虑自身点,只对通道进行加权融合
虽然Alpha-refine提到了这种correlation,其实采用的是Ranking Attention Network for Fast Video Object Segmentation这篇文章里的思想,因为两者最后都得预测mask,所以借鉴了一下。
在这里插入图片描述
就是让模板特征的HzWz个1x1xC特征与搜索帧特征进行卷积,最后的通道数是HzWz,大小因为核大小是1x1的,所以不会改变,就是Hx和Wx。这个甚至不需要用到卷积函数,直接tensor矩阵相乘就行。
在这里插入图片描述

def pixelwise_xcorr(kernel, search):
    b, c, h, w = search.shape
    ker = kernel.reshape(b, c, -1).transpose(1, 2)
    #就是做了一个卷积大小为输入维度,做转置是为了便于后面作乘法
    feat = search.reshape(b, c, -1)
    corr = torch.matmul(ker, feat)
    corr = corr.reshape(*corr.shape[:2], h, w)
    return corr

cross correlation还有pixel-to-global correlation、saliency-associated correlation、AutoMatch,请参考这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值