コード例 #1
0
    def extract(self, x, label):
        conv1 = self.conv_block1(x)
        conv2 = self.conv_block2(conv1)
        conv3 = self.conv_block3(conv2)
        conv4 = self.conv_block4(conv3)
        conv5 = self.conv_block5(conv4)
        fconv = self.fconv_block(conv5)

        if self.use_norm_weights:
            fconv_norm = l2_norm(fconv)
            conv3_norm = l2_norm(conv3)
            conv4_norm = l2_norm(conv4)
        else:
            fconv_norm = fconv
            conv3_norm = conv3
            conv4_norm = conv4

        if self.weighted_mask:
            fconv_pooled = weighted_masked_embeddings(fconv_norm.shape, label,
                                                      fconv_norm, self.n_classes)
            conv3_pooled = weighted_masked_embeddings(conv3_norm.shape, label,
                                                      conv3_norm, self.n_classes)
            conv4_pooled = weighted_masked_embeddings(conv4_norm.shape, label,
                                                      conv4_norm, self.n_classes)
        else:
            fconv_pooled = masked_embeddings(fconv_norm.shape, label, fconv_norm,
                                             self.n_classes)
            conv3_pooled = masked_embeddings(conv3_norm.shape, label, conv3_norm,
                                             self.n_classes)
            conv4_pooled = masked_embeddings(conv4_norm.shape, label, conv4_norm,
                                             self.n_classes)

        return fconv_pooled, conv4_pooled, conv3_pooled
コード例 #2
0
    def forward(self, x):
        conv1 = self.conv_block1(x)
        conv2 = self.conv_block2(conv1)
        conv3 = self.conv_block3(conv2)
        conv4 = self.conv_block4(conv3)
        conv5 = self.conv_block5(conv4)
        fconv = self.fconv_block(conv5)

        if self.use_norm:
            fconv = l2_norm(fconv)
        if self.use_scale:
            fconv = self.scale * fconv

        score = self.classifier(fconv)

        if self.use_norm:
            conv2 = l2_norm(conv2)
            conv1 = l2_norm(conv1)

        if self.use_scale:
            conv2 = self.scale * conv2
            conv1 = self.scale * conv1

        if self.multires:
            score_pool4 = self.score_pool4(conv2)
            score_pool3 = self.score_pool3(conv1)
            score = F.upsample(score, score_pool4.size()[2:])
            score += score_pool4
            score = F.upsample(score, score_pool3.size()[2:])
            score += score_pool3

        out = F.upsample(score, x.size()[2:])

        return out
コード例 #3
0
    def forward(self, x):
#        if not self.training:
#            if self.multires:
#                print('MultiRes Classifier with Alpha = 0.5')
#            else:
#                print('Vanilla Classifier with Alpha = 0.05')
        conv1 = self.conv_block1(x)
        conv2 = self.conv_block2(conv1)
        conv3 = self.conv_block3(conv2)
        conv4 = self.conv_block4(conv3)
        conv5 = self.conv_block5(conv4)
        fconv = self.fconv_block(conv5)

        if self.use_norm:
            fconv = l2_norm(fconv)
        if self.use_scale:
            fconv = self.scale * fconv

        score = self.classifier(fconv)

        if self.learned_billinear:
            upscore2 = self.upscore2(score)
            score_pool4c = self.score_pool4(conv4)[:, :, 5:5+upscore2.size()[2],
                                                         5:5+upscore2.size()[3]]
            upscore_pool4 = self.upscore4(upscore2 + score_pool4c)

            score_pool3c = self.score_pool3(conv3)[:, :, 9:9+upscore_pool4.size()[2],
                                                         9:9+upscore_pool4.size()[3]]

            out = self.upscore8(score_pool3c + upscore_pool4)[:, :, 31:31+x.size()[2],
                                                                    31:31+x.size()[3]]
            return out.contiguous()
        else:
            if self.use_norm:
                conv4 = l2_norm(conv4)
                conv3 = l2_norm(conv3)

            if self.use_scale:
                conv4 = self.scale * conv4
                conv3 = self.scale * conv3

            if self.multires:
                score_pool4 = self.score_pool4(conv4)
                score_pool3 = self.score_pool3(conv3)
                score = F.upsample(score, score_pool4.size()[2:])
                score += score_pool4
                score = F.upsample(score, score_pool3.size()[2:])
                score += score_pool3

            if self.offsetting:
                pad = 100
                if not self.training:
                    target_size = [s+pad*2 for s in x.size()[2:]]
                    out = F.upsample(score, target_size)
                    out = out[:, :, pad:-pad, pad:-pad]
                else:
                    target_size = [s+2*pad for s in x.size()[2:]]
                    out = F.upsample(score, target_size)
            else:
                out = F.upsample(score, x.size()[2:])

        return out