Пример #1
0
 def forward(self, x, flow):
     x = self.conv1(x)
     f1 = warp(x, flow)
     x = self.conv2(x)
     flow = F.interpolate(
         flow, scale_factor=0.5, mode="bilinear", align_corners=False) * 0.5
     f2 = warp(x, flow)
     x = self.conv3(x)
     flow = F.interpolate(
         flow, scale_factor=0.5, mode="bilinear", align_corners=False) * 0.5
     f3 = warp(x, flow)
     x = self.conv4(x)
     flow = F.interpolate(
         flow, scale_factor=0.5, mode="bilinear", align_corners=False) * 0.5
     f4 = warp(x, flow)
     return [f1, f2, f3, f4]
Пример #2
0
 def forward(self, x):
     x = F.interpolate(x,
                       scale_factor=0.5,
                       mode="bilinear",
                       align_corners=False)
     flow0 = self.block0(x)
     F1 = flow0
     warped_img0 = warp(x[:, :3], F1)
     warped_img1 = warp(x[:, 3:], -F1)
     flow1 = self.block1(torch.cat((warped_img0, warped_img1, F1), 1))
     F2 = (flow0 + flow1)
     warped_img0 = warp(x[:, :3], F2)
     warped_img1 = warp(x[:, 3:], -F2)
     flow2 = self.block2(torch.cat((warped_img0, warped_img1, F2), 1))
     F3 = (flow0 + flow1 + flow2)
     return F3, [F1, F2, F3]
Пример #3
0
 def forward(self, img0, img1, flow, c0, c1, flow_gt):
     warped_img0 = warp(img0, flow)
     warped_img1 = warp(img1, -flow)
     if flow_gt == None:
         warped_img0_gt, warped_img1_gt = None, None
     else:
         warped_img0_gt = warp(img0, flow_gt[:, :2])
         warped_img1_gt = warp(img1, flow_gt[:, 2:4])
     s0 = self.down0(torch.cat((warped_img0, warped_img1, flow), 1))
     s1 = self.down1(torch.cat((s0, c0[0], c1[0]), 1))
     s2 = self.down2(torch.cat((s1, c0[1], c1[1]), 1))
     s3 = self.down3(torch.cat((s2, c0[2], c1[2]), 1))
     x = self.up0(torch.cat((s3, c0[3], c1[3]), 1))
     x = self.up1(torch.cat((x, s2), 1))
     x = self.up2(torch.cat((x, s1), 1))
     x = self.up3(torch.cat((x, s0), 1))
     x = self.conv(x)
     return x, warped_img0, warped_img1, warped_img0_gt, warped_img1_gt
Пример #4
0
 def forward(self, x, scale=1.0):
     x = F.interpolate(x, scale_factor=0.5 * scale, mode="bilinear",
                       align_corners=False)
     flow0 = self.block0(x)
     F1 = flow0
     warped_img0 = warp(x[:, :3], F1)
     warped_img1 = warp(x[:, 3:], -F1)
     flow1 = self.block1(torch.cat((warped_img0, warped_img1, F1), 1))
     F2 = (flow0 + flow1)
     warped_img0 = warp(x[:, :3], F2)
     warped_img1 = warp(x[:, 3:], -F2)
     flow2 = self.block2(torch.cat((warped_img0, warped_img1, F2), 1))
     F3 = (flow0 + flow1 + flow2)
     warped_img0 = warp(x[:, :3], F3)
     warped_img1 = warp(x[:, 3:], -F3)
     flow3 = self.block3(torch.cat((warped_img0, warped_img1, F3), 1))
     F4 = (flow0 + flow1 + flow2 + flow3)
     F4 = F.interpolate(F4, scale_factor=1 / scale, mode="bilinear",
                        align_corners=False) / scale
     return F4, [F1, F2, F3, F4]
 def forward(self, x, scale=1.0):
     if scale != 1.0:
         x = F.interpolate(x,
                           scale_factor=scale,
                           mode="bilinear",
                           align_corners=False)
     flow0 = self.block0(x)
     F1 = flow0
     F1_large = F.interpolate(F1,
                              scale_factor=2.0,
                              mode="bilinear",
                              align_corners=False,
                              recompute_scale_factor=False) * 2.0
     warped_img0 = warp(x[:, :3], F1_large[:, :2])
     warped_img1 = warp(x[:, 3:], F1_large[:, 2:4])
     flow1 = self.block1(torch.cat((warped_img0, warped_img1, F1_large), 1))
     F2 = (flow0 + flow1)
     F2_large = F.interpolate(F2,
                              scale_factor=2.0,
                              mode="bilinear",
                              align_corners=False,
                              recompute_scale_factor=False) * 2.0
     warped_img0 = warp(x[:, :3], F2_large[:, :2])
     warped_img1 = warp(x[:, 3:], F2_large[:, 2:4])
     flow2 = self.block2(torch.cat((warped_img0, warped_img1, F2_large), 1))
     F3 = (flow0 + flow1 + flow2)
     F3_large = F.interpolate(F3,
                              scale_factor=2.0,
                              mode="bilinear",
                              align_corners=False,
                              recompute_scale_factor=False) * 2.0
     warped_img0 = warp(x[:, :3], F3_large[:, :2])
     warped_img1 = warp(x[:, 3:], F3_large[:, 2:4])
     flow3 = self.block3(torch.cat((warped_img0, warped_img1, F3_large), 1))
     F4 = (flow0 + flow1 + flow2 + flow3)
     if scale != 1.0:
         F4 = F.interpolate(F4,
                            scale_factor=1 / scale,
                            mode="bilinear",
                            align_corners=False) / scale
     return F4, [F1, F2, F3, F4]