def build_concat_volume(refimg_fea, targetimg_fea, maxdisp): B, C, H, W = refimg_fea.shape volume = refimg_fea.new_zeros([B, 2 * C, maxdisp, H, W]) for i in range(maxdisp): if i > 0: volume[:, :C, i, :, :] = refimg_fea[:, :, :, :] volume[:, C:, i, :, i:] = targetimg_fea[:, :, :, :-i] else: volume[:, :C, i, :, :] = refimg_fea volume[:, C:, i, :, :] = targetimg_fea volume = volume.contiguous() return volume
时间: 2024-04-22 08:26:58 浏览: 121
解决Oracle没有WM_CONCAT函数.zip
这段代码是一个函数,用于构建拼接体积。它接受三个输入参数:参考图像特征(refimg_fea)、目标图像特征(targetimg_fea)和最大视差值(maxdisp)。
在函数内部,首先从参考图像特征的形状中提取出B(batch size)、C(通道数)、H(高度)和W(宽度)。
然后,创建了一个大小为[B, 2 * C, maxdisp, H, W]的全零张量(volume)。这个张量将用于存储拼接体积。
通过一个for循环遍历每个视差值i。在循环内部,如果i大于0,则将refimg_fea的特征复制到volume[:, :C, i, :, :]中,并将targetimg_fea的特征复制到volume[:, C:, i, :, i:]中。这样,在volume张量中的每个切片中,前C个通道存储了refimg_fea的特征,后C个通道存储了targetimg_fea的特征。
如果i等于0,则直接将refimg_fea的特征复制到volume[:, :C, i, :, :]中,并将targetimg_fea的特征复制到volume[:, C:, i, :, :]中。
最后,通过调用contiguous函数,将volume张量变为连续的内存布局,并将其作为输出返回。
阅读全文