Exemple #1
0
def main():
    opt = TestOptions()
    args = opt.initialize()    
    
    if not os.path.exists(args.save):
        os.makedirs(args.save)
        
    model = CreateModel(args)
    
    
    model.eval()
    model.cuda()    
    targetloader = CreateTrgDataLoader(args)
    
    for index, batch in enumerate(targetloader):
        if index % 100 == 0:
            print '%d processd' % index
        image, _, name = batch
        output = model(Variable(image).cuda())
        output = nn.functional.upsample(output, (1024, 2048), mode='bilinear', align_corners=True).cpu().data[0].numpy()
        output = output.transpose(1,2,0)
        output_nomask = np.asarray(np.argmax(output, axis=2), dtype=np.uint8)
        output_col = colorize_mask(output_nomask)
        output_nomask = Image.fromarray(output_nomask)    
        name = name[0].split('/')[-1]
        output_nomask.save('%s/%s' % (args.save, name))
        output_col.save('%s/%s_color.png' % (args.save, name.split('.')[0])) 
        
    compute_mIoU(args.gt_dir, args.save, args.devkit_dir, args.restore_from)    
Exemple #2
0
def main():
    testing_entropy = 0
   
    args = parse_args()    
    
    if not os.path.exists(args.save):
        os.makedirs(args.save)
        
    args.init_weights = root_base+'/snapshots/' + args.model_name
    
    model = CreateModel(args)
    
    
    model.eval()
    model.cuda()    
    targetloader = CreateTrgDataLoader(args)
    
    for index, batch in tqdm.tqdm(enumerate(targetloader)):
        
        image, _, name,_ = batch
        output = model(Variable(image).cuda())
        output = nn.functional.softmax(output, dim=1)
        testing_entropy += self_entropy(roll_axis(output.cpu().data[0].numpy()))
        output = nn.functional.upsample(output, (1024, 2048), mode='bilinear', align_corners=True).cpu().data[0].numpy()
        #output = np.multiply(output,priors)
        output = output.transpose(1,2,0)
        output_nomask = np.asarray(np.argmax(output, axis=2), dtype=np.uint8)
        output_col = colorize_mask(output_nomask)
        output_nomask = Image.fromarray(output_nomask)    
        name = name[0].split('/')[-1]
        output_nomask.save('%s/%s' % (args.save, name))
        output_col.save('%s/%s_color.png' % (args.save, name.split('.')[0])) 
        
    mIou_ = compute_mIoU(args.gt_dir, args.save, args.devkit_dir, '')    
Exemple #3
0
def main():
    opt = TestOptions()
    args = opt.initialize()

    if not os.path.exists(args.save):
        os.makedirs(args.save)
    maxiou = 0
    root = args.restore_from

    for i in range(1, 51):
        #args.restore_from = './snapshots/gta2city_vgg/gta5_{0:d}'.format(i*2000)
        args.restore_from = root + '_{0:d}'.format(i * 2000)
        model = CreateModel(args)
        print(args.restore_from)

        model.eval()
        model.cuda()
        targetloader = CreateTrgDataLoader(args)

        for index, batch in enumerate(targetloader):
            if index % 100 == 0:
                print '%d processd' % index
            image, _, name = batch
            output1, output2 = model(Variable(image).cuda())
            output = output1 + output2
            output = nn.functional.softmax(output, dim=1)
            output = nn.functional.upsample(
                output, (1024, 2048), mode='bilinear',
                align_corners=True).cpu().data[0].numpy()
            output = output.transpose(1, 2, 0)
            output_nomask = np.asarray(np.argmax(output, axis=2),
                                       dtype=np.uint8)
            output_col = colorize_mask(output_nomask)
            output_nomask = Image.fromarray(output_nomask)
            name = name[0].split('/')[-1]
            output_nomask.save('%s/%s' % (args.save, name))
            output_col.save('%s/%s_color.png' %
                            (args.save, name.split('.')[0]))

        iou = compute_mIoU(args.gt_dir, args.save, args.devkit_dir,
                           args.restore_from)
        #print(save_path)
        if iou > maxiou:
            maxiou = iou
            best_model = args.restore_from
        print('The best model is {:s}, the best IOU is {:f}'.format(
            best_model, maxiou))
Exemple #4
0
def main():
    opt = TestOptions()
    args = opt.initialize()
    if args.target == 'deepglobe':
        size = 612
    elif args.target == 'deepglobe224':
        size = 224
    elif args.target == 'worldview' or args.target == 'worldviewFI' or args.target == 'worldviewGR' or args.target == 'worldviewFIc' or args.target == 'worldviewc':
        size = 512
    elif args.target == 'sentinel' or args.target == 'sentinelFI' or args.target == 'sentinelGR' or args.target == 'sentinelc':
        size = 224
    if args.target == 'pleiades' or args.target == 'pleiadesFI' or args.target == 'pleiadesGR':
        size = 448

    if not os.path.exists(args.save):
        os.makedirs(args.save)

    model = CreateModel(args)

    model.eval()
    model.cuda()
    targetloader = CreateTrgDataLoader(args)

    for index, batch in enumerate(targetloader):
        if index % 100 == 0:
            print('%d processd' % index)
        image, _, name = batch
        output = model(Variable(image).cuda())
        output = nn.functional.softmax(output, dim=1)
        output = nn.functional.upsample(
            output, (size, size), mode='bilinear',
            align_corners=True).cpu().data[0].numpy()
        output = output.transpose(1, 2, 0)
        output_nomask = np.asarray(np.argmax(output, axis=2), dtype=np.uint8)
        output_col = colorize_mask(output_nomask)
        output_nomask = Image.fromarray(output_nomask)
        name = name[0].split('/')[-1]
        if args.target == 'deepglobe' or args.target == 'deepglobe224':
            output_nomask.save('%s/%s.png' %
                               (args.save, os.path.splitext(name)[0]))
        else:
            output_nomask.save('%s/%s.png' % (args.save, name))
        output_col.save('%s/%s_color.png' % (args.save, name.split('.')[0]))

    compute_mIoU(args.gt_dir, args.save, args.target, args.devkit_dir,
                 args.restore_from)
Exemple #5
0
def main():

    opt = TrainOptions()
    args = opt.initialize()

    _t = {'iter time': Timer()}

    if not os.path.exists(args.snapshot_dir):
        os.makedirs(args.snapshot_dir)
        os.makedirs(os.path.join(args.snapshot_dir, 'logs'))
    opt.print_options(args)

    targetloader = CreateActTrgDataLoader(args, 'train')
    targetloader_iter = iter(targetloader)
    testloader = CreateActTrgDataLoader(args, 'test')

    model, optimizer = CreateModel(args)

    start_iter = 0
    if args.restore_from is not None:
        start_iter = int(args.restore_from.rsplit('/', 1)[1].rsplit('_')[1])

    train_writer = tensorboardX.SummaryWriter(
        os.path.join(args.snapshot_dir, "logs"))

    bce_loss = torch.nn.BCEWithLogitsLoss()

    cudnn.enabled = True
    cudnn.benchmark = True
    model.train()
    model.cuda()
    loss = ['loss_trg', 'eval_loss']
    _t['iter time'].tic()
    best_loss_eval = None
    best_step = 0
    eval_loss = np.array([0])
    for i in range(start_iter, args.num_steps):
        model.train()
        model.module.adjust_learning_rate(args, optimizer, i)

        optimizer.zero_grad()

        try:
            trg_img, trg_lbl, _, paths = next(targetloader_iter)
        except StopIteration:
            targetloader_iter = iter(targetloader)
            trg_img, trg_lbl, _, paths = next(targetloader_iter)
        trg_score, loss_trg = model(trg_img, lbl=trg_lbl)

        loss_trg = loss_trg
        loss_trg.mean().backward()

        optimizer.step()

        if (i + 1) % args.save_pred_every == 0:
            with torch.no_grad():
                model.eval()
                eval_loss = 0
                for test_img, test_lbl, _, _ in testloader:
                    test_score, loss_test = model(test_img, lbl=test_lbl)
                    eval_loss += loss_test.mean().item() * test_img.size(0)
                eval_loss /= len(testloader.dataset)
                if best_loss_eval == None or eval_loss < best_loss_eval:
                    best_loss_eval = eval_loss
                    best_step = i + 1
                print('taking snapshot ... eval_loss: {}'.format(eval_loss))
                torch.save(
                    model.module.state_dict(),
                    os.path.join(args.snapshot_dir,
                                 str(i + 1) + '.pth'))
                eval_loss = np.array([eval_loss])

        if (i + 1) % args.print_freq == 0:
            _t['iter time'].toc(average=False)
            print('[it %d][src loss %.4f][lr %.4f][%.2fs]' % \
                    (i + 1, loss_trg.mean().data, optimizer.param_groups[0]['lr']*10000, _t['iter time'].diff))
            if i + 1 > args.num_steps_stop:
                print('finish training')
                break
            _t['iter time'].tic()

        for m in loss:
            train_writer.add_scalar(m, eval(m).mean(), i + 1)
Exemple #6
0
            best_maxSAD = maxSAD
            best_avgSAD = avgSAD
            torch.save(MODEL.state_dict(), PTH)
            print(f'saving(best_maxSAD)... {PTH} ')
        elif maxSAD == best_maxSAD:
            if avgSAD < best_avgSAD:
                best_maxSAD = maxSAD
                best_avgSAD = avgSAD
                torch.save(MODEL.state_dict(), PTH)
                print(f'saving(best_avgSAD)... {PTH} ')
        else:
            print()

print('Finished Training')

MODEL.eval()

avgSAD = list()
maxSAD = list()
for idx, data in enumerate(data_iter):
    X_, Y_ = data
    Y_ = Y_.to('cuda')

    Y_pred = MODEL(X_)
    Y_pred += 0.5
    Y_pred = torch.clamp(Y_pred, 0., 1.)
    Y_pred = torch.round(255 * Y_pred)

    Y_tmp = Y_
    Y_tmp += 0.5
    Y_tmp = torch.round(255 * Y_tmp)
Exemple #7
0
def main():
    opt = TestOptions()
    args = opt.initialize()
    os.environ["CUDA_VISIBLE_DEVICES"] = args.GPU

    if not os.path.exists(args.save):
        os.makedirs(args.save)

    # 3 models are used because MBT method is used.
    args.restore_from = args.restore_opt1
    model1 = CreateModel(args)
    model1.eval()
    model1.cuda()

    args.restore_from = args.restore_opt2
    model2 = CreateModel(args)
    model2.eval()
    model2.cuda()

    args.restore_from = args.restore_opt3
    model3 = CreateModel(args)
    model3.eval()
    model3.cuda()

    targetloader = CreateTrgDataLoader(args)

    # change the mean for different dataset other than CS
    IMG_MEAN = np.array((104.00698793, 116.66876762, 122.67891434),
                        dtype=np.float32)
    IMG_MEAN = torch.reshape(torch.from_numpy(IMG_MEAN), (1, 3, 1, 1))
    mean_img = torch.zeros(1, 1)

    # ------------------------------------------------- #
    # compute scores and save them
    with torch.no_grad():
        for index, batch in enumerate(targetloader):
            if index % 100 == 0:
                print('%d processd' % index)
            image, _, name = batch  # 1. get image
            # create mean image
            if mean_img.shape[-1] < 2:
                B, C, H, W = image.shape
                # 2. get mean image
                mean_img = IMG_MEAN.repeat(B, 1, H, W)
            image = image.clone() - mean_img  # 3, image - mean_img
            image = Variable(image).cuda()

            # forward
            output1 = model1(image)
            output1 = nn.functional.softmax(output1, dim=1)

            output2 = model2(image)
            output2 = nn.functional.softmax(output2, dim=1)

            output3 = model3(image)
            output3 = nn.functional.softmax(output3, dim=1)

            a, b = 0.3333, 0.3333
            output = a * output1 + b * output2 + (1.0 - a - b) * output3

            output = nn.functional.interpolate(
                output, (1024, 2048), mode='bilinear',
                align_corners=True).cpu().data[0].numpy()
            #output = nn.functional.upsample(   output, (1024, 2048), mode='bilinear', align_corners=True).cpu().data[0].numpy()
            output = output.transpose(1, 2, 0)

            output_nomask = np.asarray(np.argmax(output, axis=2),
                                       dtype=np.uint8)
            output_col = colorize_mask(output_nomask)
            output_nomask = Image.fromarray(output_nomask)
            name = name[0].split('/')[-1]
            output_nomask.save('%s/%s' % (args.save, name))
            output_col.save('%s/%s_color.png' %
                            (args.save, name.split('.')[0]))
    # scores computed and saved
    # ------------------------------------------------- #
    compute_mIoU(args.gt_dir, args.save, args.devkit_dir, args.restore_from)
Exemple #8
0
def main():

    opt = TrainOptions()
    args = opt.initialize()

    _t = {'iter time': Timer()}

    if not os.path.exists(args.snapshot_dir):
        os.makedirs(args.snapshot_dir)
        os.makedirs(os.path.join(args.snapshot_dir, 'logs'))
    opt.print_options(args)

    sourceloader, targetloader = CreateActSrcDataLoader(
        args), CreateActTrgDataLoader(args, 'train')
    testloader = CreateActTrgDataLoader(args, 'test')
    targetloader_iter, sourceloader_iter = iter(targetloader), iter(
        sourceloader)

    model, optimizer = CreateModel(args)
    model_D, optimizer_D = CreateDiscriminator(args)

    start_iter = 0
    if args.restore_from is not None:
        start_iter = int(args.restore_from.rsplit('/', 1)[1].rsplit('_')[1])

    train_writer = tensorboardX.SummaryWriter(
        os.path.join(args.snapshot_dir, "logs"))

    bce_loss = torch.nn.BCEWithLogitsLoss()

    cudnn.enabled = True
    cudnn.benchmark = True
    model.train()
    model.cuda()
    model_D.train()
    model_D.cuda()
    loss = [
        'loss_src', 'loss_trg', 'loss_D_trg_fake', 'loss_D_src_real',
        'loss_D_trg_real', 'eval_loss'
    ]
    _t['iter time'].tic()
    best_loss_eval = None
    best_step = 0
    eval_loss = np.array([0])
    for i in range(start_iter, args.num_steps):

        model.module.adjust_learning_rate(args, optimizer, i)
        model_D.module.adjust_learning_rate(args, optimizer_D, i)

        optimizer.zero_grad()
        optimizer_D.zero_grad()
        for param in model_D.parameters():
            param.requires_grad = False

        try:
            src_img, src_lbl, _, _ = next(sourceloader_iter)
        except StopIteration:
            sourceloader_iter = iter(sourceloader)
            src_img, src_lbl, _, _ = next(sourceloader_iter)
        src_img, src_lbl = Variable(src_img).cuda(), Variable(
            src_lbl.long()).cuda()
        src_score, loss_src = model(src_img, lbl=src_lbl)
        loss_src.mean().backward()

        try:
            trg_img, trg_lbl, _, _ = next(targetloader_iter)
        except StopIteration:
            targetloader_iter = iter(targetloader)
            trg_img, trg_lbl, _, _ = next(targetloader_iter)
        trg_img, trg_lbl = Variable(trg_img).cuda(), Variable(
            trg_lbl.long()).cuda()
        trg_score, loss_trg = model(trg_img, lbl=trg_lbl)

        outD_trg, loss_D_trg_fake = model_D(F.softmax(trg_score, dim=1),
                                            0)  # do not apply softmax

        loss_trg = args.lambda_adv_target * loss_D_trg_fake + loss_trg
        loss_trg.mean().backward()

        for param in model_D.parameters():
            param.requires_grad = True

        src_score, trg_score = src_score.detach(), trg_score.detach()

        outD_src, model_D_loss = model_D(F.softmax(src_score, dim=1),
                                         0)  # do not apply softmax

        loss_D_src_real = model_D_loss / 2
        loss_D_src_real.mean().backward()

        outD_trg, model_D_loss = model_D(F.softmax(trg_score, dim=1),
                                         1)  # do not apply softmax

        loss_D_trg_real = model_D_loss / 2
        loss_D_trg_real.mean().backward()

        optimizer.step()
        optimizer_D.step()

        for m in loss:
            train_writer.add_scalar(m, eval(m).mean(), i + 1)

        if (i + 1) % args.save_pred_every == 0:
            with torch.no_grad():
                model.eval()
                eval_loss = 0
                for test_img, test_lbl, _, _ in testloader:
                    test_score, loss_test = model(test_img, lbl=test_lbl)
                    eval_loss += loss_test.mean().item() * test_img.size(0)
                eval_loss /= len(testloader.dataset)
                if best_loss_eval == None or eval_loss < best_loss_eval:
                    best_loss_eval = eval_loss
                    best_step = i + 1
                print('taking snapshot ... eval_loss: {}'.format(eval_loss))
                torch.save(
                    model.module.state_dict(),
                    os.path.join(args.snapshot_dir,
                                 str(i + 1) + '.pth'))
                eval_loss = np.array([eval_loss])

        if (i + 1) % args.print_freq == 0:
            _t['iter time'].toc(average=False)
            print('[it %d][src loss %.4f][lr %.4f][%.2fs]' % \
                    (i + 1, loss_src.mean().data, optimizer.param_groups[0]['lr']*10000, _t['iter time'].diff))
            if i + 1 > args.num_steps_stop:
                print('finish training')
                break
            _t['iter time'].tic()
Exemple #9
0
def main():
    opt = TestOptions()
    args = opt.initialize()

    if not os.path.exists(args.save):
        os.makedirs(args.save)

    model = CreateModel(args)

    model.eval()
    model.cuda()
    targetloader = CreateTrgDataLoader(args)
    id_to_trainid = {2: 0, 1: 128, 0: 255}
    for index, batch in enumerate(targetloader):
        if index % 10 == 0:
            print('%d processd' % index)
        image, _, name = batch
        _, output, _, _ = model(Variable(image).cuda())  #[1,3,129,129]
        #import pdb;pdb.set_trace()
        output = nn.functional.softmax(output, dim=1)
        output = nn.functional.upsample(
            output, (1634, 1634), mode='bilinear',
            align_corners=True).cpu().data[0].numpy()
        output = output.transpose(1, 2, 0)  #(1634,1634,3)
        '''
        output_crop = output[14:526, 626:1138, 0:2]
        np.save("/extracephonline/medai_data2/zhengdzhang/eyes/qikan/cai/output_crop_1.npy", output_crop)
        #crop_img = Image.fromarray(output_crop)
        #crop_img.save("/extracephonline/medai_data2/zhengdzhang/eyes/qikan/cai/crop_img.png")
        '''
        output_nomask = np.asarray(np.argmax(output, axis=2),
                                   dtype=np.uint8)  #(1644,1634) unique:[0,1,2]
        cup_mask = get_bool(output_nomask, 0)
        disc_mask = get_bool(output_nomask, 0) + get_bool(output_nomask, 1)
        disc_mask = disc_mask.astype(np.uint8)
        cup_mask = cup_mask.astype(np.uint8)
        for i in range(5):
            disc_mask = scipy.signal.medfilt2d(disc_mask, 19)
            cup_mask = scipy.signal.medfilt2d(cup_mask, 19)
        disc_mask = morphology.binary_erosion(disc_mask,
                                              morphology.diamond(7)).astype(
                                                  np.uint8)  # return 0,1
        cup_mask = morphology.binary_erosion(cup_mask,
                                             morphology.diamond(7)).astype(
                                                 np.uint8)  # return 0,1
        disc_mask = get_largest_fillhole(disc_mask)
        cup_mask = get_largest_fillhole(cup_mask)

        disc_mask = morphology.binary_dilation(disc_mask,
                                               morphology.diamond(7)).astype(
                                                   np.uint8)  # return 0,1
        cup_mask = morphology.binary_dilation(cup_mask,
                                              morphology.diamond(7)).astype(
                                                  np.uint8)  # return 0,1

        disc_mask = get_largest_fillhole(disc_mask).astype(
            np.uint8)  # return 0,1
        cup_mask = get_largest_fillhole(cup_mask).astype(np.uint8)
        output_nomask = disc_mask + cup_mask

        output_col = np.ones(output_nomask.shape, dtype=np.float32)
        for k, v in id_to_trainid.items():
            output_col[output_nomask == k] = v
        output_col = Image.fromarray(output_col.astype(np.uint8))
        output_nomask = Image.fromarray(output_nomask)
        name = name[0].split('.')[0] + '.png'
        output_nomask.save('%s/%s' % (args.save, name))
        output_col.save('%s/color_%s' % (args.save, name))

    disc_dice, cup_dice = calculate_dice(args.gt_dir, args.save,
                                         args.devkit_dir)
    print('===> disc_dice:' + str(round(disc_dice, 3)) + '\t' + 'cup_dice:' +
          str(round(cup_dice, 3)))