Esempio n. 1
0
def fit_target(src_model, tgt_model, tgt_opt, disc_model, disc_opt,
               src_trainloader, tgt_trainloader, tgt_valloader, history,
               exp_dict):
    for e in range(history["tgt_train"][-1]["epoch"],
                   exp_dict["tgt_epochs"] + 1):
        # 1. Train disc
        if exp_dict["options"]["disc"] == True:
            fit_discriminator(src_model,
                              tgt_model,
                              disc_model,
                              src_trainloader,
                              tgt_trainloader,
                              opt_tgt=tgt_opt,
                              opt_disc=disc_opt,
                              epochs=3,
                              verbose=0)

        acc_tgt = test.validate(src_model, tgt_model, src_trainloader,
                                tgt_valloader)

        history["tgt_train"] += [{
            "epoch":
            e,
            "acc_src":
            history["src_acc"],
            "acc_tgt":
            acc_tgt,
            "n_train - " + exp_dict["src_dataset"]:
            len(src_trainloader.dataset),
            "n_train - " + exp_dict["tgt_dataset"]:
            len(tgt_trainloader.dataset),
            "n_test - " + exp_dict["tgt_dataset"]:
            len(tgt_valloader.dataset)
        }]

        print("\n>>> Methods: {} - Source: {} -> Target: {}".format(
            None, exp_dict["src_dataset"], exp_dict["tgt_dataset"]))
        print(pd.DataFrame([history["tgt_train"][-1]]))

        if (e % 5) == 0:
            ms.save_model_tgt(exp_dict, history, tgt_model, tgt_opt,
                              disc_model, disc_opt)
            #ms.test_latest_model(exp_dict)

        # 2. Train center-magnet
        if exp_dict["options"]["center"] == True:
            fit_center(src_model,
                       tgt_model,
                       src_trainloader,
                       tgt_trainloader,
                       tgt_opt,
                       epochs=1)

    return history
Esempio n. 2
0
def train(exp_dict):
    history = ms.load_history(exp_dict)

    if 'only_supervised' in exp_dict:
        tgt_trainloader_supervised, tgt_testloader_supervised = ms.get_tgt_loader_supervised(
            exp_dict)
        # load models
        tgt_model, tgt_opt, tgt_scheduler, _, _, _ = ms.load_model_tgt(
            exp_dict)
        fit_source_supervised(tgt_model, tgt_opt, tgt_scheduler,
                              tgt_trainloader_supervised, exp_dict)

        tgt_acc = test.validate(tgt_model, tgt_model,
                                tgt_trainloader_supervised,
                                tgt_testloader_supervised)

        print("{} TEST Accuracy Supervised =========== {:2%}\n".format(
            exp_dict["tgt_dataset"], tgt_acc))
        ms.save_model_tgt(exp_dict, history, tgt_model, tgt_opt)
    else:
        # Source
        src_trainloader, src_valloader = ms.load_src_loaders(exp_dict)

        ####################### 1. Train source model
        src_model, src_opt, src_scheduler = ms.load_model_src(exp_dict)

        # Train Source
        if exp_dict["reset_src"]:
            history = fit_source(src_model, src_opt, src_scheduler,
                                 src_trainloader, history, exp_dict)

        # Test Source
        src_acc = test.validate(src_model, src_model, src_trainloader,
                                src_valloader)

        print("{} TEST Accuracy = {:2%}\n".format(exp_dict["src_dataset"],
                                                  src_acc))
        history["src_acc"] = src_acc

        ms.save_model_src(exp_dict, history, src_model, src_opt)

        ####################### 2. Train target model
        tgt_trainloader, tgt_valloader = ms.load_tgt_loaders(exp_dict)
        #load models
        tgt_model, tgt_opt, tgt_scheduler, disc_model, disc_opt, disc_scheduler = ms.load_model_tgt(
            exp_dict)
        tgt_model.load_state_dict(src_model.state_dict())
        if exp_dict["reset_tgt"]:
            history = fit_target(src_model, tgt_model, tgt_opt, tgt_scheduler,
                                 disc_model, disc_opt, disc_scheduler,
                                 src_trainloader, tgt_trainloader,
                                 tgt_valloader, history, exp_dict)
Esempio n. 3
0
def train(exp_dict):
    history = ms.load_history(exp_dict)

    # Source
    src_trainloader, src_valloader = ms.load_src_loaders(exp_dict)

    ####################### 1. Train source model
    src_model, src_opt = ms.load_model_src(exp_dict)

    # Train Source
    history = fit_source(src_model, src_opt, src_trainloader, history,
                         exp_dict)
    # Test Source
    src_acc = test.validate(src_model, src_model, src_trainloader,
                            src_valloader)

    print("{} TEST Accuracy = {:2%}\n".format(exp_dict["src_dataset"],
                                              src_acc))
    history["src_acc"] = src_acc

    ms.save_model_src(exp_dict, history, src_model, src_opt)

    ####################### 2. Train target model
    tgt_trainloader, tgt_valloader = ms.load_tgt_loaders(exp_dict)

    # load models
    tgt_model, tgt_opt, disc_model, disc_opt = ms.load_model_tgt(exp_dict)
    tgt_model.load_state_dict(src_model.state_dict())

    history = fit_target(src_model, tgt_model, tgt_opt, disc_model, disc_opt,
                         src_trainloader, tgt_trainloader, tgt_valloader,
                         history, exp_dict)

    ms.save_model_tgt(exp_dict, history, tgt_model, tgt_opt, disc_model,
                      disc_opt)

    exp_dict["reset_src"] = 0
    exp_dict["reset_tgt"] = 0
    ms.test_latest_model(exp_dict)
Esempio n. 4
0
def fit_target(src_model, tgt_model, tgt_opt, tgt_scheduler, disc_model,
               disc_opt, disc_scheduler, src_trainloader, tgt_trainloader,
               tgt_valloader, history, exp_dict):
    acc_tgt_old = test.validate(src_model, tgt_model, src_trainloader,
                                tgt_valloader)
    history["tgt_train"] += [{
        "epoch":
        0,
        "acc_src":
        history["src_acc"],
        "acc_tgt":
        acc_tgt_old,
        "n_train - " + exp_dict["src_dataset"]:
        len(src_trainloader.dataset),
        "n_train - " + exp_dict["tgt_dataset"]:
        len(tgt_trainloader.dataset),
        "n_test - " + exp_dict["tgt_dataset"]:
        len(tgt_valloader.dataset)
    }]

    print("\n>>> Methods: {} - Source: {} -> Target: {} ---------- Originally".
          format(None, exp_dict["src_dataset"], exp_dict["tgt_dataset"]))
    print(pd.DataFrame([history["tgt_train"][-1]]))
    ms.save_model_tgt(exp_dict, history, tgt_model, tgt_opt, disc_model,
                      disc_opt)

    if 'tgt_supervised' in exp_dict:
        tgt_trainloader_supervised, tgt_testloader_supervised = ms.get_tgt_loader_supervised(
            exp_dict)
        tgt_acc_old = 0
    ####
    tgt_scheduler = torch.optim.lr_scheduler.MultiStepLR(
        tgt_opt, milestones=[exp_dict['tgt_epochs'] // 2], gamma=0.1)
    disc_scheduler = torch.optim.lr_scheduler.MultiStepLR(
        disc_opt, milestones=[exp_dict['tgt_epochs'] // 2], gamma=0.1)
    ####
    for e in range(history["tgt_train"][-1]["epoch"] + 1,
                   exp_dict["tgt_epochs"] + 1):
        # train supervised by target

        # 1. Train disc
        if exp_dict["options"]["disc"] == True:
            fit_discriminator(src_model,
                              tgt_model,
                              disc_model,
                              src_trainloader,
                              tgt_trainloader,
                              opt_tgt=tgt_opt,
                              opt_disc=disc_opt,
                              epochs=exp_dict['tgt_disc_epochs'],
                              verbose=0)

        print("\n>>> Source: {} -> Target: {} - Epochs: [{}/{}]".format(
            exp_dict["src_dataset"], exp_dict["tgt_dataset"], e,
            exp_dict["tgt_epochs"]))

        #### 1.2. fit supervised training
        if 'tgt_supervised' in exp_dict:
            fit_source_supervised(tgt_model, tgt_opt, tgt_scheduler,
                                  tgt_trainloader_supervised, exp_dict)

        # save and test model
        test_epoch = 1  #exp_dict["tgt_epochs"] ##// 5
        if e % test_epoch == 0:
            if 'tgt_supervised' not in exp_dict:
                acc_tgt = test.validate(src_model, tgt_model, src_trainloader,
                                        tgt_valloader)

                history["tgt_train"] += [{
                    "epoch":
                    e,
                    "acc_src":
                    history["src_acc"],
                    "acc_tgt":
                    acc_tgt,
                    "n_train - " + exp_dict["src_dataset"]:
                    len(src_trainloader.dataset),
                    "n_train - " + exp_dict["tgt_dataset"]:
                    len(tgt_trainloader.dataset),
                    "n_test - " + exp_dict["tgt_dataset"]:
                    len(tgt_valloader.dataset)
                }]

                print("\n>>> Methods: {} - Source: {} -> Target: {}".format(
                    None, exp_dict["src_dataset"], exp_dict["tgt_dataset"]))
                print(pd.DataFrame([history["tgt_train"][-1]]))

                ms.save_model_tgt(exp_dict, history, tgt_model, tgt_opt,
                                  disc_model, disc_opt)
                # if acc_tgt >= acc_tgt_old:
                # ms.save_model_tgt(exp_dict, history, tgt_model, tgt_opt,
                # disc_model, disc_opt)
                # acc_tgt_old = acc_tgt

            else:
                tgt_acc = test.validate(tgt_model, tgt_model,
                                        tgt_trainloader_supervised,
                                        tgt_testloader_supervised)

                print("{} TEST Accuracy Supervised =========== {:2%}\n".format(
                    exp_dict["tgt_dataset"], tgt_acc))

                ms.save_model_tgt(exp_dict, history, tgt_model, tgt_opt,
                                  disc_model, disc_opt)
                # if tgt_acc >= tgt_acc_old:
                # ms.save_model_tgt(exp_dict, history, tgt_model, tgt_opt, disc_model, disc_opt)
                # tgt_acc_old = tgt_acc

        # 2. Train center-magnet
        if exp_dict["options"]["center"] == True:
            fit_center(src_model,
                       tgt_model,
                       src_trainloader,
                       tgt_trainloader,
                       tgt_opt,
                       epochs=exp_dict['tgt_embedding_epochs'])

        disc_scheduler.step()
        tgt_scheduler.step()

    return history
Esempio n. 5
0
def train(exp_dict):
    history = ms.load_history(exp_dict)

    #Simone:
    data_transform = transforms.Compose([
        transforms.Resize((exp_dict['image_size'], exp_dict['image_size']),
                          interpolation=1),
        transforms.ToTensor()
    ])

    # CUDA for PyTorch
    use_cuda = torch.cuda.is_available()
    device = torch.device("cuda:0" if use_cuda else "cpu")

    history = ms.load_history(exp_dict)

    src_trainloader = get_coxs2v_trainset(
        exp_dict["still_dir"],
        exp_dict["video1_dir"],
        exp_dict["video1_pairs"],
        train_folds,
        exp_dict["cross_validation_num_fold"],
        data_transform,
        people_per_batch,
        images_per_person,
        video_only=True,
        samples_division_list=[0.6, 0.4],  # [0.6, 0.4]
        div_idx=0)

    src_valloader = get_coxs2v_trainset(
        exp_dict["still_dir"],
        exp_dict["video1_dir"],
        exp_dict["video1_pairs"],
        train_folds,
        exp_dict["cross_validation_num_fold"],
        data_transform,
        people_per_batch,
        images_per_person,
        video_only=True,
        samples_division_list=[0.6, 0.4],  # [0.6, 0.4]
        div_idx=1)

    # Source
    #src_trainloader, src_valloader = ms.load_src_loaders(exp_dict)

    ####################### 1. Train source model
    src_model, src_opt = ms.load_model_src(exp_dict)

    # Train Source
    history = fit_source(src_model, src_opt, src_trainloader, history,
                         exp_dict)
    # Test Source
    src_acc = test.validate(src_model, src_model, src_trainloader,
                            src_valloader)

    print("{} TEST Accuracy = {:2%}\n".format(exp_dict["src_dataset"],
                                              src_acc))
    history["src_acc"] = src_acc

    ms.save_model_src(exp_dict, history, src_model, src_opt)

    ####################### 2. Train target model

    #tgt_trainloader, tgt_valloader = ms.load_tgt_loaders(exp_dict)

    tgt_trainloader = get_coxs2v_trainset(
        exp_dict["still_dir"],
        exp_dict["video2_dir"],
        exp_dict["video2_pairs"],
        train_folds,
        exp_dict["cross_validation_num_fold"],
        data_transform,
        people_per_batch,
        images_per_person,
        video_only=True,
        samples_division_list=[0.6, 0.4],  # [0.6, 0.4]
        div_idx=0)

    tgt_valloader = get_coxs2v_trainset(
        exp_dict["still_dir"],
        exp_dict["video2_dir"],
        exp_dict["video2_pairs"],
        train_folds,
        exp_dict["cross_validation_num_fold"],
        data_transform,
        people_per_batch,
        images_per_person,
        video_only=True,
        samples_division_list=[0.6, 0.4],  # [0.6, 0.4]
        div_idx=1)

    # load models
    tgt_model, tgt_opt, disc_model, disc_opt = ms.load_model_tgt(exp_dict)
    tgt_model.load_state_dict(src_model.state_dict())

    history = fit_target(src_model, tgt_model, tgt_opt, disc_model, disc_opt,
                         src_trainloader, tgt_trainloader, tgt_valloader,
                         history, exp_dict)

    ms.save_model_tgt(exp_dict, history, tgt_model, tgt_opt, disc_model,
                      disc_opt)

    exp_dict["reset_src"] = 0
    exp_dict["reset_tgt"] = 0
    ms.test_latest_model(exp_dict)
Esempio n. 6
0
def train(exp_dict):
    history = ms.load_history(exp_dict)

    # Source
    src_trainloader, src_valloader = ms.load_src_loaders(exp_dict)
    #####################
    ## Train source model
    #####################
    src_model, src_opt = ms.load_model_src(exp_dict)

    # Train Source
    for e in range(history["src_train"][-1]["epoch"], exp_dict["src_epochs"]):
        train_dict = ts.fit_src(src_model, src_trainloader, src_opt)

        loss = train_dict["loss"]
        print("Source ({}) - Epoch [{}/{}] - loss={:.2f}".format(
            type(src_trainloader).__name__, e, exp_dict["src_epochs"], loss))

        history["src_train"] += [{"loss": loss, "epoch": e}]

        if e % 50 == 0:
            ms.save_model_src(exp_dict, history, src_model, src_opt)

    # Test Source
    src_acc = test.validate(src_model, src_model, src_trainloader,
                            src_valloader)

    print("{} TEST Accuracy = {:2%}\n".format(exp_dict["src_dataset"],
                                              src_acc))
    history["src_acc"] = src_acc

    ms.save_model_src(exp_dict, history, src_model, src_opt)

    #####################
    ## Train Target model
    #####################
    tgt_trainloader, tgt_valloader = ms.load_tgt_loaders(exp_dict)

    # load models
    tgt_model, tgt_opt, disc_model, disc_opt = ms.load_model_tgt(exp_dict)
    tgt_model.load_state_dict(src_model.state_dict())

    for e in range(history["tgt_train"][-1]["epoch"],
                   exp_dict["tgt_epochs"] + 1):
        # 1. Train disc
        if exp_dict["options"]["disc"] == True:
            tg.fit_disc(src_model,
                        tgt_model,
                        disc_model,
                        src_trainloader,
                        tgt_trainloader,
                        opt_tgt=tgt_opt,
                        opt_disc=disc_opt,
                        epochs=3,
                        verbose=0)

        acc_tgt = test.validate(src_model, tgt_model, src_trainloader,
                                tgt_valloader)

        history["tgt_train"] += [{
            "epoch":
            e,
            "acc_src":
            src_acc,
            "acc_tgt":
            acc_tgt,
            "n_train - " + exp_dict["src_dataset"]:
            len(src_trainloader.dataset),
            "n_train - " + exp_dict["tgt_dataset"]:
            len(tgt_trainloader.dataset),
            "n_test - " + exp_dict["tgt_dataset"]:
            len(tgt_valloader.dataset)
        }]

        print("\n>>> Methods: {} - Source: {} -> Target: {}".format(
            None, exp_dict["src_dataset"], exp_dict["tgt_dataset"]))
        print(pd.DataFrame([history["tgt_train"][-1]]))

        if (e % 5) == 0:
            ms.save_model_tgt(exp_dict, history, tgt_model, tgt_opt,
                              disc_model, disc_opt)
            #ms.test_latest_model(exp_dict)

        # 2. Train center-magnet
        if exp_dict["options"]["center"] == True:
            tg.fit_center(src_model,
                          tgt_model,
                          src_trainloader,
                          tgt_trainloader,
                          tgt_opt,
                          epochs=1)

    ms.save_model_tgt(exp_dict, history, tgt_model, tgt_opt, disc_model,
                      disc_opt)

    exp_dict["reset_src"] = 0
    exp_dict["reset_tgt"] = 0
    ms.test_latest_model(exp_dict)