Exemplo n.º 1
0
class MyNet(nn.Module):
    def __init__(self, pretrained=False, **kwargs):
        super(MyNet, self).__init__()
        netname = args.arch.split('_')[0]
        if netname == 'resnet152':
            self.model = ResNet(Bottleneck, [3, 8, 36, 3], **kwargs)
        else:
            self.model = ResNet(Bottleneck, [3, 4, 6, 3], **kwargs)
        if pretrained:
            parameters = model_zoo.load_url(model_urls[netname])
            self.model.load_state_dict(parameters)
        self.model.avgpool = nn.AvgPool2d(8)
        self.model.fc = nn.Linear(1024, 1)
        self.model.sig = nn.Sigmoid()

    def forward(self, x):
        x = self.model.conv1(x)
        x = self.model.bn1(x)
        x = self.model.relu(x)
        x = self.model.maxpool(x)
        x = self.model.layer1(x)
        x = self.model.layer2(x)
        x = self.model.layer3(x)
        # x = self.model.layer4(x)
        x = self.model.avgpool(x)
        x = x.view(x.size(0), -1)
        x = self.model.fc(x)
        return self.model.sig(x)
Exemplo n.º 2
0
class OriNet(nn.Module):
    def __init__(self,bits_len,pretrained=False,**kwargs):
        super(OriNet,self).__init__()
        self.bits_len=bits_len
        self.resnetmodel=ResNet(BasicBlock,[2,2,2,2],**kwargs)
        if pretrained:
            parameters=model_zoo.load_url(model_urls['resnet18'])
            self.model.load_state_dict(parameters)
        self.resnetmodel.avgpool=None
        self.resnetmodel.fc1=nn.Linear(512*3*4,512)
        self.resnetmodel.fc2=nn.Linear(512,512)
        self.resnetmodel.classifier=nn.Linear(512,bits_len)
        self.register_buffer('centers',torch.zeros(bits_len,512))

    def forward(self,input1):
        input1=self.resnetmodel.conv1(input1)
        input1=self.resnetmodel.bn1(input1)
        input1=self.resnetmodel.relu(input1)
        input1=self.resnetmodel.maxpool(input1)

        input1=self.resnetmodel.layer1(input1)
        input1=self.resnetmodel.layer2(input1)
        input1=self.resnetmodel.layer3(input1)
        input1=self.resnetmodel.layer4(input1)

        input1=input1.view(input1.size(),-1)
        input1=self.resnetmodel.fc1(input1)
        #feature for center loss
        input1=self.resnetmodel.fc2(input1)
        self.features=input1
        input1=self.resnetmodel.classifier(input1)
        output1=F.log_softmax(input1)

        return output1
Exemplo n.º 3
0
class FaceModel(nn.Module):
    def __init__(self, num_classes, pretrained=False, **kwargs):
        super(FaceModel, self).__init__()
        self.model = ResNet(BasicBlock, [2, 2, 2, 2], **kwargs)
        if pretrained:
            parameters = model_zoo.load_url(model_urls['resnet18'])
            self.model.load_state_dict(parameters)
        self.model.avgpool = None
        self.model.fc1 = nn.Linear(512 * 3 * 4, 512)
        self.model.fc2 = nn.Linear(512, 512)
        self.model.classifier = nn.Linear(512, num_classes)
        self.register_buffer('centers', torch.zeros(num_classes, 512))
        self.num_classes = num_classes

    def forward(self, x):
        x = self.model.conv1(x)
        x = self.model.bn1(x)
        x = self.model.relu(x)
        x = self.model.maxpool(x)
        x = self.model.layer1(x)
        x = self.model.layer2(x)
        x = self.model.layer3(x)
        x = self.model.layer4(x)
        x = x.view(x.size(0), -1)
        x = self.model.fc1(x)
        #feature for center loss
        x = self.model.fc2(x)
        self.features = x
        x = self.model.classifier(x)
        return F.log_softmax(x)
Exemplo n.º 4
0
class ResNeXt50(BaseNetwork):
    def __init__(self, opt):
        super(ResNeXt50, self).__init__()
        self.model = ResNet(Bottleneck, [3, 4, 6, 3],
                            groups=32,
                            width_per_group=4)
        self.opt = opt
        # self.reduced_id_dim = opt.reduced_id_dim
        self.conv1x1 = nn.Conv2d(512 * Bottleneck.expansion,
                                 512,
                                 kernel_size=1,
                                 padding=0)
        self.fc = nn.Linear(512 * Bottleneck.expansion, opt.num_classes)
        # self.fc_pre = nn.Sequential(nn.Linear(512 * Bottleneck.expansion, self.reduced_id_dim), nn.ReLU())

    def load_pretrain(self):
        check_point = torch.load(model_urls['resnext50_32x4d'])
        util.copy_state_dict(check_point, self.model)

    def forward_feature(self, input):
        x = self.model.conv1(input)
        x = self.model.bn1(x)
        x = self.model.relu(x)
        x = self.model.maxpool(x)

        x = self.model.layer1(x)
        x = self.model.layer2(x)
        x = self.model.layer3(x)
        x = self.model.layer4(x)
        net = self.model.avgpool(x)
        net = torch.flatten(net, 1)
        x = self.conv1x1(x)
        # x = self.fc_pre(x)
        return net, x

    def forward(self, input):
        input_batch = input.view(-1, self.opt.output_nc, self.opt.crop_size,
                                 self.opt.crop_size)
        net, x = self.forward_feature(input_batch)
        net = net.view(-1, self.opt.num_inputs, 512 * Bottleneck.expansion)
        x = F.adaptive_avg_pool2d(x, (7, 7))
        x = x.view(-1, self.opt.num_inputs, 512, 7, 7)
        net = torch.mean(net, 1)
        x = torch.mean(x, 1)
        cls_scores = self.fc(net)

        return [net, x], cls_scores