Ejemplo n.º 1
0
    def __init__(self, stem, n_classes=21, learned_billinear=False, **kwargs):
        super(fcn8s, self).__init__()
        self.learned_billinear = learned_billinear
        self.n_classes = n_classes
        self.stem = stem(args)

        self.score_pool4 = nn.Conv2d(512, self.n_classes, 1)
        self.score_pool3 = nn.Conv2d(256, self.n_classes, 1)

        if self.learned_billinear:
            self.upscore2 = nn.ConvTranspose2d(self.n_classes,
                                               self.n_classes,
                                               4,
                                               stride=2,
                                               bias=False)
            self.upscore4 = nn.ConvTranspose2d(self.n_classes,
                                               self.n_classes,
                                               4,
                                               stride=2,
                                               bias=False)
            self.upscore8 = nn.ConvTranspose2d(self.n_classes,
                                               self.n_classes,
                                               16,
                                               stride=8,
                                               bias=False)

        for m in self.modules():
            if isinstance(m, nn.ConvTranspose2d):
                m.weight.data.copy_(
                    get_upsampling_weight(m.in_channels, m.out_channels,
                                          m.kernel_size[0]))
Ejemplo n.º 2
0
    def __init__(self, stem, n_classes=21, learned_billinear=False, **kwargs):
        super(fcn32s, self).__init__()
        self.learned_billinear = learned_billinear
        self.n_classes = n_classes
        self.stem = stem(n_classes)
        if self.learned_billinear:
            self.upscore = nn.ConvTranspose2d(n_classes,
                                              n_classes,
                                              64,
                                              stride=32,
                                              bias=False)

        for m in self.modules():
            if isinstance(m, nn.ConvTranspose2d):
                assert m.kernel_size[0] == m.kernel_size[1]
                initial_weight = get_upsampling_weight(m.in_channels,
                                                       m.out_channels,
                                                       m.kernel_size[0])
                m.weight.data.copy_(initial_weight)
Ejemplo n.º 3
0
    def __init__(self,
                 n_classes=21,
                 learned_billinear=False,
                 use_norm=False,
                 use_scale=False,
                 lower_dim=True,
                 weighted_mask=False,
                 offsetting=False,
                 use_norm_weights=False,
                 use_normalize_train=False):
        super(fcn8s, self).__init__()
        self.learned_billinear = learned_billinear
        self.n_classes = n_classes
        self.loss = functools.partial(cross_entropy2d, size_average=False)
        self.use_norm = use_norm
        self.use_norm_weights = use_norm_weights
        self.use_normalize_train = use_normalize_train

        self.multires = True
        self.weighted_mask = weighted_mask
        self.offsetting = offsetting

        self.score_channels = [512, 256]

        self.conv_block1 = nn.Sequential(
            nn.Conv2d(3, 64, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(64, 64, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(2, stride=2, ceil_mode=True),
        )

        self.conv_block2 = nn.Sequential(
            nn.Conv2d(64, 128, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(128, 128, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(2, stride=2, ceil_mode=True),
        )

        self.conv_block3 = nn.Sequential(
            nn.Conv2d(128, 256, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(256, 256, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(256, 256, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(2, stride=2, ceil_mode=True),
        )

        self.conv_block4 = nn.Sequential(
            nn.Conv2d(256, 512, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(512, 512, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(512, 512, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(2, stride=2, ceil_mode=True),
        )

        self.conv_block5 = nn.Sequential(
            nn.Conv2d(512, 512, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(512, 512, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(512, 512, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(2, stride=2, ceil_mode=True),
        )

        if self.use_normalize_train:
            last_layer_cls = CosineSimLayer
        else:
            last_layer_cls = nn.Conv2d

        if lower_dim:
            self.fconv_block = nn.Sequential(
                nn.Conv2d(512, 4096, 1),
                nn.ReLU(inplace=True),
                nn.Dropout2d(),
                nn.Conv2d(4096, 4096, 1),
                nn.ReLU(inplace=True),
                nn.Dropout2d(),
                nn.Conv2d(4096, 256, 1),
            )
            self.classifier = nn.Sequential(
                nn.ReLU(inplace=True),
                nn.Dropout2d(),
                last_layer_cls(256, self.n_classes, 1, bias=False),
            )
        else:
            self.fconv_block = nn.Sequential(
                nn.Conv2d(512, 4096, 7),
                nn.ReLU(inplace=True),
                nn.Dropout2d(),
                nn.Conv2d(4096, 4096, 1),
            )
            self.classifier = nn.Sequential(
                nn.ReLU(inplace=True),
                nn.Dropout2d(),
                last_layer_cls(4096, self.n_classes, 1, bias=False),
            )

        self.score_pool4 = last_layer_cls(512, self.n_classes, 1, bias=False)
        self.score_pool3 = last_layer_cls(256, self.n_classes, 1, bias=False)

        if use_normalize_train and use_scale:
            self.classifier[2].set_scale(use_scale)
            self.score_pool3.set_scale(use_scale)
            self.score_pool4.set_scale(use_scale)

        if self.learned_billinear:
            self.upscore2 = nn.ConvTranspose2d(self.n_classes,
                                               self.n_classes,
                                               4,
                                               stride=2,
                                               bias=False)
            self.upscore4 = nn.ConvTranspose2d(self.n_classes,
                                               self.n_classes,
                                               4,
                                               stride=2,
                                               bias=False)
            self.upscore8 = nn.ConvTranspose2d(self.n_classes,
                                               self.n_classes,
                                               16,
                                               stride=8,
                                               bias=False)

        for m in self.modules():
            if isinstance(m, nn.ConvTranspose2d):
                m.weight.data.copy_(
                    get_upsampling_weight(m.in_channels, m.out_channels,
                                          m.kernel_size[0]))
Ejemplo n.º 4
0
    def __init__(self, n_classes=21, learned_billinear=True):
        super(fcn8s, self).__init__()
        self.learned_billinear = learned_billinear
        self.n_classes = n_classes
        self.loss = functools.partial(cross_entropy2d, size_average=False)

        self.conv_block1 = nn.Sequential(
            # nn.Conv2d(3, 64, 3, padding=100),
            nn.Conv2d(4, 64, 3, padding=100),
            nn.ReLU(inplace=True),
            nn.Conv2d(64, 64, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(2, stride=2, ceil_mode=True),
        )

        self.conv_block2 = nn.Sequential(
            nn.Conv2d(64, 128, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(128, 128, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(2, stride=2, ceil_mode=True),
        )

        self.conv_block3 = nn.Sequential(
            nn.Conv2d(128, 256, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(256, 256, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(256, 256, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(2, stride=2, ceil_mode=True),
        )

        self.conv_block4 = nn.Sequential(
            nn.Conv2d(256, 512, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(512, 512, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(512, 512, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(2, stride=2, ceil_mode=True),
        )

        self.conv_block5 = nn.Sequential(
            nn.Conv2d(512, 512, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(512, 512, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(512, 512, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(2, stride=2, ceil_mode=True),
        )

        self.classifier = nn.Sequential(
            nn.Conv2d(512, 4096, 7),
            nn.ReLU(inplace=True),
            nn.Dropout2d(),
            nn.Conv2d(4096, 4096, 1),
            nn.ReLU(inplace=True),
            nn.Dropout2d(),
            nn.Conv2d(4096, self.n_classes, 1),
        )

        self.score_pool4 = nn.Conv2d(512, self.n_classes, 1)
        self.score_pool3 = nn.Conv2d(256, self.n_classes, 1)

        if self.learned_billinear:
            self.upscore2 = nn.ConvTranspose2d(self.n_classes,
                                               self.n_classes,
                                               4,
                                               stride=2,
                                               bias=False)
            self.upscore4 = nn.ConvTranspose2d(self.n_classes,
                                               self.n_classes,
                                               4,
                                               stride=2,
                                               bias=False)
            self.upscore8 = nn.ConvTranspose2d(self.n_classes,
                                               self.n_classes,
                                               16,
                                               stride=8,
                                               bias=False)

        for m in self.modules():
            if isinstance(m, nn.ConvTranspose2d):
                m.weight.data.copy_(
                    get_upsampling_weight(m.in_channels, m.out_channels,
                                          m.kernel_size[0]))
Ejemplo n.º 5
0
    def __init__(self):
        super(fcn_depth, self).__init__()

        self.conv_block1 = nn.Sequential(
            nn.Conv2d(3, 64, 3, padding=100),
            nn.ReLU(inplace=True),
            nn.Conv2d(64, 64, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(2, stride=2, ceil_mode=True),
        )

        self.conv_block2 = nn.Sequential(
            nn.Conv2d(64, 128, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(128, 128, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(2, stride=2, ceil_mode=True),
        )

        self.conv_block3 = nn.Sequential(
            nn.Conv2d(128, 256, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(256, 256, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(256, 256, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(2, stride=2, ceil_mode=True),
        )

        self.conv_block4 = nn.Sequential(
            nn.Conv2d(256, 512, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(512, 512, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(512, 512, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(2, stride=2, ceil_mode=True),
        )

        self.conv_block5 = nn.Sequential(
            nn.Conv2d(512, 512, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(512, 512, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(512, 512, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(2, stride=2, ceil_mode=True),
        )

        self.classifier = nn.Sequential(
            nn.Conv2d(512, 2048, 7),
            nn.ReLU(inplace=True),
            # nn.Dropout2d(),
            nn.Conv2d(2048, 1024, 1),
            nn.ReLU(inplace=True),
            # nn.Dropout2d(),
            nn.Conv2d(1024, 64, 1),
            nn.ReLU(inplace=True),
            # nn.Dropout2d(),
        )

        self.score_pool4 = nn.Conv2d(512, 64, 1)
        self.score_pool3 = nn.Conv2d(256, 64, 1)

        self.conv3 = nn.Conv2d(64, 1, 1, padding=0)
        self.relu = nn.ReLU(inplace=True)

        # deconvolution
        self.upscore2 = nn.ConvTranspose2d(64, 64, 4,
                                           stride=2, bias=False)
        self.upscore4 = nn.ConvTranspose2d(64, 64, 4,
                                           stride=2, bias=False)
        self.upscore8 = nn.ConvTranspose2d(64, 64, 16,
                                           stride=8, bias=False)

        for m in self.modules():
            if isinstance(m, nn.ConvTranspose2d):
                m.weight.data.copy_(get_upsampling_weight(m.in_channels, 
                                                          m.out_channels, 
                                                          m.kernel_size[0]))
Ejemplo n.º 6
0
    def __init__(self, n_classes=21, learned_billinear=True):
        super(fcn8s, self).__init__()
        self.learned_billinear = learned_billinear
        self.n_classes = n_classes
        self.loss = functools.partial(cross_entropy2d, size_average=False)

        ## Hint: the size of the parameters
        c1, c2, c3, c4, c5, c6, c7 = 64, 128, 256, 512, 512, 4096, 4096

        self.conv_block1 = nn.Sequential(
            nn.Conv2d(3, c1, 3, padding=100),
            nn.ReLU(inplace=True),
            nn.Conv2d(c1, c1, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(2, stride=2, ceil_mode=True),
        )

        ## todo:
        # conv_block2 = nn.Sequential()
        # conv_block2 is missing. However, you know the block2 is similar to block1 with deeper CNN structure.
        # Can you find it out?

        self.conv_block2 = nn.Sequential(
            nn.Conv2d(64, 128, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(128, 128, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(2, stride=2, ceil_mode=True),
        )

        self.conv_block3 = nn.Sequential(
            nn.Conv2d(c2, c3, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(c3, c3, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(c3, c3, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(2, stride=2, ceil_mode=True),
        )

        # todo:
        # conv_block4 is missing. However, you know the block4 is similar to block3 with deeper CNN structure.
        # Can you find it out?

        self.conv_block4 = nn.Sequential(
            nn.Conv2d(256, 512, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(512, 512, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(512, 512, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(2, stride=2, ceil_mode=True),
        )

        self.conv_block5 = nn.Sequential(
            nn.Conv2d(c4, c5, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(c5, c5, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(c5, c5, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(2, stride=2, ceil_mode=True),
        )

        self.classifier = nn.Sequential(
            nn.Conv2d(c5, c6, 7),
            nn.ReLU(inplace=True),
            nn.Dropout2d(),
            nn.Conv2d(c6, c7, 1),
            nn.ReLU(inplace=True),
            nn.Dropout2d(),
            nn.Conv2d(c7, self.n_classes, 1),
        )

        self.score_pool4 = nn.Conv2d(512, self.n_classes, 1)
        self.score_pool3 = nn.Conv2d(256, self.n_classes, 1)

        if self.learned_billinear:
            self.upscore2 = nn.ConvTranspose2d(self.n_classes,
                                               self.n_classes,
                                               4,
                                               stride=2,
                                               bias=False)
            self.upscore4 = nn.ConvTranspose2d(self.n_classes,
                                               self.n_classes,
                                               4,
                                               stride=2,
                                               bias=False)
            self.upscore8 = nn.ConvTranspose2d(self.n_classes,
                                               self.n_classes,
                                               16,
                                               stride=8,
                                               bias=False)

        for m in self.modules():
            if isinstance(m, nn.ConvTranspose2d):
                m.weight.data.copy_(
                    get_upsampling_weight(m.in_channels, m.out_channels,
                                          m.kernel_size[0]))
Ejemplo n.º 7
0
    def __init__(self, params, n_classes=6, learned_billinear=True):
        super(dp_fcn8s, self).__init__()
        self.learned_billinear = learned_billinear
        self.rule = params['rule']  # --rule hebb
        self.n_classes = n_classes  # n_classes == 151
        self.params = params
        self.eta = torch.nn.Parameter(
            (.01 * torch.ones(1)).cuda(),
            requires_grad=True)  # Everyone has the same eta
        self.w = torch.nn.Parameter(
            (.01 * torch.randn(200, params['nbclasses'])).cuda(),
            requires_grad=True)
        #self.w = torch.nn.Parameter((.01 * torch.randn(params['nbclasses'], params['nbclasses'])) )
        if params['alpha'] == 'free':  # --alpha free
            self.alpha = torch.nn.Parameter(
                (.01 * torch.rand(200, params['nbclasses'])).cuda(),
                requires_grad=True
            )  # Note: rand rather than randn (all positive)
        elif params['alpha'] == 'yoked':
            self.alpha = torch.nn.Parameter((.01 * torch.ones(1)).cuda(),
                                            requires_grad=True)
        else:
            raise ValueError(
                "Must select a value for alpha ('free' or 'yoked')")
        #self.loss = functools.partial(cross_entropy2d, size_average=False)

        self.conv_block1 = nn.Sequential(
            nn.Conv2d(3, 64, 3, padding=100),
            nn.ReLU(inplace=True),
            nn.Conv2d(64, 64, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(2, stride=2, ceil_mode=True),
        )

        self.conv_block2 = nn.Sequential(
            nn.Conv2d(64, 128, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(128, 128, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(2, stride=2, ceil_mode=True),
        )

        self.conv_block3 = nn.Sequential(
            nn.Conv2d(128, 256, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(256, 256, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(256, 256, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(2, stride=2, ceil_mode=True),
        )

        self.conv_block4 = nn.Sequential(
            nn.Conv2d(256, 512, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(512, 512, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(512, 512, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(2, stride=2, ceil_mode=True),
        )

        self.conv_block5 = nn.Sequential(
            nn.Conv2d(512, 512, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(512, 512, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(512, 512, 3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(2, stride=2, ceil_mode=True),
        )

        self.conv_block6 = nn.Sequential(
            nn.Conv2d(512, 4096, 7),
            nn.ReLU(inplace=True),
            nn.Dropout2d(),
            nn.Conv2d(4096, 4096, 1),
            nn.ReLU(inplace=True),
            nn.Dropout2d(),
            nn.Conv2d(4096, 200, 1),
        )

        self.score_pool4 = nn.Conv2d(512, self.n_classes, 1)
        self.score_pool3 = nn.Conv2d(256, self.n_classes, 1)

        if self.learned_billinear:
            self.upscore2 = nn.ConvTranspose2d(self.n_classes,
                                               self.n_classes,
                                               4,
                                               stride=2,
                                               bias=False)
            self.upscore4 = nn.ConvTranspose2d(self.n_classes,
                                               self.n_classes,
                                               4,
                                               stride=2,
                                               bias=False)
            self.upscore8 = nn.ConvTranspose2d(self.n_classes,
                                               self.n_classes,
                                               16,
                                               stride=8,
                                               bias=False)

        self.softmax = nn.Softmax(dim=1)
        for m in self.modules():
            if isinstance(m, nn.ConvTranspose2d):
                m.weight.data.copy_(
                    get_upsampling_weight(m.in_channels, m.out_channels,
                                          m.kernel_size[0]))