Example #1
0
 def __init__(self, out, eps, momentum):
     super(LayerTest, self).__init__()
     self.in2d = nn.InstanceNorm2d(out, eps=eps, momentum=momentum)
Example #2
0
def get_normalization(name, channels):
    if name == 'in': return nn.InstanceNorm2d(channels)
    if name == 'bn': return nn.BatchNorm2d(channels)
Example #3
0
    def __init__(self, hyperparameters):
        super(aclmaskpermgidtno_Trainer, self).__init__()
        lr = hyperparameters['lr']
        # Initiate the networks
        self.gen_AB = AdaINGen(
            hyperparameters['input_dim_a'],
            hyperparameters['gen'])  # auto-encoder for domain A
        self.gen_BA = AdaINGen(
            hyperparameters['input_dim_a'],
            hyperparameters['gen'])  # auto-encoder for domain B
        self.dis_A = MsImageDis(
            hyperparameters['input_dim_a'],
            hyperparameters['dis'])  # discriminator for domain A
        self.dis_B = MsImageDis(
            hyperparameters['input_dim_a'],
            hyperparameters['dis'])  # discriminator for domain B
        self.dis_2 = MsImageDis(hyperparameters['input_dim_b'],
                                hyperparameters['dis'])  # discriminator 2
        #        self.dis_2B = MsImageDis(hyperparameters['input_dim_a'], hyperparameters['dis'])  # discriminator 2 for domain B
        self.instancenorm = nn.InstanceNorm2d(512, affine=False)
        self.style_dim = hyperparameters['gen']['style_dim']

        # fix the noise used in sampling
        display_size = int(hyperparameters['display_size'])
        self.z_1 = torch.randn(display_size, self.style_dim, 1, 1).cuda()
        self.z_2 = torch.randn(display_size, self.style_dim, 1, 1).cuda()
        self.z_3 = torch.randn(display_size, self.style_dim, 1, 1).cuda()

        # Setup the optimizers
        beta1 = hyperparameters['beta1']
        beta2 = hyperparameters['beta2']
        dis_params = list(self.dis_A.parameters()) + list(
            self.dis_B.parameters()) + list(self.dis_2.parameters())
        gen_params = list(self.gen_AB.parameters()) + list(
            self.gen_BA.parameters())
        self.dis_opt = torch.optim.Adam(
            [p for p in dis_params if p.requires_grad],
            lr=lr,
            betas=(beta1, beta2),
            weight_decay=hyperparameters['weight_decay'])
        self.gen_opt = torch.optim.Adam(
            [p for p in gen_params if p.requires_grad],
            lr=lr,
            betas=(beta1, beta2),
            weight_decay=hyperparameters['weight_decay'])
        self.dis_scheduler = get_scheduler(self.dis_opt, hyperparameters)
        self.gen_scheduler = get_scheduler(self.gen_opt, hyperparameters)
        self.alpha = hyperparameters['alpha']
        self.focus_lam = hyperparameters['focus_loss']

        # Network weight initialization
        self.apply(weights_init(hyperparameters['init']))
        self.dis_A.apply(weights_init('gaussian'))
        self.dis_B.apply(weights_init('gaussian'))
        self.dis_2.apply(weights_init('gaussian'))

        # Load VGG model if needed
        if 'vgg_w' in hyperparameters.keys() and hyperparameters['vgg_w'] > 0:
            self.vgg = load_vgg16(hyperparameters['vgg_model_path'] +
                                  '/models')
            self.vgg.eval()
            for param in self.vgg.parameters():
                param.requires_grad = False
Example #4
0
    def __init__(self,
                 in_channels,
                 out_channels,
                 kernel_size,
                 stride=1,
                 padding=0,
                 dilation=1,
                 pad_type='zero',
                 activation='lrelu',
                 norm='none',
                 sn=False):
        super(Conv2dLayer, self).__init__()
        # Initialize the padding scheme
        if pad_type == 'reflect':
            self.pad = nn.ReflectionPad2d(padding)
        elif pad_type == 'replicate':
            self.pad = nn.ReplicationPad2d(padding)
        elif pad_type == 'zero':
            self.pad = nn.ZeroPad2d(padding)
        else:
            assert 0, "Unsupported padding type: {}".format(pad_type)

        # Initialize the normalization type
        if norm == 'bn':
            self.norm = nn.BatchNorm2d(out_channels)
        elif norm == 'in':
            self.norm = nn.InstanceNorm2d(out_channels)
        elif norm == 'ln':
            self.norm = LayerNorm(out_channels)
        elif norm == 'none':
            self.norm = None
        else:
            assert 0, "Unsupported normalization: {}".format(norm)

        # Initialize the activation funtion
        if activation == 'relu':
            self.activation = nn.ReLU(inplace=True)
        elif activation == 'lrelu':
            self.activation = nn.LeakyReLU(0.2, inplace=True)
        elif activation == 'prelu':
            self.activation = nn.PReLU()
        elif activation == 'selu':
            self.activation = nn.SELU(inplace=True)
        elif activation == 'tanh':
            self.activation = nn.Tanh()
        elif activation == 'sigmoid':
            self.activation = nn.Sigmoid()
        elif activation == 'none':
            self.activation = None
        else:
            assert 0, "Unsupported activation: {}".format(activation)

        # Initialize the convolution layers
        if sn:
            self.conv2d = SpectralNorm(
                nn.Conv2d(in_channels,
                          out_channels,
                          kernel_size,
                          stride,
                          padding=0,
                          dilation=dilation))
        else:
            self.conv2d = nn.Conv2d(in_channels,
                                    out_channels,
                                    kernel_size,
                                    stride,
                                    padding=0,
                                    dilation=dilation)
    def __init__(self, num_classes=31):
        super(AlexNet, self).__init__()
        self.relu = nn.ReLU(inplace=True)
        self.maxpool = nn.MaxPool2d(kernel_size=2, stride=2)
        self.selayer3 = SELayer(384)
        self.selayer4 = SELayer(256)
        self.selayer5 = SELayer(256)
        self.ad_bn_3 = nn.AD_BatchNorm2d(384)
        self.ad_bn_4 = nn.AD_BatchNorm2d(256)
        self.ad_bn_5 = nn.AD_BatchNorm2d(256)

        self.block1 = nn.Sequential(
            nn.Conv2d(3, 64, kernel_size=11, stride=4, padding=5),
            #SELayer(64)
            nn.InstanceNorm2d(64),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=2, stride=2),
        )
        self.block2 = nn.Sequential(
            nn.Conv2d(64, 192, kernel_size=5, padding=2),
            nn.InstanceNorm2d(192),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=2, stride=2),
        )
        self.block3 = nn.Sequential(
            nn.Conv2d(192, 384, kernel_size=3, padding=1), )
        #    nn.BatchNorm2d(384),
        #    nn.ReLU(inplace=True),
        #)
        self.block4 = nn.Sequential(
            nn.Conv2d(384, 256, kernel_size=3, padding=1), )
        #    nn.BatchNorm2d(256),
        #    nn.ReLU(inplace=True),
        #)
        self.block5 = nn.Sequential(
            nn.Conv2d(256, 256, kernel_size=3, padding=1), )
        #     nn.BatchNorm2d(256),
        #     nn.ReLU(inplace=True),
        #     nn.MaxPool2d(kernel_size=2, stride=2),
        #nn.BatchNorm2d(256),
        #)

        self.features = nn.Sequential(
            nn.Conv2d(3, 64, kernel_size=11, stride=4, padding=5),
            nn.InstanceNorm2d(64),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=2, stride=2),
            nn.Conv2d(64, 192, kernel_size=5, padding=2),
            nn.InstanceNorm2d(192),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=2, stride=2),
            nn.Conv2d(192, 384, kernel_size=3, padding=1),
            nn.BatchNorm2d(384),
            nn.ReLU(inplace=True),
            nn.Conv2d(384, 256, kernel_size=3, padding=1),
            nn.BatchNorm2d(256),
            nn.ReLU(inplace=True),
            nn.Conv2d(256, 256, kernel_size=3, padding=1),
            nn.BatchNorm2d(256),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=2, stride=2),
        )
        #self.copy_feature = copy.deepcopy(self.features)
        #print(self.features.1)
        self.bn = nn.BatchNorm1d(256)
        self.ad_pool = nn.AdaptiveAvgPool2d(1)
        self.classifier = nn.Linear(256, num_classes)
    def __init__(self, z_dim=8):
        super(Generator, self).__init__()

        self.in_channels = 3
        self.ngf = 64
        self.out_channels = 3

        self.down_1 = nn.Sequential(
            nn.Conv2d(self.in_channels + z_dim,
                      self.ngf,
                      kernel_size=4,
                      stride=2,
                      padding=1,
                      bias=False), nn.LeakyReLU(0.2))

        self.down_2 = nn.Sequential(
            nn.Conv2d(self.ngf,
                      self.ngf * 2,
                      kernel_size=4,
                      stride=2,
                      padding=1,
                      bias=False), nn.InstanceNorm2d(self.ngf * 2,
                                                     affine=True),
            nn.LeakyReLU(0.2))

        self.down_3 = nn.Sequential(
            nn.Conv2d(self.ngf * 2,
                      self.ngf * 4,
                      kernel_size=4,
                      stride=2,
                      padding=1,
                      bias=False), nn.InstanceNorm2d(self.ngf * 4,
                                                     affine=True),
            nn.LeakyReLU(0.2))

        self.down_4 = nn.Sequential(
            nn.Conv2d(self.ngf * 4,
                      self.ngf * 8,
                      kernel_size=4,
                      stride=2,
                      padding=1,
                      bias=False), nn.InstanceNorm2d(self.ngf * 8,
                                                     affine=True),
            nn.LeakyReLU(0.2))

        self.down_5 = nn.Sequential(
            nn.Conv2d(self.ngf * 8,
                      self.ngf * 8,
                      kernel_size=4,
                      stride=2,
                      padding=1,
                      bias=False), nn.InstanceNorm2d(self.ngf * 8,
                                                     affine=True),
            nn.LeakyReLU(0.2))

        self.down_6 = nn.Sequential(
            nn.Conv2d(self.ngf * 8,
                      self.ngf * 8,
                      kernel_size=4,
                      stride=2,
                      padding=1,
                      bias=False), nn.InstanceNorm2d(self.ngf * 8,
                                                     affine=True),
            nn.LeakyReLU(0.2))

        self.down_7 = nn.Sequential(
            nn.Conv2d(self.ngf * 8,
                      self.ngf * 8,
                      kernel_size=4,
                      stride=2,
                      padding=1,
                      bias=False), nn.InstanceNorm2d(self.ngf * 8,
                                                     affine=True),
            nn.LeakyReLU(0.2))

        self.up_1 = nn.Sequential(
            nn.ConvTranspose2d(self.ngf * 8,
                               self.ngf * 8,
                               kernel_size=4,
                               stride=2,
                               padding=1,
                               bias=False),
            nn.InstanceNorm2d(self.ngf * 8, affine=True), nn.ReLU())

        self.up_2 = nn.Sequential(
            nn.ConvTranspose2d(self.ngf * 16,
                               self.ngf * 8,
                               kernel_size=4,
                               stride=2,
                               padding=1,
                               bias=False),
            nn.InstanceNorm2d(self.ngf * 8, affine=True), nn.ReLU())

        self.up_3 = nn.Sequential(
            nn.ConvTranspose2d(self.ngf * 16,
                               self.ngf * 8,
                               kernel_size=4,
                               stride=2,
                               padding=1,
                               bias=False),
            nn.InstanceNorm2d(self.ngf * 8, affine=True), nn.ReLU())

        self.up_4 = nn.Sequential(
            nn.ConvTranspose2d(self.ngf * 16,
                               self.ngf * 4,
                               kernel_size=4,
                               stride=2,
                               padding=1,
                               bias=False),
            nn.InstanceNorm2d(self.ngf * 4, affine=True), nn.ReLU())

        self.up_5 = nn.Sequential(
            nn.ConvTranspose2d(self.ngf * 8,
                               self.ngf * 2,
                               kernel_size=4,
                               stride=2,
                               padding=1,
                               bias=False),
            nn.InstanceNorm2d(self.ngf * 2, affine=True), nn.ReLU())

        self.up_6 = nn.Sequential(
            nn.ConvTranspose2d(self.ngf * 4,
                               self.ngf,
                               kernel_size=4,
                               stride=2,
                               padding=1,
                               bias=False),
            nn.InstanceNorm2d(self.ngf, affine=True), nn.ReLU())

        self.up_7 = nn.Sequential(
            nn.ConvTranspose2d(self.ngf * 2,
                               self.out_channels,
                               kernel_size=4,
                               stride=2,
                               padding=1,
                               bias=False), nn.Tanh())
Example #7
0
    def __init__(self,
                 input_dim,
                 output_dim,
                 kernel_size,
                 stride,
                 padding=0,
                 norm='none',
                 activation='relu',
                 pad_type='zero'):
        super(Conv2dBlock, self).__init__()
        self.use_bias = True
        # initialize padding
        if pad_type == 'reflect':
            self.pad = nn.ReflectionPad2d(padding)
        elif pad_type == 'replicate':
            self.pad = nn.ReplicationPad2d(padding)
        elif pad_type == 'zero':
            self.pad = nn.ZeroPad2d(padding)
        else:
            assert 0, "Unsupported padding type: {}".format(pad_type)

        # initialize normalization
        norm_dim = output_dim
        if norm == 'bn':
            self.norm = nn.BatchNorm2d(norm_dim)
        elif norm == 'in':
            #self.norm = nn.InstanceNorm2d(norm_dim, track_running_stats=True)
            self.norm = nn.InstanceNorm2d(norm_dim)
        elif norm == 'ln':
            self.norm = LayerNorm(norm_dim)
        elif norm == 'adain':
            self.norm = AdaptiveInstanceNorm2d(norm_dim)
        elif norm == 'none' or norm == 'sn':
            self.norm = None
        else:
            assert 0, "Unsupported normalization: {}".format(norm)

        # initialize activation
        if activation == 'relu':
            self.activation = nn.ReLU(inplace=True)
        elif activation == 'lrelu':
            self.activation = nn.LeakyReLU(0.2, inplace=True)
        elif activation == 'prelu':
            self.activation = nn.PReLU()
        elif activation == 'selu':
            self.activation = nn.SELU(inplace=True)
        elif activation == 'tanh':
            self.activation = nn.Tanh()
        elif activation == 'none':
            self.activation = None
        else:
            assert 0, "Unsupported activation: {}".format(activation)

        # initialize convolution
        if norm == 'sn':
            self.conv = SpectralNorm(
                nn.Conv2d(input_dim,
                          output_dim,
                          kernel_size,
                          stride,
                          bias=self.use_bias))
        else:
            self.conv = nn.Conv2d(input_dim,
                                  output_dim,
                                  kernel_size,
                                  stride,
                                  bias=self.use_bias)
	def __init__(self, n_classes, num_filter, BatchNorm, in_channels=3):
		super(DilatedResnetForFlatByClassifyWithRgressV2v6v4c1GN, self).__init__()
		self.in_channels = in_channels
		self.n_classes = n_classes
		self.num_filter = num_filter
		# act_fn = nn.PReLU()
		act_fn = nn.ReLU(inplace=True)
		# act_fn = nn.LeakyReLU(0.2)

		map_num = [1, 2, 4, 8, 16]
		GN_num = self.num_filter * map_num[0]

		is_dropout = False
		print("\n------load DilatedResnetForFlatByClassifyWithRgressV2v6v4c1GN------\n")

		self.resnet_head = nn.Sequential(
			nn.Conv2d(self.in_channels, self.num_filter * map_num[0], kernel_size=7, stride=1, padding=3),
			nn.InstanceNorm2d(self.num_filter * map_num[0]),
			# BatchNorm(1, self.num_filter * map_num[0]),
			# BatchNorm(self.num_filter * map_num[0]),
			# nn.BatchNorm2d(self.num_filter * map_num[0]),
			act_fn,
			# nn.Dropout(p=0.2),
			nn.Conv2d(self.num_filter * map_num[0], self.num_filter * map_num[0], kernel_size=7, stride=2, padding=3),
			nn.InstanceNorm2d(self.num_filter * map_num[0]),
			# BatchNorm(1, self.num_filter * map_num[0]),
			# BatchNorm(self.num_filter * map_num[0]),
			# nn.BatchNorm2d(self.num_filter * map_num[0]),
			act_fn,
			# nn.Dropout(p=0.2),
			# nn.MaxPool2d(kernel_size=2, stride=2, padding=0),
			nn.Conv2d(self.num_filter * map_num[0], self.num_filter * map_num[0], kernel_size=7, stride=2, padding=3),
			nn.InstanceNorm2d(self.num_filter * map_num[0]),
			# BatchNorm(1, self.num_filter * map_num[0]),
			# BatchNorm(self.num_filter * map_num[0]),
			# nn.BatchNorm2d(self.num_filter * map_num[0]),
			act_fn,
			# nn.Dropout(p=0.2),

		)
		# self.resnet_down = ResNetGN(num_filter, map_num, BatchNorm, GN_num=[32, 32, 32, 32], block_nums=[3, 4, 6, 3], block=ResidualBlock34GN, dropRate=[0, 0, 0, 0])
		self.resnet_down = ResNetV2StraightV2GN(num_filter, map_num, BatchNorm, GN_num=[GN_num, GN_num, GN_num, GN_num], block_nums=[3, 4, 6, 3], block=ResidualBlock34DilatedV4GN, dropRate=[0, 0, 0, 0], is_sub_dropout=False)

		map_num_i = 3
		self.bridge_1 = nn.Sequential(
			dilation_conv_gn_act(self.num_filter * map_num[map_num_i], self.num_filter * map_num[map_num_i],
								 act_fn, BatchNorm, GN_num=GN_num, dilation=1),
			# conv_bn_act(self.num_filter * map_num[map_num_i], self.num_filter * map_num[map_num_i], act_fn),
		)
		self.bridge_2 = nn.Sequential(
			dilation_conv_gn_act(self.num_filter * map_num[map_num_i], self.num_filter * map_num[map_num_i],
								act_fn, BatchNorm, GN_num=GN_num, dilation=2),
			# conv_bn_act(self.num_filter * map_num[map_num_i], self.num_filter * map_num[map_num_i], act_fn),
		)
		self.bridge_3 = nn.Sequential(
			dilation_conv_gn_act(self.num_filter * map_num[map_num_i], self.num_filter * map_num[map_num_i],
								act_fn, BatchNorm, GN_num=GN_num, dilation=5),
			# conv_bn_act(self.num_filter * map_num[map_num_i], self.num_filter * map_num[map_num_i], act_fn),
		)
		self.bridge_4 = nn.Sequential(
			dilation_conv_gn_act(self.num_filter * map_num[map_num_i], self.num_filter * map_num[map_num_i],
								act_fn, BatchNorm, GN_num=GN_num, dilation=8),
			dilation_conv_gn_act(self.num_filter * map_num[map_num_i], self.num_filter * map_num[map_num_i],
								act_fn, BatchNorm, GN_num=GN_num, dilation=3),
			dilation_conv_gn_act(self.num_filter * map_num[map_num_i], self.num_filter * map_num[map_num_i],
								act_fn, BatchNorm, GN_num=GN_num, dilation=2),
		)
		self.bridge_5 = nn.Sequential(
			dilation_conv_gn_act(self.num_filter * map_num[map_num_i], self.num_filter * map_num[map_num_i],
								act_fn, BatchNorm, GN_num=GN_num, dilation=12),
			dilation_conv_gn_act(self.num_filter * map_num[map_num_i], self.num_filter * map_num[map_num_i],
								act_fn, BatchNorm, GN_num=GN_num, dilation=7),
			dilation_conv_gn_act(self.num_filter * map_num[map_num_i], self.num_filter * map_num[map_num_i],
								act_fn, BatchNorm, GN_num=GN_num, dilation=4),
		)
		self.bridge_6 = nn.Sequential(
			dilation_conv_gn_act(self.num_filter * map_num[map_num_i], self.num_filter * map_num[map_num_i],
								act_fn, BatchNorm, GN_num=GN_num, dilation=18),
			dilation_conv_gn_act(self.num_filter * map_num[map_num_i], self.num_filter * map_num[map_num_i],
								act_fn, BatchNorm, GN_num=GN_num, dilation=12),
			dilation_conv_gn_act(self.num_filter * map_num[map_num_i], self.num_filter * map_num[map_num_i],
								act_fn, BatchNorm, GN_num=GN_num, dilation=6),
		)

		self.bridge_concate = nn.Sequential(
			nn.Conv2d(self.num_filter * map_num[map_num_i] * 6, self.num_filter * map_num[4], kernel_size=1, stride=1, padding=0),
			BatchNorm(GN_num, self.num_filter * map_num[4]),
			# BatchNorm(self.num_filter * map_num[4]),
			# nn.BatchNorm2d(self.num_filter * map_num[4]),
			act_fn,
		)

		self.regess_4 = ConvBlockResidualGN(self.num_filter * map_num[4], self.num_filter * (map_num[4]), act_fn, BatchNorm, GN_num=GN_num, is_dropout=False)
		# self.regess_4 = ConvBlockV2(self.num_filter * map_num[4], self.num_filter * (map_num[3]), act_fn, BatchNorm, is_dropout=False)
		# self.regess_4 = MergeBlockV2(self.num_filter * map_num[4], self.num_filter * (map_num[3]), n_classes, act_fn, BatchNorm, is_dropout=False)
		# self.trans_4 = upsamplingBilinear(scale_factor=2)
		self.trans_4 = transitionUpGN(self.num_filter * (map_num[4]), self.num_filter * map_num[3], act_fn, BatchNorm, GN_num=GN_num)

		self.regess_3 = ConvBlockResidualGN(self.num_filter * (map_num[3]), self.num_filter * (map_num[3]), act_fn, BatchNorm, GN_num=GN_num, is_dropout=False)
		# self.regess_3 = ConvBlockV2(self.num_filter * (map_num[3]), self.num_filter * (map_num[2]), act_fn, BatchNorm, is_dropout=False)
		# self.regess_3 = MergeBlockV2(self.num_filter * (map_num[3]), self.num_filter * (map_num[2]), n_classes, act_fn, BatchNorm, is_dropout=False)
		# self.trans_3 = upsamplingBilinear(scale_factor=2)
		self.trans_3 = transitionUpGN(self.num_filter * (map_num[3]), self.num_filter * map_num[2], act_fn, BatchNorm, GN_num=GN_num)

		self.regess_2 = ConvBlockResidualGN(self.num_filter * (map_num[2]), self.num_filter * (map_num[2]), act_fn, BatchNorm, GN_num=GN_num, is_dropout=False)
		# self.regess_2 = ConvBlockV2(self.num_filter * (map_num[2]), self.num_filter * (map_num[2]), act_fn, BatchNorm, is_dropout=False)
		# self.regess_2 = MergeBlockV2(self.num_filter * (map_num[2]), self.num_filter * (map_num[2]), n_classes, act_fn, BatchNorm, is_dropout=False)
		# self.trans_2 = upsamplingBilinear(scale_factor=2)
		self.trans_2 = transitionUpGN(self.num_filter * map_num[2], self.num_filter * map_num[1], act_fn, BatchNorm, GN_num=GN_num)

		self.regess_1 = ConvBlockResidualGN(self.num_filter * (map_num[1]), self.num_filter * (map_num[1]), act_fn, BatchNorm, GN_num=GN_num, is_dropout=False)
		# self.regess_1 = ConvBlockV2(self.num_filter * (map_num[2]), self.num_filter * (map_num[1]), act_fn, BatchNorm, is_dropout=False)
		# self.regess_1 = MergeBlockV2(self.num_filter * (map_num[2]), self.num_filter * (map_num[1]), n_classes, act_fn, BatchNorm, is_dropout=False)
		self.trans_1 = upsamplingBilinear(scale_factor=2)
		# self.trans_1 = transitionUpGN(self.num_filter * map_num[1], self.num_filter * map_num[1], act_fn, BatchNorm, GN_num=GN_num)

		self.regess_0 = ConvBlockResidualGN(self.num_filter * (map_num[1]), self.num_filter * (map_num[1]), act_fn, BatchNorm, GN_num=GN_num, is_dropout=False)
		# self.regess_0 = ConvBlockV2(self.num_filter * (map_num[1]), self.num_filter * (map_num[0]), act_fn, BatchNorm, is_dropout=False)
		# self.regess_0 = MergeBlockV2(self.num_filter * (map_num[1]), self.num_filter * (map_num[0]), n_classes, act_fn, BatchNorm, is_dropout=False)
		# self.trans_0 = transitionUpGN(self.num_filter * map_num[1], self.num_filter * map_num[0], act_fn, BatchNorm, GN_num=GN_num)
		self.trans_0 = upsamplingBilinear(scale_factor=2)
		self.up = nn.Sequential(
			nn.Conv2d(self.num_filter * map_num[1], self.num_filter * map_num[0], kernel_size=3, stride=1, padding=1),
			# BatchNorm(GN_num, self.num_filter * map_num[0]),
			nn.InstanceNorm2d(self.num_filter * map_num[0]),
			# nn.BatchNorm2d(self.num_filter * map_num[0]),
			act_fn,
			# nn.Dropout2d(p=0.2),
		)
		self.out_regress = nn.Sequential(
			# nn.Conv2d(map_num[0], map_num[0], kernel_size=3, stride=1, padding=1, bias=False),
			# nn.InstanceNorm2d(map_num[0]),
			# nn.PReLU(),
			nn.Conv2d(self.num_filter * map_num[0], self.num_filter * map_num[0], kernel_size=3, stride=1, padding=1),
			# BatchNorm(GN_num, self.num_filter * map_num[0]),
			nn.InstanceNorm2d(self.num_filter * map_num[0]),
			nn.PReLU(),
			# nn.Dropout2d(p=0.2),
			nn.Conv2d(self.num_filter * map_num[0], n_classes, kernel_size=3, stride=1, padding=1),
			nn.InstanceNorm2d(n_classes),
			# BatchNorm(1, n_classes),
			# BatchNorm(n_classes),
			nn.PReLU(),
			nn.Conv2d(n_classes, n_classes, kernel_size=3, stride=1, padding=1),
			#nn.Conv2d(map_num[0], n_classes, kernel_size=3, stride=1, padding=1, bias=False),
		)

		self.out_classify = nn.Sequential(
			# nn.Conv2d(map_num[0], map_num[0], kernel_size=3, stride=1, padding=1, bias=False),
			# nn.InstanceNorm2d(map_num[0]),
			# act_fn,
			# nn.Dropout(p=0.2),
			nn.Conv2d(self.num_filter * map_num[0], self.num_filter * map_num[0], kernel_size=3, stride=1, padding=1),
			# BatchNorm(GN_num, self.num_filter * map_num[0]),
			nn.InstanceNorm2d(self.num_filter * map_num[0]),
			act_fn,
			nn.Dropout2d(p=0.2),		# nn.Dropout(p=0.2),
			nn.Conv2d(self.num_filter * map_num[0], n_classes, kernel_size=3, stride=1, padding=1),
			nn.InstanceNorm2d(n_classes),
			# BatchNorm(1, n_classes),
			# BatchNorm(n_classes),
			act_fn,
			# nn.Dropout(p=0.2),
			nn.Conv2d(n_classes, 1, kernel_size=3, stride=1, padding=1),
			#nn.Conv2d(self.num_filter * map_num[0], n_classes, kernel_size=3, stride=1, padding=1, bias=False),
		)

		self.out_classify_softmax = nn.Sigmoid()
		#self.out_classify_softmax = nn.Softmax2d()

		self._initialize_weights()
 def __init__(self, planes, ratio=0.5):
     super(IBN, self).__init__()
     self.half = int(planes * ratio)
     self.IN = nn.InstanceNorm2d(self.half, affine=True)
     self.BN = nn.BatchNorm2d(planes - self.half)
Example #10
0
    def __init__(self, input_channels, kernel_size, bias=True):
        super(Conv2LSTM, self).__init__()
        self.input_channels = input_channels
        self.bias = bias
        self.kernel_size = kernel_size
        self.FME = nn.Sequential(
            ConvScale(self.input_channels, 64, self.kernel_size, bias=True),
            nn.InstanceNorm2d(64, affine=True),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=2,
                         stride=2,
                         padding=0,
                         dilation=1,
                         ceil_mode=False),
            ConvScale(64, 128, self.kernel_size, bias=True),
            nn.InstanceNorm2d(128, affine=True),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=2,
                         stride=2,
                         padding=0,
                         dilation=1,
                         ceil_mode=False),
            ConvScale(128, 128, self.kernel_size, bias=True),
            nn.InstanceNorm2d(128, affine=True),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=2,
                         stride=2,
                         padding=0,
                         dilation=1,
                         ceil_mode=False),
            ConvScale(128, 64, self.kernel_size, bias=True),
            nn.InstanceNorm2d(64, affine=True),
            nn.ReLU(inplace=True),

            #add
            nn.Conv2d(64, 1, 1, stride=1, padding=int((1 - 1) / 2), bias=True),
            nn.InstanceNorm2d(1, affine=True),
            nn.ReLU(inplace=True),
        )

        self.DME = nn.Sequential(
            nn.Conv2d(64, 64, 9, stride=1, padding=int((9 - 1) / 2),
                      bias=True),
            nn.InstanceNorm2d(64, affine=True),
            nn.ReLU(inplace=True),
            nn.ConvTranspose2d(64,
                               64,
                               9,
                               stride=2,
                               padding=4,
                               output_padding=1,
                               bias=True),
            nn.InstanceNorm2d(64, affine=True),
            nn.ReLU(inplace=True),
            nn.Conv2d(64, 32, 7, stride=1, padding=int((7 - 1) / 2),
                      bias=True),
            nn.InstanceNorm2d(32, affine=True),
            nn.ReLU(inplace=True),
            nn.ConvTranspose2d(32,
                               32,
                               7,
                               stride=2,
                               padding=3,
                               output_padding=1,
                               bias=True),
            nn.InstanceNorm2d(32, affine=True),
            nn.ReLU(inplace=True),
            nn.Conv2d(32, 16, 5, stride=1, padding=int((5 - 1) / 2),
                      bias=True),
            nn.InstanceNorm2d(16, affine=True),
            nn.ReLU(inplace=True),
            nn.ConvTranspose2d(16,
                               16,
                               5,
                               stride=2,
                               padding=2,
                               output_padding=1,
                               bias=True),
            nn.InstanceNorm2d(16, affine=True),
            nn.ReLU(inplace=True),
            nn.Conv2d(16, 16, 3, stride=1, padding=int((3 - 1) / 2),
                      bias=True),
            nn.InstanceNorm2d(16, affine=True),
            nn.ReLU(inplace=True),
            nn.Conv2d(16, 16, 5, stride=1, padding=int((5 - 1) / 2),
                      bias=True),
            nn.InstanceNorm2d(16, affine=True),
            nn.ReLU(inplace=True),
            nn.Conv2d(16, 1, 1, stride=1, padding=int((1 - 1) / 2), bias=True),
            nn.InstanceNorm2d(1, affine=True),
            nn.ReLU(inplace=True),
        )

        self.LSTM = nn.LSTM(input_size=int(480 * 640 / 64),
                            hidden_size=60 * 80,
                            num_layers=4,
                            batch_first=True,
                            dropout=0.5)
 def __init__(self):
     super(InstanceNorm, self).__init__()
     self.inorm2 = nn.InstanceNorm2d(3, affine=True)
Example #12
0
    def __init__(
        self,
        input_dim,
        output_dim,
        kernel_size,
        stride,
        padding=0,
        norm="none",
        activation="relu",
        pad_type="zero",
    ):
        super(ConvBlock, self).__init__()
        self.use_bias = True
        # initialize padding
        if pad_type == "reflect":
            self.pad = nn.ReflectionPad2d(padding)
        elif pad_type == "replicate":
            self.pad = nn.ReplicationPad2d(padding)
        elif pad_type == "zero":
            self.pad = nn.ZeroPad2d(padding)
        else:
            assert 0, "Unsupported padding type: {}".format(pad_type)

        # initialize normalization
        norm_dim = output_dim
        if norm == "bn":
            self.norm = nn.BatchNorm2d(norm_dim)
        elif norm == "in":
            # self.norm = nn.InstanceNorm2d(norm_dim, track_running_stats=True)
            self.norm = nn.InstanceNorm2d(norm_dim)
        elif norm == "ln":
            self.norm = LayerNorm(norm_dim)
        elif norm == "adain":
            self.norm = AdaptiveInstanceNorm2d(norm_dim)
        elif norm == "none" or norm == "sn":
            self.norm = None
        else:
            assert 0, "Unsupported normalization: {}".format(norm)

        # initialize activation
        if activation == "relu":
            self.activation = nn.ReLU(inplace=True)
        elif activation == "lrelu":
            self.activation = nn.LeakyReLU(0.2, inplace=True)
        elif activation == "prelu":
            self.activation = nn.PReLU()
        elif activation == "selu":
            self.activation = nn.SELU(inplace=True)
        elif activation == "tanh":
            self.activation = nn.Tanh()
        elif activation == "none":
            self.activation = None
        else:
            assert 0, "Unsupported activation: {}".format(activation)

        # initialize convolution
        if norm == "sn":
            self.conv = SpectralNorm(
                nn.Conv2d(input_dim,
                          output_dim,
                          kernel_size,
                          stride,
                          bias=self.use_bias))
        else:
            self.conv = nn.Conv2d(input_dim,
                                  output_dim,
                                  kernel_size,
                                  stride,
                                  bias=self.use_bias)
Example #13
0
 def block(in_, out_, normalization=True):
     layers = [nn.Conv2d(in_, out_, 4, stride=2, padding=1)]
     if normalization:
         layers.append(nn.InstanceNorm2d(out_))
     layers.append(nn.LeakyReLU(0.2, inplace=True))
     return layers
Example #14
0
def get_normalization(name, channels, **kwargs):
    if name == 'bn': return nn.BatchNorm2d(channels, **kwargs)
    elif name == 'in': return nn.InstanceNorm2d(channels, **kwargs)
    else: return nn.Identity()
Example #15
0
def get_norm(num_features, norm_type):
    if norm_type == 'BN':
        return nn.BatchNorm2d(num_features)
    elif norm_type == 'IN':
        return nn.InstanceNorm2d(num_features)
 def _make_stage(self, features, out_features, size):
     prior = nn.AdaptiveAvgPool2d(output_size=(size, size))
     conv = nn.Conv2d(features, out_features, kernel_size=1, bias=False)
     bn = nn.InstanceNorm2d(out_features)
     return nn.Sequential(prior, conv, bn)
Example #17
0
 def __init__(self, n_channel):
     super().__init__()
     self.norm = nn.InstanceNorm2d(n_channel)
Example #18
0
def test_g():
    padding = nn.ReflectionPad2d((3, 3, 3, 3))

    relu = nn.ReLU()

    conv1 = nn.Conv2d(in_channels=1,
                      out_channels=64,
                      kernel_size=7,
                      stride=1,
                      padding=0,
                      bias=False)
    init.normal_(conv1.weight)
    instance_norm = nn.InstanceNorm2d(64, eps=1e-5)
    cnet1 = nn.Sequential(padding, conv1, instance_norm, relu)

    conv2 = nn.Conv2d(in_channels=64,
                      out_channels=128,
                      kernel_size=3,
                      stride=2,
                      padding=1,
                      bias=False)
    init.normal_(conv2.weight)
    instance_norm = nn.InstanceNorm2d(128, eps=1e-5)
    cnet2 = nn.Sequential(conv2, instance_norm, relu)

    conv3 = nn.Conv2d(in_channels=128,
                      out_channels=256,
                      kernel_size=3,
                      stride=2,
                      padding=1,
                      bias=False)
    init.normal_(conv3.weight)
    instance_norm = nn.InstanceNorm2d(256, eps=1e-5)
    cnet3 = nn.Sequential(conv3, instance_norm, relu)

    resnet = nn.Sequential()
    for i in range(10):
        resnet.add_module('resnet_block', ResnetBlock(dim=256,
                                                           padding_type='reflect',
                                                           use_dropout=False,
                                                           use_bias=False,
                                                           norm_layer=nn.InstanceNorm2d))
    extra_padding = nn.ZeroPad2d((0, 1, 0, 1))

    tconv1 = nn.ConvTranspose2d(in_channels=256,
                                out_channels=128,
                                kernel_size=3,
                                stride=2,
                                padding=1,
                                bias=False)

    init.normal_(tconv1.weight)
    tcnet1 = nn.Sequential(tconv1, extra_padding, instance_norm, relu)

    tconv2 = nn.ConvTranspose2d(in_channels=128,
                                out_channels=64,
                                kernel_size=3,
                                stride=2,
                                padding=1,
                                bias=False)
    init.normal_(tconv2.weight)
    tcnet2 = nn.Sequential(tconv2, extra_padding, instance_norm, relu)

    conv4 = nn.Conv2d(in_channels=64,
                      out_channels=1,
                      kernel_size=7,
                      stride=1,
                      padding=0)
    init.normal_(conv4.weight)
    sigmoid = nn.Sigmoid()

    cnet4 = nn.Sequential(padding, conv4, sigmoid)

    x = torch.ones((4, 1, 64, 84))
    x = cnet1(x)
    x = cnet2(x)
    x = cnet3(x)
    x = resnet(x)
    x = tcnet1(x)
    x = tcnet2(x)
    x = cnet4(x)
    print(x.shape)
    def __init__(self):
        super(Discriminator, self).__init__()

        self.in_channels = 3
        self.ndf = 64
        self.out_channels = 1

        # Discriminator having last patch of (1, 13, 13)
        # (batch_size, 3, 128, 128) -> (batch_size, 1, 13, 13)

        self.main_1 = nn.Sequential(
            nn.AvgPool2d(kernel_size=3,
                         stride=2,
                         padding=0,
                         count_include_pad=False),
            nn.Conv2d(self.in_channels,
                      32,
                      kernel_size=4,
                      stride=2,
                      padding=1,
                      bias=False), nn.LeakyReLU(0.2),
            nn.Conv2d(32, 64, kernel_size=4, stride=2, padding=1, bias=False),
            nn.InstanceNorm2d(64, affine=True), nn.LeakyReLU(0.2),
            nn.Conv2d(64, 128, kernel_size=4, stride=1, padding=1, bias=False),
            nn.InstanceNorm2d(128, affine=True), nn.LeakyReLU(0.2),
            nn.Conv2d(128,
                      self.out_channels,
                      kernel_size=4,
                      stride=1,
                      padding=1,
                      bias=False))

        # Discriminator having last patch of (1, 30, 30)
        # (batch_size, 3, 128, 128) -> (batch_size, 1, 30, 30)

        self.main_2 = nn.Sequential(
            nn.Conv2d(self.in_channels,
                      self.ndf,
                      kernel_size=4,
                      stride=2,
                      padding=1,
                      bias=False), nn.LeakyReLU(0.2),
            nn.Conv2d(self.ndf,
                      self.ndf * 2,
                      kernel_size=4,
                      stride=2,
                      padding=1,
                      bias=False), nn.InstanceNorm2d(self.ndf * 2,
                                                     affine=True),
            nn.LeakyReLU(0.2),
            nn.Conv2d(self.ndf * 2,
                      self.ndf * 4,
                      kernel_size=4,
                      stride=1,
                      padding=1,
                      bias=False), nn.InstanceNorm2d(self.ndf * 4,
                                                     affine=True),
            nn.LeakyReLU(0.2),
            nn.Conv2d(self.ndf * 4,
                      self.out_channels,
                      kernel_size=4,
                      stride=1,
                      padding=1,
                      bias=False))
Example #20
0
    def __init__(self):
        super(Generator, self).__init__()

        self.net1 = nn.Sequential(nn.ReflectionPad2d((3, 3, 3, 3)),
                                  nn.Conv2d(in_channels=1,
                                            out_channels=64,
                                            kernel_size=7,
                                            stride=1,
                                            padding=0,
                                            bias=False),
                                  nn.InstanceNorm2d(64, eps=1e-5),
                                  nn.ReLU()
                                  )

        self.net2 = nn.Sequential(nn.Conv2d(in_channels=64,
                                            out_channels=128,
                                            kernel_size=3,
                                            stride=2,
                                            padding=1,
                                            bias=False),
                                  nn.InstanceNorm2d(128, eps=1e-5),
                                  nn.ReLU(),

                                  nn.Conv2d(in_channels=128,
                                            out_channels=256,
                                            kernel_size=3,
                                            stride=2,
                                            padding=1,
                                            bias=False),
                                  nn.InstanceNorm2d(256, eps=1e-5),
                                  nn.ReLU()
                                  )

        self.resnet = nn.Sequential()
        for i in range(10):
            self.resnet.add_module('resnet_block', ResnetBlock(dim=256,
                                                               padding_type='reflect',
                                                               use_dropout=False,
                                                               use_bias=False,
                                                               norm_layer=nn.InstanceNorm2d))

        self.net3 = nn.Sequential(nn.ConvTranspose2d(in_channels=256,
                                                     out_channels=128,
                                                     kernel_size=3,
                                                     stride=2,
                                                     padding=1,
                                                     bias=False),
                                  nn.ZeroPad2d((0, 1, 0, 1)),
                                  nn.InstanceNorm2d(128, eps=1e-5),
                                  nn.ReLU(),

                                  nn.ConvTranspose2d(in_channels=128,
                                                     out_channels=64,
                                                     kernel_size=3,
                                                     stride=2,
                                                     padding=1,
                                                     bias=False),
                                  nn.ZeroPad2d((0, 1, 0, 1)),
                                  nn.InstanceNorm2d(64, eps=1e-5),
                                  nn.ReLU(),

                                  nn.ReflectionPad2d((3, 3, 3, 3)),
                                  nn.Conv2d(in_channels=64,
                                            out_channels=1,
                                            kernel_size=7,
                                            stride=1,
                                            padding=0),
                                  nn.Sigmoid()
                                  )
Example #21
0
    def __init__(self, norm_nc, cond_nc):
        super().__init__()

        self.norm = nn.InstanceNorm2d(norm_nc, affine=False)
Example #22
0
 def __init__(self):
     super(GeneratorStructural, self).__init__()
     self.fc1 = nn.Linear(128, 4 * 4 * 1024)
     self.fc1_bn = nn.InstanceNorm2d(1024)
     self.res_block1 = ResidualBlock('G', 1024, 512, resample='up')
     self.relu = nn.ReLU()
 def test_instance_norm(self):
     underlying = nn.InstanceNorm2d(3)
     self.run_model_test(underlying, train=False, batch_size=BATCH_SIZE)
Example #24
0
 def __init__(self, name, in_channels):
     super(Normalize, self).__init__()
     if name == 'D':
         self.norm = Identity()
     else:
         self.norm = nn.InstanceNorm2d(in_channels, affine=True)
    def __init__(
        self,
        in_channels,
        out_channels,
        kernel_size,
        stride=1,
        padding=0,
        dilation=1,
        pad_type="replicate",
        activation="elu",
        norm="none",
        sc=False,
    ):
        super().__init__()
        # Initialize the padding scheme
        if pad_type == "reflect":
            self.pad = nn.ReflectionPad2d(padding)
        elif pad_type == "replicate":
            self.pad = nn.ReplicationPad2d(padding)
        elif pad_type == "zero":
            self.pad = nn.ZeroPad2d(padding)
        else:
            assert 0, f"Unsupported padding type: {pad_type}"

        # Initialize the normalization type
        if norm == "bn":
            self.norm = nn.BatchNorm2d(out_channels)
        elif norm == "in":
            self.norm = nn.InstanceNorm2d(out_channels)
        elif norm == "none":
            self.norm = None
        else:
            assert 0, f"Unsupported normalization: {norm}"

        # Initialize the activation funtion
        if activation == "relu":
            self.activation = nn.ReLU(inplace=True)
        elif activation == "elu":
            self.activation = nn.ELU(alpha=1.0, inplace=True)
        elif activation == "lrelu":
            self.activation = nn.LeakyReLU(0.2, inplace=True)
        elif activation == "prelu":
            self.activation = nn.PReLU()
        elif activation == "selu":
            self.activation = nn.SELU(inplace=True)
        elif activation == "tanh":
            self.activation = nn.Tanh()
        elif activation == "sigmoid":
            self.activation = nn.Sigmoid()
        elif activation == "none":
            self.activation = None
        else:
            assert 0, f"Unsupported activation: {activation}"

        # Initialize the convolution layers
        if sc:
            self.conv2d = nn.Conv2d(in_channels,
                                    out_channels,
                                    kernel_size,
                                    stride,
                                    padding=0,
                                    dilation=dilation)
            self.mask_conv2d = sc_conv(in_channels,
                                       kernel_size,
                                       stride,
                                       padding=0,
                                       dilation=dilation)
        else:
            self.conv2d = nn.Conv2d(in_channels,
                                    out_channels,
                                    kernel_size,
                                    stride,
                                    padding=0,
                                    dilation=dilation)
            # self.mask_conv2d = nn.Conv2d(in_channels, out_channels, kernel_size, stride,
            # padding=0, dilation=dilation)
            self.mask_conv2d = depth_separable_conv(in_channels,
                                                    out_channels,
                                                    kernel_size,
                                                    stride,
                                                    padding=0,
                                                    dilation=dilation)

        self.sigmoid = torch.nn.Sigmoid()
Example #26
0
    def __init__(self,
                 n_intervals,
                 n_blocks=16,
                 inchannels=3,
                 nfeats=64,
                 outchannels=3):
        super(_NetG_SAM, self).__init__()
        self.n_blocks = n_blocks
        self.intervals = n_intervals
        if isinstance(n_intervals, list):
            self.nbody = len(n_intervals)
        if isinstance(n_intervals, int):
            self.nbody = self.n_blocks // n_intervals

        self.conv_input = nn.Conv2d(in_channels=3,
                                    out_channels=64,
                                    kernel_size=9,
                                    stride=1,
                                    padding=4,
                                    bias=False)
        self.relu = nn.LeakyReLU(0.2, inplace=True)

        self.residual = self.make_layer(_Residual_Block, 16)

        self.conv_mid = nn.Conv2d(in_channels=64,
                                  out_channels=64,
                                  kernel_size=3,
                                  stride=1,
                                  padding=1,
                                  bias=False)
        self.bn_mid = nn.InstanceNorm2d(64, affine=True)

        self.upscale4x = nn.Sequential(
            nn.Conv2d(in_channels=64,
                      out_channels=256,
                      kernel_size=3,
                      stride=1,
                      padding=1,
                      bias=False),
            nn.PixelShuffle(2),
            nn.LeakyReLU(0.2, inplace=True),
            nn.Conv2d(in_channels=64,
                      out_channels=256,
                      kernel_size=3,
                      stride=1,
                      padding=1,
                      bias=False),
            nn.PixelShuffle(2),
            nn.LeakyReLU(0.2, inplace=True),
        )

        self.conv_output = nn.Conv2d(in_channels=64,
                                     out_channels=3,
                                     kernel_size=9,
                                     stride=1,
                                     padding=4,
                                     bias=False)

        sam_layer = []
        for _ in range(self.nbody):
            sam_layer.append(SAM(nfeats))
        self.sam_layer = nn.Sequential(*sam_layer)
Example #27
0
    def __init__(self,
                 num_classes,
                 blocks,
                 layers,
                 channels,
                 feature_dim=256,
                 loss='softmax',
                 instance_norm=False,
                 dropout_cfg=None,
                 fpn_cfg=None,
                 pooling_type='avg',
                 input_size=(256, 128),
                 IN_first=False,
                 extra_blocks=False,
                 lct_gate=False,
                 **kwargs):
        self.dropout_cfg = dropout_cfg
        self.extra_blocks = extra_blocks
        self.channel_gate = LCTGate if lct_gate else ChannelGate
        if self.extra_blocks:
            for i, l in enumerate(layers):
                layers[i] = l + 1
        super(OSNetFPN, self).__init__(num_classes, blocks, layers, channels,
                                       feature_dim, loss, instance_norm)

        self.feature_scales = (4, 8, 16, 16)
        if fpn_cfg is not None:
            self.fpn_enable = fpn_cfg.enable
            self.fpn_dim = fpn_cfg.dim
            self.fpn_process = fpn_cfg.process
            assert self.fpn_process in [
                'concatenation', 'max_pooling', 'elementwise_sum'
            ]
        else:
            self.fpn_enable = False
        self.feature_dim = feature_dim

        self.use_IN_first = IN_first
        if IN_first:
            self.in_first = nn.InstanceNorm2d(3, affine=True)
            self.conv1 = ConvLayer(3,
                                   channels[0],
                                   7,
                                   stride=2,
                                   padding=3,
                                   IN=self.use_IN_first)

        if self.fpn_enable:
            self.fpn = FPN(channels, self.feature_scales, self.fpn_dim,
                           self.fpn_dim)
            fpn_out_dim = self.fpn_dim if self.fpn_process in ['max_pooling', 'elementwise_sum'] \
                          else feature_dim
            self.fc = self._construct_fc_layer(feature_dim, fpn_out_dim,
                                               dropout_cfg)
        else:
            self.fpn = None
            self.fc = self._construct_fc_layer(feature_dim, channels[3],
                                               dropout_cfg)

        if self.loss not in [
                'am_softmax',
        ]:
            self.classifier = nn.Linear(self.feature_dim, num_classes)
        else:
            self.classifier = AngleSimpleLinear(self.feature_dim, num_classes)

        if 'conv' in pooling_type:
            kernel_size = (input_size[0] // self.feature_scales[-1],
                           input_size[1] // self.feature_scales[-1])
            if self.fpn_enable:
                self.global_avgpool = nn.Conv2d(fpn_out_dim,
                                                fpn_out_dim,
                                                kernel_size,
                                                groups=fpn_out_dim)
            else:
                self.global_avgpool = nn.Conv2d(channels[3],
                                                channels[3],
                                                kernel_size,
                                                groups=channels[3])
        elif 'avg' in pooling_type:
            self.global_avgpool = nn.AdaptiveAvgPool2d(1)
        elif 'gmp' in pooling_type:
            self.global_avgpool = GeneralizedMeanPooling()
        else:
            raise ValueError('Incorrect pooling type')

        if self.fpn_enable and self.fpn_process == 'concatenation':
            self.fpn_extra_conv = ConvLayer(self.fpn_dim *
                                            len(self.fpn.dims_out),
                                            feature_dim,
                                            3,
                                            stride=1,
                                            padding=1,
                                            IN=False)
        else:
            self.fpn_extra_conv = None

        self._init_params()
 def __init__(self, num_features, norm_layer='in', eps=1e-4):
     super(AdaptiveNorm2dTrainable, self).__init__()
     self.num_features = num_features
     if 'in' in norm_layer:
         self.norm_layer = nn.InstanceNorm2d(num_features, eps=eps, affine=False)
Example #29
0
    def __init__(
        self,
        in_channels,
        out_channels,
        *,
        bottleneck_channels,
        stride=1,
        num_groups=1,
        norm="BN",
        stride_in_1x1=False,
        dilation=1,
        instance_norm=False,
    ):
        """
        Args:
            bottleneck_channels (int): number of output channels for the 3x3
                "bottleneck" conv layers.
            num_groups (int): number of groups for the 3x3 conv layer.
            norm (str or callable): normalization for all conv layers.
                See :func:`layers.get_norm` for supported format.
            stride_in_1x1 (bool): when stride>1, whether to put stride in the
                first 1x1 convolution or the bottleneck 3x3 convolution.
            dilation (int): the dilation rate of the 3x3 conv layer.
            IN (bool): Flag for Instance Normalisation
        """
        super().__init__(in_channels, out_channels, stride)

        if in_channels != out_channels:
            self.shortcut = Conv2d(
                in_channels,
                out_channels,
                kernel_size=1,
                stride=stride,
                bias=False,
                norm=get_norm(norm, out_channels),
            )
        else:
            self.shortcut = None

        # The original MSRA ResNet models have stride in the first 1x1 conv
        # The subsequent fb.torch.resnet and Caffe2 ResNe[X]t implementations have
        # stride in the 3x3 conv
        stride_1x1, stride_3x3 = (stride, 1) if stride_in_1x1 else (1, stride)

        self.conv1 = Conv2d(
            in_channels,
            bottleneck_channels,
            kernel_size=1,
            stride=stride_1x1,
            bias=False,
            norm=get_norm(norm, bottleneck_channels),
        )

        self.conv2 = Conv2d(
            bottleneck_channels,
            bottleneck_channels,
            kernel_size=3,
            stride=stride_3x3,
            padding=1 * dilation,
            bias=False,
            groups=num_groups,
            dilation=dilation,
            norm=get_norm(norm, bottleneck_channels),
        )

        self.conv3 = Conv2d(
            bottleneck_channels,
            out_channels,
            kernel_size=1,
            bias=False,
            norm=get_norm(norm, out_channels),
        )

        for layer in [self.conv1, self.conv2, self.conv3, self.shortcut]:
            if layer is not None:  # shortcut can be None
                weight_init.c2_msra_fill(layer)

        if instance_norm:
            self.instance_norm = nn.InstanceNorm2d(out_channels, affine=True)
        else:
            self.instance_norm = None
Example #30
0
 def __init__(self, out_channels, track_running_stats=True):
     super().__init__()
     self.layer = nn.InstanceNorm2d(
         out_channels, track_running_stats=track_running_stats)