def se_resnet101(num_classes=1_000):

    model = ResNet(SEBottleneck, [3, 4, 23, 3], num_classes=num_classes)
    model.avgpool = nn.AdaptiveAvgPool2d(1)
    return model
        out = self.relu(out)

        out = self.conv3(out)
        out = self.bn3(out)
        out = self.se(out)

        if self.downsample is not None:
            residual = self.downsample(x)

        out += residual
        out = self.relu(out)

        return out


model = ResNet(SEBottleneck, [3, 4, 6, 3], num_classes=10)
print(model)


def se_resnet18(num_classes=1_000):

    model = ResNet(SEBasicBlock, [2, 2, 2, 2], num_classes=num_classes)
    model.avgpool = nn.AdaptiveAvgPool2d(1)
    return model


def se_resnet101(num_classes=1_000):

    model = ResNet(SEBottleneck, [3, 4, 23, 3], num_classes=num_classes)
    model.avgpool = nn.AdaptiveAvgPool2d(1)
    return model
def se_resnet18(num_classes=1_000):

    model = ResNet(SEBasicBlock, [2, 2, 2, 2], num_classes=num_classes)
    model.avgpool = nn.AdaptiveAvgPool2d(1)
    return model
Example #4
0
def resnet34(pretrained=False, model_root=None, **kwargs):
    model = ResNet(BasicBlock, [3, 4, 6, 3], **kwargs)
    if pretrained:
        misc.load_state_dict(model, model_urls['resnet34'], model_root)
    return model
Example #5
0
    Args:
        pretrained (bool): If True, returns a model pre-trained on ImageNet
    """
    model = ResNet(SEBasicBlock, [3, 4, 6, 3], num_classes=num_classes)
    model.avgpool = nn.AdaptiveAvgPool2d(1)
    return model


def se_resnet50(num_classes=1_000, pretrained=False):
    """Constructs a ResNet-50 model.

    Args:
        pretrained (bool): If True, returns a model pre-trained on ImageNet
    """
    model = ResNet(SEBottleneck, [3, 4, 6, 3], num_classes=num_classes)
    model.avgpool = nn.AdaptiveAvgPool2d(1)
    if pretrained:
        model.load_state_dict(
            load_state_dict_from_url(
                "https://github.com/moskomule/senet.pytorch/releases/download/archive/seresnet50-60a8950a85b2b.pkl"
            ))
    return model


def se_resnet101(num_classes=1_000):
    """Constructs a ResNet-101 model.

    Args:
        pretrained (bool): If True, returns a model pre-trained on ImageNet
    """
Example #6
0
def prepare_resnet(resnet: ResNet, num_classes: int):
    resnet.fc = nn.Linear(resnet.fc.in_features, num_classes)
Example #7
0
def train(model: ResNet,
          device: torch.device,
          train_loader: DataLoader,
          val_loader: DataLoader,
          arch: str,
          epochs: int = 160,
          lr: float = 0.1,
          momentum: float = 0.9,
          bn_only: bool = False) -> dict:
    """
    :param bn_only: BN only
    :param model: ResNet model
    :param device: device to inference
    :param train_loader: train loader
    :param val_loader: validation loader
    :param arch: ResNet<Deep>
    :param epochs: number of epochs
    :param lr: base learning rate
    :param momentum: momentum
    :return: dict with statistics
    """
    criterion = nn.CrossEntropyLoss()
    optimizer = optim.SGD(model.parameters(), lr=lr, momentum=momentum)
    lr_scheduler = optim.lr_scheduler.MultiStepLR(optimizer,
                                                  milestones=[80, 120])
    save_steps = (25, 50, 79, 119)
    stats = {"train_loss": [], "val_loss": [], "val_accuracy": []}

    def train_():
        model.train(True)
        total_loss = 0
        for i, (inputs, labels) in enumerate(train_loader):
            inputs = inputs.to(device)
            labels = labels.to(device)
            optimizer.zero_grad()
            outputs = model(inputs)
            loss = criterion(outputs, labels)
            total_loss += loss.item()
            loss.backward()
            optimizer.step()
            if i % 50 == 0:
                print(f"[{epoch + 1}, {i + 1}] loss: {loss.item()}")
        epoch_loss = total_loss / len(train_loader)
        stats["train_loss"].append(epoch_loss)

    def save_():
        local_dir = os.path.join("snapshots", arch)
        os.makedirs(local_dir, exist_ok=True)
        if bn_only:
            save_name = os.path.join(local_dir,
                                     f"snapshot_{epoch + 1}_BN_.pth.tar")
        else:
            save_name = os.path.join(local_dir,
                                     f"snapshot_{epoch + 1}.pth.tar")
        torch.save(model.state_dict(), save_name)
        print(f"Model {save_name} saved")

    def eval_():
        model.train(False)
        total_loss = 0
        total = 0
        correct = 0
        with torch.no_grad():
            for i, (inputs, labels) in enumerate(val_loader):
                inputs = inputs.to(device)
                labels = labels.to(device)
                outputs = model(inputs)
                total_loss += criterion(outputs, labels).item()
                _, predicted = torch.max(outputs.data, 1)
                total += labels.size(0)
                correct += (predicted == labels).sum().item()
            epoch_loss = total_loss / len(val_loader)
            epoch_accuracy = correct / total * 100
            stats["val_loss"].append(epoch_loss)
            stats["val_accuracy"].append(epoch_accuracy)
            print(
                f"Epoch {epoch + 1}: Accuracy: {epoch_accuracy}. Loss: {epoch_loss}"
            )

    for epoch in tqdm(range(epochs)):
        train_()
        print(f"LR: {lr_scheduler.get_last_lr()}")
        lr_scheduler.step()
        eval_()
        if epoch in save_steps:
            save_()
    print("---------- TRAINING IS FINISHED ----------")
    return stats
Example #8
0
def Net(num_classes):
    model = ResNet(Bottleneck, [3, 4, 6, 3], num_classes=num_classes)
    model.avgpool = torch.nn.AdaptiveAvgPool2d(1)
    return model
Example #9
0
def se_resnet34(num_classes=1_000):
    """Constructs a ResNet-34 model.
    Args:
        pretrained (bool): If True, returns a model pre-trained on ImageNet
    """
    model = ResNet(SEBasicBlock, [3, 4, 6, 3], num_classes=num_classes)
    model.avgpool = nn.AdaptiveAvgPool2d(1)
    return model


def se_resnet50(num_classes=1_000, pretrained=False):
    """Constructs a ResNet-50 model.
    Args:
        pretrained (bool): If True, returns a model pre-trained on ImageNet
    """
    model = ResNet(SEBottleneck, [3, 4, 6, 3], num_classes=num_classes)
    model.avgpool = nn.AdaptiveAvgPool2d(1)
    if pretrained:
        model.load_state_dict(
            model_zoo.load_url("https://www.dropbox.com/s/xpq8ne7rwa4kg4c/seresnet50-60a8950a85b2b.pkl"))
    return model


def se_resnet101(num_classes=1_000):
    """Constructs a ResNet-101 model.
    Args:
        pretrained (bool): If True, returns a model pre-trained on ImageNet
    """
    model = ResNet(SEBottleneck, [3, 4, 23, 3], num_classes=num_classes)
    model.avgpool = nn.AdaptiveAvgPool2d(1)
    return model
Example #10
0
def se_resnet34(num_classes=1000):
    model = ResNet(SEBasicBlock, [3, 4, 6, 3], num_classes=num_classes)
    model.avgpool = nn.AdaptiveAvgPool2d(1)
    return model
Example #11
0
        out = self.bn1(out)
        out = self.relu(out)

        out = self.conv2(out)
        out = self.bn2(out)
        out = self.relu(out)

        out = self.conv3(out)
        out = self.bn3(out)
        out = self.se(out)

        if self.downsample is not None:
            residual = self.downsample(x)

        out += residual
        out = self.relu(out)

        return out

def se_resnet50(num_classes=1_000, pretrained=False):
    """Constructs a ResNet-50 model.

    Args:
        pretrained (bool): If True, returns a model pre-trained on ImageNet
    """
    model = ResNet(SEBottleneck, [3, 4, 6, 3], num_classes=num_classes)
    model.avgpool = nn.AdaptiveAvgPool2d(1)
    if pretrained:
        model.load_state_dict(model_zoo.load_url("http://data.lip6.fr/cadene/pretrainedmodels/se_resnet50-ce0d4300.pth"))
    return model
Example #12
0
 def __init__(self, NUM_CLASSES):
     super(ResNet152, self).__init__()
     self.model_name = "ResNet152"
     self.model = ResNet(Bottleneck, [3, 8, 36, 3], num_classes=NUM_CLASSES)
Example #13
0
#!/usr/bin/env python
# encoding: utf-8

"""
@Author: yangwenhao
@Contact: [email protected]
@Software: PyCharm
@File: mem_load_test.py
@Time: 2020/3/29 10:30 PM
@Overview:
"""
import torch
import numpy as np
from torchvision.models import ResNet
from torchvision.models.resnet import BasicBlock

model = ResNet(BasicBlock, [1, 1, 1, 1], num_classes=1000)

Example #14
0
def resnet18(**kwargs):
    """Constructs a ResNet-18 model.
    """
    model = ResNet(BasicBlock, [2, 2, 2, 2], **kwargs)
    model.avgpool = nn.AdaptiveAvgPool2d(1)
    return model
Example #15
0
def resnet152(**kwargs):
    """Constructs a ResNet-152 model.
    """
    model = ResNet(Bottleneck, [3, 8, 36, 3], **kwargs)
    model.avgpool = nn.AdaptiveAvgPool2d(1)
    return model
Example #16
0
def resnet34(**kwargs):
    """Constructs a ResNet-34 model.
    """
    model = ResNet(BasicBlock, [3, 4, 6, 3], **kwargs)
    model.avgpool = nn.AdaptiveAvgPool2d(1)
    return model