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 20:37:03 浏览: 86
torch.cuda.is_available()返回False解决方案
5星 · 资源好评率100%
这段代码是一个计算代价图(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的对应部分完全一致,此时只需将它们分别拼接到cost的第1个和第2个channel维度上即可。在拼接完成后,使用contiguous()方法使得cost的存储顺序变得连续,以方便后续的计算。
阅读全文