Esempio n. 1
0
    def build_multiscale_classifier(self, input_size):
        n, c, h, w = input_size
        hidden_shapes = []
        for i in range(self.n_scale):
            if i < self.n_scale - 1:
                c *= 2 if self.factor_out else 4
                h //= 2
                w //= 2
            hidden_shapes.append((n, c, h, w))

        classification_heads = []
        for i, hshape in enumerate(hidden_shapes):
            classification_heads.append(
                nn.Sequential(
                    nn.Conv2d(hshape[1], self.classification_hdim, 3, 1, 1),
                    layers.ActNorm2d(self.classification_hdim),
                    nn.ReLU(inplace=True),
                    nn.AdaptiveAvgPool2d((256, 1)),
                ))
        self.classification_heads = nn.ModuleList(classification_heads)
        self.logit_layer = nn.Linear(
            self.classification_hdim * len(classification_heads),
            self.n_classes)
        self.logit_layer_gmm = nn.Sequential(
            nn.AdaptiveAvgPool2d((self.classification_hdim, 1)),
            nn.Linear(1, self.n_classes), nn.Softmax(dim=-1))
Esempio n. 2
0
 def _actnorm(size, fc):
     if fc:
         return FCWrapper(layers.ActNorm1d(size[0] * size[1] * size[2]))
     else:
         return layers.ActNorm2d(size[0])