def test_lstm():
        results = summary(LSTMNet(), (100, ), dtypes=[torch.long])

        assert len(results.summary_list) == 3, "Should find 3 layers"
 def test_exceptions():
     with pytest.raises(RuntimeError):
         summary(EdgeCaseModel(throw_error=True), (1, 28, 28))
     with pytest.raises(TypeError):
         summary(EdgeCaseModel(return_str=True), (1, 28, 28))
    def test_input_tensor():
        input_data = torch.randn(5, 1, 28, 28)

        metrics = summary(SingleInputNet(), input_data)

        assert metrics.input_size == [torch.Size([5, 1, 28, 28])]
 def test_functional_layers():
     summary(FunctionalNet(), (1, 28, 28))
    def test_return_dict():
        input_size = [torch.Size([1, 28, 28]), [12]]

        metrics = summary(ReturnDict(), input_size, col_width=65)

        assert metrics.input_size == [(1, 28, 28), [12]]
    def test_input_size_possibilities():
        test = CustomModule(2, 3)

        summary(test, [(2, )])
        summary(test, ((2, ), ))
        summary(test, (2, ))
        summary(test, [2])
        with pytest.raises(AssertionError):
            summary(test, [(3, 0)])
        with pytest.raises(TypeError):
            summary(test, {0: 1})
        with pytest.raises(TypeError):
            summary(test, "hello")
    def test_siamese_net():
        metrics = summary(SiameseNets(), [(1, 88, 88), (1, 88, 88)])

        assert round(metrics.to_megabytes(metrics.total_input), 2) == 0.06
 def test_model_with_args():
     summary(RecursiveNet(), (64, 28, 28), "args1", args2="args2")
示例#9
0
                   without_t_stride=without_t_stride,
                   temporal_module=temporal_module, dropout=dropout, fpn_dim=fpn_dim,
                   pooling_method=pooling_method, input_channels=input_channels)

    if add_non_local:
        model = make_non_local_v2(model, groups)

    if imagenet_pretrained:
        state_dict = model_zoo.load_url(model_urls['resnet{}'.format(depth)], map_location='cpu')
        state_dict.pop('fc.weight', None)
        state_dict.pop('fc.bias', None)
        if input_channels != 3:  # convert the RGB model to others, like flow
            state_dict = convert_rgb_model_to_others(state_dict, input_channels, 7)
        model.load_state_dict(state_dict, strict=False)

    return model


if __name__ == '__main__':
    from torchsummary import torchsummary
    model = resnet(18, 187, without_t_stride=True, groups=8, dropout=0.5,
                   temporal_module_name=None, dw_conv=True, blending_frames=3,
                   blending_method='sum', fpn_dim=-1, pooling_method='max', input_channels=3)

    dummy_data = (24, 224, 224)
    model.eval()
    model_summary = torchsummary.summary(model, input_size=dummy_data)
    # print(model_summary)
    print(model)
    print(model.network_name)
示例#10
0
def train(args):
    device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
    init_net = nn.DataParallel(models.InitNet(args)).to(device)
    deep_net = nn.DataParallel(models.UNet(args)).to(device)

    print("Data loading.")
    dataset = utils.loader(args)
    print("Data loaded.")

    criterion = nn.L1Loss().to(device)
    optimizer_init = optim.Adam(init_net.parameters())
    optimizer_deep = optim.Adam(deep_net.parameters())
    scheduler_init = optim.lr_scheduler.MultiStepLR(optimizer_init, milestones=[50, 80], gamma=0.1)
    scheduler_deep = optim.lr_scheduler.MultiStepLR(optimizer_deep, milestones=[50, 80], gamma=0.1)

    print("Train start.")
    time_start = time.time()

    if os.path.exists(args.init_state_dict) and os.path.exists(args.deep_state_dict):
        if torch.cuda.is_available():
            checkpoint_init = torch.load(args.init_state_dict)
            checkpoint_deep = torch.load(args.deep_state_dict)
        else:
            checkpoint_init = torch.load(args.init_state_dict, map_location="cpu")
            checkpoint_deep = torch.load(args.deep_state_dict, map_location="cpu")

        init_net.load_state_dict(checkpoint_init["model"])
        optimizer_init.load_state_dict(checkpoint_init["optimizer"])

        deep_net.load_state_dict(checkpoint_deep["model"])
        optimizer_deep.load_state_dict(checkpoint_deep["optimizer"])

        start_epoch = checkpoint_deep["epoch"]
        print("Success loading epoch {}".format(start_epoch))
    else:
        start_epoch = 0
        print("No saved model, start epoch = 0.")

    for epoch in range(start_epoch, args.epochs):
        for idx, item in enumerate(dataset):
            x, _ = item
            x = x.to(device)

            optimizer_init.zero_grad()
            optimizer_deep.zero_grad()

            init_x = init_net(x)
            init_x = utils.reshape(init_x, args)
            deep_x = deep_net(init_x)

            loss_init = criterion(x, init_x)
            loss_deep = criterion(x, init_x + deep_x)

            loss_init.backward(retain_graph=True)
            loss_deep.backward()

            optimizer_init.step()
            optimizer_deep.step()

            use_time = time.time() - time_start
            if (idx + 1) % 20 == 0:
                print("=> epoch: {}, batch: {}, Loss1: {:.4f}, Loss2: {:.4f}, lr1: {}, lr2: {}, used time: {:.4f}"
                      .format(epoch + 1, idx + 1, loss_init.item(), loss_deep.item(),
                              optimizer_init.param_groups[0]['lr'], optimizer_deep.param_groups[0]['lr'], use_time))

        scheduler_init.step()
        scheduler_deep.step()
        state_init = {"model": init_net.state_dict(), "optimizer": optimizer_init.state_dict()}
        state_deep = {"model": deep_net.state_dict(), "optimizer": optimizer_deep.state_dict(), "epoch": epoch + 1}
        torch.save(state_init, args.init_state_dict)
        torch.save(state_deep, args.deep_state_dict)
        print("Check point of epoch {} saved.".format(epoch + 1))

    print("Train end.")
    torchsummary.summary(init_net, (1, 32, 32))
    torchsummary.summary(deep_net, (1, 32, 32))
    with open("./trained_models/init_net.txt", "w") as f1:
        f1.write(torchsummary.summary(init_net, (1, 32, 32)))
    with open("./trained_models/deep_net.txt", "w") as f2:
        f2.write(torchsummary.summary(deep_net, (1, 32, 32)))
示例#11
0
    def test_exception_output(capsys):
        summary(EdgeCaseModel(throw_error=False), (1, 28, 28))
        with pytest.raises(RuntimeError):
            summary(EdgeCaseModel(throw_error=True), (1, 28, 28))

        verify_output(capsys, "unit_test/test_output/exception.out")
示例#12
0
    def test_resnet_out(capsys):
        model = torchvision.models.resnet152()

        summary(model, (3, 224, 224), depth=3)

        verify_output(capsys, "unit_test/test_output/resnet152.out")