Exemplo n.º 1
0
 def __init__(self, chi, cho):
     super(DeformConv, self).__init__()
     self.actf = nn.Sequential(
         nn.BatchNorm2d(cho, momentum=BN_MOMENTUM),
         nn.ReLU(inplace=True)
     )
     self.conv = DCN(chi, cho, kernel_size=(3,3), stride=1, padding=1, dilation=1, deformable_groups=1)
    def _make_deconv_layer(self,
                           num_layers,
                           num_filters,
                           num_kernels,
                           stage=1):
        assert num_layers == len(num_filters), \
            'ERROR: num_deconv_layers is different len(num_deconv_filters)'
        assert num_layers == len(num_kernels), \
            'ERROR: num_deconv_layers is different len(num_deconv_filters)'

        deconv_layers = []

        for i in range(num_layers):
            deconv_layer = []

            kernel, padding, output_padding = \
                self._get_deconv_cfg(num_kernels[i], i)

            planes = num_filters[i]
            fc = DCN(self.inplanes,
                     planes,
                     kernel_size=(3, 3),
                     stride=1,
                     padding=1,
                     dilation=1,
                     deformable_groups=1)
            # fc = nn.Conv2d(self.inplanes, planes,
            #         kernel_size=3, stride=1,
            #         padding=1, dilation=1, bias=False)
            # fill_fc_weights(fc)
            up = nn.ConvTranspose2d(in_channels=planes,
                                    out_channels=planes,
                                    kernel_size=kernel,
                                    stride=2,
                                    padding=padding,
                                    output_padding=output_padding,
                                    bias=self.deconv_with_bias)
            fill_up_weights(up)

            deconv_layer.append(fc)
            deconv_layer.append(nn.BatchNorm2d(planes, momentum=BN_MOMENTUM))
            deconv_layer.append(nn.ReLU(inplace=True))
            deconv_layer.append(up)
            deconv_layer.append(nn.BatchNorm2d(planes, momentum=BN_MOMENTUM))
            deconv_layer.append(nn.ReLU(inplace=True))
            deconv_layer_i = nn.Sequential(*deconv_layer)

            if stage == 1:
                layer_name = 'stage_one_deconv_layer{}'.format(i + 1)
            else:
                layer_name = 'stage_two_deconv_layer{}'.format(i + 1)
            self.add_module(layer_name, deconv_layer_i)
            deconv_layers.append(layer_name)

            self.inplanes = planes

        return deconv_layers
    def _make_deconv_layer(self, num_layers, num_filters, num_kernels):
        assert num_layers == len(num_filters), \
            'ERROR: num_deconv_layers is different len(num_deconv_filters)'
        assert num_layers == len(num_kernels), \
            'ERROR: num_deconv_layers is different len(num_deconv_filters)'

        layers = []
        for i in range(num_layers):
            kernel, padding, output_padding = \
                self._get_deconv_cfg(num_kernels[i], i)

            planes = num_filters[i]
            fc = DCN(self.inplanes,
                     planes,
                     kernel_size=(3, 3),
                     stride=1,
                     padding=1,
                     dilation=1,
                     deformable_groups=1)
            # fc = nn.Conv2d(self.inplanes, planes,
            #         kernel_size=3, stride=1,
            #         padding=1, dilation=1, bias=False)
            # fill_fc_weights(fc)
            up = nn.ConvTranspose2d(in_channels=planes,
                                    out_channels=planes,
                                    kernel_size=kernel,
                                    stride=2,
                                    padding=padding,
                                    output_padding=output_padding,
                                    bias=self.deconv_with_bias)
            fill_up_weights(up)

            layers.append(fc)
            layers.append(nn.BatchNorm2d(planes, momentum=BN_MOMENTUM))
            layers.append(nn.ReLU(inplace=True))
            layers.append(up)
            layers.append(nn.BatchNorm2d(planes, momentum=BN_MOMENTUM))
            layers.append(nn.ReLU(inplace=True))
            self.inplanes = planes

        return nn.Sequential(*layers)