Esempio n. 1
0
 def forward(self, x, extra_feat):
     out = self.conv_offset(extra_feat)
     o1, o2, mask = torch.chunk(out, 3, dim=1)
     offset = torch.cat((o1, o2), dim=1)
     mask = torch.sigmoid(mask)
     return modulated_deform_conv2d(x, offset, mask, self.weight, self.bias,
                                    self.stride, self.padding,
                                    self.dilation, self.groups,
                                    self.deform_groups)
Esempio n. 2
0
    def forward(self, x, extra_feat, flow_1, flow_2):
        extra_feat = torch.cat([extra_feat, flow_1, flow_2], dim=1)
        out = self.conv_offset(extra_feat)
        o1, o2, mask = torch.chunk(out, 3, dim=1)

        # offset
        offset = self.max_residue_magnitude * torch.tanh(
            torch.cat((o1, o2), dim=1))
        offset_1, offset_2 = torch.chunk(offset, 2, dim=1)
        offset_1 = offset_1 + flow_1.flip(1).repeat(1,
                                                    offset_1.size(1) // 2, 1,
                                                    1)
        offset_2 = offset_2 + flow_2.flip(1).repeat(1,
                                                    offset_2.size(1) // 2, 1,
                                                    1)
        offset = torch.cat([offset_1, offset_2], dim=1)

        # mask
        mask = torch.sigmoid(mask)

        return modulated_deform_conv2d(x, offset, mask, self.weight, self.bias,
                                       self.stride, self.padding,
                                       self.dilation, self.groups,
                                       self.deform_groups)