Example #1
0
def create_dataloader(args):
    train_transform = transforms.Compose([
        # Resize(128),
        transforms.Scale(256),
        transforms.RandomCrop((224, 224)),
        transforms.ToTensor(),
        transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
        # transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5])

    ])

    test_transform = transforms.Compose([
        # Resize(128),
        transforms.Scale(256),
        transforms.CenterCrop((224, 224)),
        transforms.ToTensor(),
        # transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5])
        transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
    ])

    train_path = os.path.join(args.data_path, 'train')
    test_path = os.path.join(args.data_path, 'test')
    train_dataset = dataset.ImageFolder(root=train_path, ground_truth=True, transform=train_transform)
    train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=args.batch_size, shuffle=True, num_workers=4)

    test_dataset = dataset.ImageFolder(root=test_path, ground_truth=False, transform=test_transform)
    test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=1, shuffle=False, num_workers=4)

    return train_loader, test_loader
Example #2
0
def get_data_file_list(root,
                       file_list,
                       batch_size,
                       train,
                       num_workers=0,
                       new_size=236,
                       crop_size=224):
    if train:
        transform = transforms.Compose([
            transforms.Scale(new_size),
            transforms.RandomSizedCrop(crop_size),
            transforms.RandomHorizontalFlip(),
            transforms.ToTensor(),
            transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225))
        ])
    else:
        transform = transforms.Compose([
            transforms.Resize((crop_size, crop_size)),
            transforms.ToTensor(),
            transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225))
        ])

    dataset = ImageLabelFilelist(root, file_list, transform=transform)
    loader = DataLoader(dataset=dataset,
                        batch_size=batch_size,
                        shuffle=train,
                        drop_last=True,
                        num_workers=num_workers)
    return loader
def main(args):
    cfg_from_file(args.cfg)
    np.random.seed(args.seed)
    torch.manual_seed(args.seed)
    torch.cuda.manual_seed_all(args.seed)
    outputer = Outputer(args.output_dir, cfg.IMAGETEXT.PRINT_EVERY,
                        cfg.IMAGETEXT.SAVE_EVERY)
    outputer.log(cfg)
    imsize = cfg.TREE.BASE_SIZE * (2**(cfg.TREE.BRANCH_NUM - 1))
    val_transform = transforms.Compose([
        transforms.Scale(int(imsize * 76 / 64)),
        transforms.CenterCrop(imsize),
    ])
    if args.dataset == 'bird':
        val_dataset = ImageTextDataset(args.data_dir,
                                       'test',
                                       transform=val_transform,
                                       sample_type='test')
    elif args.dataset == 'coco':
        val_dataset = CaptionDataset(args.data_dir,
                                     'val',
                                     transform=val_transform,
                                     sample_type='test')
    else:
        raise NotImplementedError

    val_dataloader = torch.utils.data.DataLoader(val_dataset,
                                                 batch_size=1,
                                                 shuffle=False,
                                                 num_workers=int(cfg.WORKERS))
    if args.raw_checkpoint != '':
        outputer.log("load raw checkpoint from {}".format(args.raw_checkpoint))
        encoder, decoder = load_raw_checkpoint(args.raw_checkpoint)
    else:
        # define the model
        encoder = Encoder()
        encoder.fine_tune(False)
        decoder = DecoderWithAttention(
            attention_dim=cfg.IMAGETEXT.ATTENTION_DIM,
            embed_dim=cfg.IMAGETEXT.EMBED_DIM,
            decoder_dim=cfg.IMAGETEXT.DECODER_DIM,
            vocab_size=val_dataset.n_words)
        assert args.model_path != ""
        outputer.log("load model dict from {}".format(args.model_path))
        encoder, decoder = load_checkpoint(encoder, decoder, args.model_path)
        encoder.fine_tune(False)
    encoder, decoder = encoder.cuda(), decoder.cuda()
    outputer.log("eval the model...")
    pred_file = os.path.join(outputer.log_folder, 'pred_result.csv')
    eval_rtn, outputer = evaluate(val_dataloader, encoder, decoder, outputer,
                                  args.beam_size, pred_file)
    outputer.log("eval result: {}".format(dict2str(eval_rtn)))
Example #4
0
    def __init__(self, N, train=True, seed=42, device='cpu', noise_std=0.1):
        np.random.seed(seed)
        self.IMG_WIDTH, self.IMG_HEIGHT = 28, 28
        self.mnist = datasets.MNIST('../data',
                                    train=train,
                                    download=True,
                                    transform=transforms.Compose([
                                        transforms.Scale(self.IMG_WIDTH),
                                        transforms.ToTensor(),
                                        transforms.Normalize([0.5], [0.5])
                                    ]))

        self.n = len(self.mnist)
        self.N = N
        self.device = device
        self.noise_std = noise_std
Example #5
0
def get_transform(args):
    if args.dataset == 'celeba':
        crop_size = 108
        re_size = 64
        offset_height = (218 - crop_size) // 2
        offset_width = (178 - crop_size) // 2
        crop = lambda x: x[:, offset_height:offset_height + crop_size,
                offset_width:offset_width + crop_size]
        preprocess = transforms.Compose(
                [transforms.ToTensor(),
                    transforms.Lambda(crop),
                    transforms.ToPILImage(),
                    transforms.Scale(size=(re_size, re_size), interpolation=Image.BICUBIC),
                    transforms.ToTensor(),
                    transforms.Normalize(mean=[0.5] * 3, std=[0.5] * 3)])
    return preprocess
    model_ft.fc = torch.nn.Linear(num_ftrs, 2)
    learning_rate = 0.001
    criterion = torch.nn.CrossEntropyLoss()
    optimizer_ft = torch.optim.SGD(model_ft.parameters(),
                                   lr=0.001,
                                   momentum=0.9)
    exp_lr_scheduler = lr_scheduler.StepLR(optimizer_ft,
                                           step_size=7,
                                           gamma=0.1)

    if is_cuda:
        model_ft = model_ft.cuda()
        print("model_ft", model_ft)

    simple_transform = transforms.Compose([
        transforms.Scale((224, 224)),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ])
    # p = "C:/Users/a/Downloads/train/train/dog"

    train = ImageFolder("C:/Users/a/Downloads/train/train/", simple_transform)
    valid = ImageFolder("C:/Users/a/Downloads/train/valid/", simple_transform)

    train_data_gen = torch.utils.data.DataLoader(train,
                                                 batch_size=64,
                                                 num_workers=3)

    valid_data_gen = torch.utils.data.DataLoader(valid,
                                                 batch_size=64,
                                                 num_workers=3)
Example #7
0
 def Scale(self, **args):
     return self._add(transforms.Scale(**args))
Example #8
0
    snapshot_path = args.snapshot

    # ResNet50 structure
    model = hopenet.Hopenet(torchvision.models.resnet.Bottleneck, [3, 4, 6, 3],
                            66)

    print 'Loading snapshot.'
    # Load snapshot
    save_state_dict = torch.load(snapshot_path)
    model.load_state_dict(save_state_dict)

    print 'Loading data.'

    transformations = transforms.Compose([
        transforms.Scale(140),
        transforms.CenterCrop(128),
        transforms.ToTensor(),
        transforms.Normalize(mean=[0.485, 0.456, 0.406],
                             std=[0.229, 0.224, 0.225])
    ])

    if args.dataset == 'Driver_Test':
        print args.data_dir, args.filename_list
        pose_dataset = datasets.Driver_Test(args.data_dir, args.filename_list,
                                            transformations)
    elif args.dataset == 'By_TXT':
        pose_dataset = datasets.Driver_Train_TXT(args.filename_list,
                                                 transformations)

    test_loader = torch.utils.data.DataLoader(dataset=pose_dataset,
Example #9
0
def train():

    # Define training hyperparameters
    epochs = 5
    learning_rate = 0.02
    log_interval = 10
    training_batch_size = 128
    testing_batch_size = 1000
    crop_size = 28

    channels = 3
    image_size = 64

    #Adam optimizer parameter
    beta1 = 0.5

    # number of gpus
    ngpu = 1

    num_epochs = 5

    # Decide which device we want to run on
    #device = torch.device("cuda:0" if (torch.cuda.is_available() and ngpu > 0) else "cpu")

    # Create the generator
    generator = Generator(128)
    discriminator = Discriminator(128)

    #if (device.type == 'cuda') and (ngpu > 1):
    #   generator = nn.DataParallel(generator, list(range(ngpu)))
    #   discriminator = nn.DataParallel(discriminator, list(range(ngpu)))

    # Apply the weights_init function to randomly initialize all weights
    #  to mean=0, stdev=0.2.
    generator.apply(weights_init)
    discriminator.apply(weights_init)

    transform = transforms.Compose([
        transforms.Scale(image_size),
        transforms.ToTensor(),
        transforms.Normalize([0.5], [0.5])
    ])

    # Load Training Data...
    training_data_path = 'cars_train'

    #NOTE: Comment either out for training on a specific dataset

    #dataset = torchvision.datasets.ImageFolder('cars_train',transform=transform)
    dataset = torchvision.datasets.MNIST('./',
                                         train=True,
                                         transform=transform,
                                         target_transform=None,
                                         download=True)
    data_loader = torch.utils.data.DataLoader(dataset,
                                              batch_size=training_batch_size,
                                              shuffle=True,
                                              num_workers=4)

    # Plot some training images
    real_batch = next(iter(data_loader))
    plt.figure(figsize=(8, 8))
    plt.axis("off")
    plt.title("Training Images")
    plt.imshow(
        np.transpose(
            vutils.make_grid(real_batch[0][:64], padding=2,
                             normalize=True).cpu(), (1, 2, 0)))
    #plt.show()

    size = len(dataset)

    # Initialize BCELoss function
    criterion = nn.BCEWithLogitsLoss()

    # Create batch of latent vectors
    fixed_noise = torch.randn(64, 100, 1, 1)
    real_label = 1
    fake_label = 0

    # Setup Adam optimizers for both G and D
    D_optimizer = optim.Adam(discriminator.parameters(),
                             lr=learning_rate,
                             betas=(beta1, 0.999))
    G_optimizer = optim.Adam(generator.parameters(),
                             lr=learning_rate,
                             betas=(beta1, 0.999))

    # Lists to keep track of progress
    img_list = []
    G_losses = []
    D_losses = []
    iters = 0

    print("Starting Training Loop...")

    for epoch in range(num_epochs):

        for i, data in enumerate(data_loader, 0):

            ## Train with real data batch
            discriminator.zero_grad()

            real_cpu = data[0]
            b_size = real_cpu.size(0)
            l = list(data[1].size())[0]

            output_real = torch.ones(l)
            output_fake = torch.zeros(l)
            output = discriminator(data[0]).view(-1)

            d_real_image_error = criterion(output, output_real)

            # Calculate gradients for D in backward pass
            d_real_image_error.backward()
            D_x = output.mean().item()

            #noise vector
            noise = torch.randn(b_size, 100, 1, 1)
            # Generate fake image batch with G
            fake = generator(noise)
            #label.fill_(fake_label)
            # Classify all fake batch with D
            output = discriminator(fake.detach()).view(-1)
            # Calculate D's loss on the all-fake batch
            d_fake_image_error = criterion(output, output_fake)
            # Calculate the gradients for this batch
            d_fake_image_error.backward()
            D_G_z1 = output.mean().item()
            errD = d_real_image_error + d_fake_image_error
            # Update D
            D_optimizer.step()

            #Update the Generator
            generator.zero_grad()
            #label.fill_(label)
            output = discriminator(fake).view(-1)
            generator_err = criterion(output, output_real)
            # Calculate gradients for G
            generator_err.backward()
            D_G_z2 = output.mean().item()
            G_optimizer.step()

            # Save Losses for plotting later
            G_losses.append(generator_err.item())
            D_losses.append(errD.item())

            iters += 1
            print("iters: " + str(iters))

        stamp = datetime.now().strftime("%m%d%Y_%H%M%S")
        save_network(generator, discriminator, stamp, epoch)
def main(args):
    cfg_from_file(args.cfg)
    if args.gpu_id != -1:
        cfg.GPU_ID = args.gpu_id
    else:
        cfg.CUDA = False

    if args.data_dir != '':
        cfg.DATA_DIR = args.data_dir

    if args.textimage_nete_path != '':
        cfg.TRAIN.NET_E = args.textimage_nete_path
    pprint(cfg)
    np.random.seed(args.seed)
    torch.manual_seed(args.seed)
    outputer = Outputer(args.output_dir, cfg.IMAGETEXT.PRINT_EVERY,
                        cfg.IMAGETEXT.SAVE_EVERY)
    outputer.log(cfg)
    imsize = cfg.TREE.BASE_SIZE * (2**(cfg.TREE.BRANCH_NUM - 1))
    val_transform = transforms.Compose([
        transforms.Scale(int(imsize * 76 / 64)),
        transforms.CenterCrop(imsize),
    ])
    if args.dataset == 'bird':
        imagetext_val_dataset = ImageTextDataset(args.data_dir,
                                                 'test',
                                                 transform=val_transform,
                                                 sample_type='test')
    elif args.dataset == 'coco':
        imagetext_val_dataset = CaptionDataset(args.data_dir,
                                               'val',
                                               transform=val_transform,
                                               sample_type='test')
    else:
        raise NotImplementedError
    imagetext_val_dataloader = torch.utils.data.DataLoader(
        imagetext_val_dataset,
        batch_size=1,
        shuffle=False,
        num_workers=int(cfg.WORKERS))

    # evaluation imagetext model
    if args.imagetext_model_path != '':
        outputer.log("load raw checkpoint from: {}".format(
            args.imagetext_model_path))
        if os.path.splitext(
                args.imagetext_model_path)[-1] == '.tar':  # raw checkpoint
            imagetext_encoder, imagetext_decoder = load_raw_checkpoint(
                args.imagetext_model_path)
        else:  #define the model
            imagetext_encoder = Encoder()
            imagetext_encoder.fine_tune(False)
            imagetext_decoder = DecoderWithAttention(
                attention_dim=cfg.IMAGETEXT.ATTENTION_DIM,
                embed_dim=cfg.IMAGETEXT.EMBED_DIM,
                decoder_dim=cfg.IMAGETEXT.DECODER_DIM,
                vocab_size=imagetext_val_dataset.n_words)
            imagetext_encoder, imagetext_decoder = load_checkpoint(
                imagetext_encoder, imagetext_decoder,
                args.imagetext_model_path)
    else:
        print("the model path for imagetext model is NULL")
        raise ValueError

    imagetext_encoder, imagetext_decoder = imagetext_encoder.cuda(
    ), imagetext_decoder.cuda()
    text_file = os.path.join(outputer.log_folder, "pred_result.csv")
    imagetext_eval_rtn, outputer = evaluate(imagetext_val_dataloader,
                                            imagetext_encoder,
                                            imagetext_decoder, outputer,
                                            args.beam_size, text_file)
    # write the pred to local file
    text_list = []
    filename_list = []
    with open(text_file, 'r') as fp:
        for _l in fp.readlines():
            data_list = _l.strip().split(',')
            text_list.append(data_list[-2])
            filename_list.append(data_list[-1])

    #--------- generate images from the text -------#
    if args.dataset == 'bird':
        textimage_val_dataset = TextDataset(args.data_dir,
                                            'test',
                                            base_size=cfg.TREE.BASE_SIZE,
                                            transform=val_transform)
    elif args.dataset == 'coco':
        textimage_val_dataset = CaptionDatasetMultisize(
            args.data_dir,
            'val',
            base_size=cfg.TREE.BASE_SIZE,
            transform=val_transform)
    else:
        raise ValueError
    textimage_val_dataloader = torch.utils.data.DataLoader(
        textimage_val_dataset, batch_size=1)
    image_output_dir = os.path.join(args.output_dir, "images")
    algo = trainer(image_output_dir, textimage_val_dataloader,
                   textimage_val_dataset.n_words,
                   textimage_val_dataset.ixtoword)
    gen_example(textimage_val_dataset.wordtoix, algo, text_list, filename_list)
Example #11
0
def main():

    # img_folders = ["../coco_img/bg2_0/", "../coco_img/bg2_127/", "../coco_img/bg2_255/",
    # "../coco_img/obj2_0/", "../coco_img/obj2_127/", "../coco_img/obj2_255/"]

    img_folders = [
        "../coco_img/merged_bg2_0/", "../coco_img/merged_bg2_127/",
        "../coco_img/merged_bg2_255/", "../coco_img/merged_obj2_0/",
        "../coco_img/merged_obj2_127/", "../coco_img/merged_obj2_255/"
    ]
    img_folders = ["../coco_img/org/"]

    model_name = "MLCCOCO"

    model = MultilabelObject(None, 80).cuda()

    log_dir = "./"
    checkpoint = torch.load(os.path.join(log_dir, 'model_best.pth.tar'),
                            encoding='bytes')
    new_checkpoint = OrderedDict()
    for k in checkpoint[b'state_dict']:
        new_checkpoint[k.decode('utf-8')] = checkpoint[b'state_dict'][k]

    model.load_state_dict(new_checkpoint)
    model.eval()

    with open("classes_list.pickle", "rb") as f:
        classes_list = pickle.load(f)

    for img_folder in img_folders:

        crop_size = 224
        image_size = 256
        batch_size = 64
        normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406],
                                         std=[0.229, 0.224, 0.225])

        val_transform = transforms.Compose([
            transforms.Scale(image_size),
            transforms.CenterCrop(crop_size),
            transforms.ToTensor(), normalize
        ])

        cocomlc = COCO_MLC(img_folder, val_transform)

        test_loader = torch.utils.data.DataLoader(cocomlc,
                                                  batch_size=batch_size,
                                                  shuffle=False,
                                                  num_workers=8,
                                                  pin_memory=True)

        t = tqdm(test_loader, desc='testing {}'.format(img_folder))

        result = {}

        for batch_idx, (imgs, paths) in enumerate(t):

            images = imgs.cuda()
            # print(images.shape)

            probs, labels, labels_probs = infer_batch(model,
                                                      classes_list,
                                                      inputs=images,
                                                      threshold=0.5)

            for i in range(0, len(paths)):
                path = paths[i]
                result[path] = {
                    "prob": probs[i],
                    "labels": labels[i],
                    "labels_probs": labels_probs[i]
                }

        pickle_file_name = "{}_{}.pickle".format(
            model_name, os.path.basename(os.path.normpath(img_folder)))
        pickle_path = os.path.join(".", "result_pickle", pickle_file_name)
        with open(pickle_path, 'wb') as handle:
            pickle.dump(result, handle)
        print("Done, Saved to {}".format(pickle_path))
Example #12
0
def train(nb_epoch,
          batch_size,
          store_name,
          image_path,
          soft_labels=False,
          gaussian_std=1.5,
          resume=False,
          start_epoch=0,
          model_path=None):
    batch_size = int(batch_size)
    nb_epoch = int(nb_epoch)
    start_epoch = int(start_epoch)

    exp_dir = store_name
    try:
        os.stat(exp_dir)
    except:
        os.makedirs(exp_dir)

    use_cuda = torch.cuda.is_available()
    # GPU
    # Data
    print('==> Preparing data..')
    transform_train = transforms.Compose([
        transforms.Scale((550, 550)),
        transforms.RandomCrop(448, padding=8),
        transforms.RandomHorizontalFlip(),
        transforms.ToTensor(),
        transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)),
    ])

    transform_test = transforms.Compose([
        transforms.Scale((550, 550)),
        transforms.CenterCrop(448),
        transforms.ToTensor(),
        transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)),
    ])

    trainset = YearBuiltFolder(image_path,
                               calc_perf=True,
                               soft_labels=soft_labels,
                               gaussian_std=gaussian_std,
                               transforms=transform_train)

    train_weights = np.array(trainset.train_weights)
    train_sampler = torch.utils.data.WeightedRandomSampler(train_weights,
                                                           len(train_weights),
                                                           replacement=True)

    if use_cuda:
        device = 'cuda'
    else:
        device = 'cpu'

    trainloader = torch.utils.data.DataLoader(trainset,
                                              batch_size=batch_size,
                                              shuffle=(train_sampler == None),
                                              num_workers=4,
                                              sampler=train_sampler)

    # Testing is on the same data but without the transforms. This whole class
    # only givey training performance and the user has to use the detect script
    # to check the performance.
    train_set_without_transforms = YearBuiltFolder(image_path,
                                                   calc_perf=True,
                                                   soft_labels=soft_labels,
                                                   gaussian_std=gaussian_std,
                                                   transforms=transform_test)

    train_test_loader = torch.utils.data.DataLoader(
        train_set_without_transforms,
        batch_size=3,
        shuffle=True,
        num_workers=4)

    # Model
    if resume:
        net = torch.load(model_path)
    else:
        net = load_model(model_name='resnet50_pmg',
                         pretrain=True,
                         require_grad=True,
                         num_classes=len(trainset.classes))
    netp = torch.nn.DataParallel(net)

    net.to(device)

    if soft_labels:
        loss = nn.KLDivLoss(reduction='batchmean')
    else:
        loss = nn.CrossEntropyLoss()

    sm = nn.LogSoftmax(dim=1)

    optimizer = optim.SGD([{
        'params': net.classifier_concat.parameters(),
        'lr': 0.002
    }, {
        'params': net.conv_block1.parameters(),
        'lr': 0.002
    }, {
        'params': net.classifier1.parameters(),
        'lr': 0.002
    }, {
        'params': net.conv_block2.parameters(),
        'lr': 0.002
    }, {
        'params': net.classifier2.parameters(),
        'lr': 0.002
    }, {
        'params': net.conv_block3.parameters(),
        'lr': 0.002
    }, {
        'params': net.classifier3.parameters(),
        'lr': 0.002
    }, {
        'params': net.features.parameters(),
        'lr': 0.0002
    }],
                          momentum=0.9,
                          weight_decay=5e-4)

    max_train_acc = 0
    lr = [0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.0002]
    for epoch in range(start_epoch, nb_epoch):
        print('\nEpoch: %d' % epoch)
        net.train()
        train_loss = 0
        train_loss1 = 0
        train_loss2 = 0
        train_loss3 = 0
        train_loss4 = 0
        correct = 0
        total = 0
        idx = 0
        for batch_idx, (inputs, targets, indexes) in enumerate(trainloader):
            idx = batch_idx
            if inputs.shape[0] < batch_size:
                continue
            if use_cuda:
                inputs, targets = inputs.to(device), targets.to(device)
            inputs, targets = Variable(inputs), Variable(targets)

            # update learning rate
            for nlr in range(len(optimizer.param_groups)):
                optimizer.param_groups[nlr]['lr'] = cosine_anneal_schedule(
                    epoch, nb_epoch, lr[nlr])

            # Step 1
            optimizer.zero_grad()
            inputs1 = jigsaw_generator(inputs, 8)
            output_1, _, _, _ = netp(inputs1)

            loss1 = loss(sm(output_1), targets) * 1
            loss1.backward()
            optimizer.step()

            # Step 2
            optimizer.zero_grad()
            inputs2 = jigsaw_generator(inputs, 4)
            _, output_2, _, _ = netp(inputs2)
            loss2 = loss(sm(output_2), targets) * 1
            loss2.backward()
            optimizer.step()

            # Step 3
            optimizer.zero_grad()
            inputs3 = jigsaw_generator(inputs, 2)
            _, _, output_3, _ = netp(inputs3)
            loss3 = loss(sm(output_3), targets) * 1
            loss3.backward()
            optimizer.step()

            # Step 4
            optimizer.zero_grad()
            _, _, _, output_concat = netp(inputs)
            concat_loss = loss(sm(output_concat), targets) * 2
            concat_loss.backward()
            optimizer.step()

            #  training log
            _, predicted = torch.max(output_concat.data, 1)
            if soft_labels:
                _, targets = torch.max(targets.data, 1)

            total += targets.size(0)
            correct += predicted.eq(targets.data).cpu().sum()

            train_loss += (loss1.item() + loss2.item() + loss3.item() +
                           concat_loss.item())
            train_loss1 += loss1.item()
            train_loss2 += loss2.item()
            train_loss3 += loss3.item()
            train_loss4 += concat_loss.item()

            if batch_idx % 50 == 0:
                print(
                    'Step: %d | Loss1: %.3f | Loss2: %.5f | Loss3: %.5f | Loss_concat: %.5f | Loss: %.3f | Acc: %.3f%% (%d/%d)'
                    % (batch_idx, train_loss1 / (batch_idx + 1), train_loss2 /
                       (batch_idx + 1), train_loss3 /
                       (batch_idx + 1), train_loss4 /
                       (batch_idx + 1), train_loss / (batch_idx + 1),
                       100. * float(correct) / total, correct, total))

        train_acc = 100. * float(correct) / total
        train_loss = train_loss / (idx + 1)
        with open(os.path.join(exp_dir, 'results_train.txt'), 'a') as file:
            file.write(
                'Iteration %d | train_acc = %.5f | train_loss = %.5f | Loss1: %.3f | Loss2: %.5f | Loss3: %.5f | Loss_concat: %.5f |\n'
                % (epoch, train_acc, train_loss, train_loss1 /
                   (idx + 1), train_loss2 / (idx + 1), train_loss3 /
                   (idx + 1), train_loss4 / (idx + 1)))

        # if epoch < 5 or epoch >= 80:
        print('Start testing')
        if soft_labels:
            train_acc, train_acc_com, train_loss, y_gt, y_pred = test_softlabels(
                net, loss, train_test_loader)
        else:
            train_acc, train_acc_com, train_loss, y_gt, y_pred = test(
                net, loss, train_test_loader)
        if train_acc_com > max_train_acc:
            max_train_acc = train_acc_com
            net.cpu()
            torch.save(net, os.path.join(store_name, 'model_best.pth'))
            net.to(device)
        with open(os.path.join(exp_dir, 'results_test.txt'), 'a') as file:
            file.write(
                'Iteration %d, test_acc = %.5f, test_acc_combined = %.5f, test_loss = %.6f\n'
                % (epoch, train_acc, train_acc_com, train_loss))

        net.cpu()
        torch.save(
            net, os.path.join(store_name, 'model_epoch_{}.pth'.format(epoch)))
        net.to(device)
Example #13
0
import cv2
import torch as t
import numpy as np
from torch.tensor import Tensor
from torchvision.transforms import transforms
from torchvision.transforms import ToPILImage

to_pil_image = ToPILImage()

transform = transforms.Compose([
    transforms.ToTensor(),  # 转为Tensor
    transforms.Scale((32, 32)), # resize
    # transforms.CenterCrop((32, 32)),
    transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)),  # 归一化
])


# todo: 训练模型
#   1. 构造训练集
#   2. 读取训练集
#   3. 算法(网络定义)
#   4. 保存模型文件,输出验证集结果

def read_image(image_path):
    """读出图片数据"""
    img = transform(cv2.cvtColor(cv2.imread(image_path), cv2.COLOR_RGB2BGR))
    img = np.reshape(img, (3, 32, 32))
    # debug: 输出图片
    # img = to_pil_image(img)
    # img.show()
    return Tensor(img).unsqueeze(0)
Example #14
0
#def nms(dets, thresh):
#    "Dispatch to either CPU or GPU NMS implementations.\
#    Accept dets as tensor"""
#    return pth_nms(dets, thresh)

normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406],
                                 std=[0.229, 0.224, 0.225])

IMG_SIZE = (480, 640)
HEATMAP_SIZE = (29, 39)
TEMPLATE_SIZE = 124

PREPROCESS = [
    transforms.Compose(
        [transforms.Scale(IMG_SIZE[0]),
         transforms.ToTensor(), normalize]),
    transforms.Compose(
        [transforms.Scale(TEMPLATE_SIZE),
         transforms.ToTensor(), normalize]),
    transforms.Compose(
        [transforms.Scale(TEMPLATE_SIZE),
         transforms.ToTensor()]),
    transforms.Compose(
        [transforms.Scale(TEMPLATE_SIZE),
         transforms.ToTensor(), normalize]),
    transforms.Compose(
        [transforms.Scale(TEMPLATE_SIZE),
         transforms.ToTensor()])
]