cost = Variable(torch.FloatTensor(refimg_fea.size()[0], refimg_fea.size()[1]*2, self.maxdisp//4, refimg_fea.size()[2], refimg_fea.size()[3]).zero_()).cuda() for i in range(self.maxdisp//4): if i > 0 : cost[:, :refimg_fea.size()[1], i, :,i:] = refimg_fea[:,:,:,i:] cost[:, refimg_fea.size()[1]:, i, :,i:] = targetimg_fea[:,:,:,:-i] else: cost[:, :refimg_fea.size()[1], i, :,:] = refimg_fea cost[:, refimg_fea.size()[1]:, i, :,:] = targetimg_fea cost = cost.contiguous()翻译一下这段代码
时间: 2024-04-01 21:37:04 浏览: 55
Pytorch基本变量类型FloatTensor与Variable用法
这段代码主要是为了计算代价图(cost volume),其中refimg_fea和targetimg_fea是经过卷积得到的特征图。具体来说,代码首先创建一个大小为[batch_size, channel*2, maxdisp/4, height, width]的0张量cost,并将其移动到GPU上。然后对于每个视差d(视差的最大值为maxdisp),将refimg_fea和targetimg_fea的对应部分拼接到cost的第2个维度上(即channel维度),从而生成一个代价图。需要注意的是,在d=0时,不需要进行拼接操作,因为此时refimg_fea和targetimg_fea的对应部分完全一致。最后,使用contiguous()方法使得张量的存储顺序变得连续,以方便后续的计算。
阅读全文