def tta_predict(network, path_model, args):

    # load model
    if network.load(path_model) is not True:
        return 0

    tta_preprocess = [
        get_transforms_det(network.size_input),
        get_transforms_hflip(network.size_input),
        get_transforms_gray(network.size_input),
        get_transforms_aug(network.size_input),
        get_transforms_aug(network.size_input),
    ]

    dataloaders = []
    for transform in tta_preprocess:
        # test dataset
        data = gdata.Dataset(
            data=factory.FactoryDataset.factory(pathname=args.data,
                                                name=args.name_dataset,
                                                subset=factory.validation,
                                                download=True),
            num_channels=network.num_input_channels,
            transform=transform,
        )

        dataloader = DataLoader(test_data,
                                batch_size=args.batch_size,
                                shuffle=False,
                                num_workers=args.workers)
        dataloaders.append(dataloader)

    # print neural net class
    print('NeuralNet: {}'.format(datetime.datetime.now()), flush=True)
    #print(network)

    pathnameout = args.out
    print('dir: {}'.format(pathnameout))
    files = [
        f for f in sorted(os.listdir(pathnameout)) if f.split('.')[-1] == 'csv'
    ]

    for i, data in enumerate(dataloaders):
        Yhat, Y = network.test(data)
        df = pd.DataFrame(np.concatenate((Y, Yhat), axis=1))
        df.to_csv(os.path.join(pathnameout,
                               'val_dp{}.csv'.format(i + len(files))),
                  index=False,
                  encoding='utf-8')

    print('DONE !!!')
def predict( network, path_model, args ):
    
    # load model
    if network.load( args.path_model ) is not True:
        return 0
    
    data = IMaterialistImageDataset(
        pathname=args.data,
        ext='jpg',
        num_channels=network.num_input_channels,
        transform=get_transforms_det(network.size_input)
        )

    dataloader = DataLoader(test_data, batch_size=args.batch_size, shuffle=False, num_workers=args.workers )
    dataloaders.append(dataloader)
    
    # print neural net class
    print('NeuralNet: {}'.format(datetime.datetime.now()), flush=True  )
    #print(network)

    Ids, Yhat = network.predict( data )
    return Id, pred
def main():
    
    parser = arg_parser();
    args = parser.parse_args();

    # Configuration
    project         = args.project
    projectname     = args.projectname 
    pathnamedataset = args.pathdataset 
    pathnamemodel   = args.model
    pathproject     = os.path.join( project, projectname )
    pathnameout     = args.pathnameout
    filename        = args.filename
    
    
    pathname = os.path.expanduser( '~/.datasets' )
    
    num_workers=0
    no_cuda=False
    parallel=False
    gpu=0
    seed=1

    
    # experiments
    experiments = [ 
        { 'name': 'ferp',      'subset': FactoryDataset.test,        'real': True },
        { 'name': 'affectnet', 'subset': FactoryDataset.validation,  'real': True },
        { 'name': 'ck',        'subset': FactoryDataset.training,    'real': True },
        { 'name': 'jaffe',     'subset': FactoryDataset.training,    'real': True },
        { 'name': 'bu3dfe',    'subset': FactoryDataset.training,    'real': True },
        ]
 
    
    # Load models
    network = NeuralNetClassifier(
        patchproject=project,
        nameproject=projectname,
        no_cuda=no_cuda,
        seed=seed,
        gpu=gpu
        )

    cudnn.benchmark = True

    # load model
    if network.load( pathnamemodel ) is not True:
        print('>>Error!!! load model')
        assert(False)  

    size_input = network.size_input
    tuplas=[]
    for  i, experiment in enumerate(experiments):

        name_dataset = experiment['name']
        subset = experiment['subset']
        breal = experiment['real']
        dataset = []

        # real dataset 
        dataset = Dataset(    
            data=FactoryDataset.factory(
                pathname=pathnamedataset, 
                name=name_dataset, 
                subset=subset, 
                #idenselect=idenselect,
                download=True 
            ),
            num_channels=3,
            transform=get_transforms_det( network.size_input ),
            )
        
        
        dataloader = DataLoader(dataset, batch_size=100, shuffle=False, num_workers=num_workers )
        
        Yhat, Y = network.test( dataloader )
        df = pd.DataFrame( np.concatenate((Yhat, Y), axis=1) )
        df.to_csv( os.path.join(pathproject , '{}_{}_{}_dp.csv'.format(subset,projectname,name_dataset)), index=False, encoding='utf-8')       
        
        yhat = np.argmax( Yhat, axis=1 )
        y = Y

        acc = metrics.accuracy_score(y, yhat)
        precision = metrics.precision_score(y, yhat, average='macro')
        recall = metrics.recall_score(y, yhat, average='macro')
        f1_score = 2*precision*recall/(precision+recall)
        
        #|Name|Dataset|Cls|Acc| ...
        tupla = { 
            #'Name':projectname,  
            'Dataset': '{}({})'.format(  name_dataset,  subset ),
            'Accuracy': acc*100,
            'Precision': precision*100,
            'Recall': recall*100,
            'F1 score': f1_score*100,        
        }
        tuplas.append(tupla)
        
        
    df = pd.DataFrame(tuplas)
    df.to_csv( os.path.join( pathproject, 'experiments_cls.csv' ) , index=False, encoding='utf-8')
    print('save experiments class ...')
    
    print('DONE!!!')
示例#4
0
def main():
    
    # parameters
    parser = arg_parser();
    args = parser.parse_args();
    random.seed(0)
    
    print('Baseline clasification {}!!!'.format(datetime.datetime.now()))
    print('\nArgs:')
    [ print('\t* {}: {}'.format(k,v) ) for k,v in vars(args).items() ]
    print('')
    
    network = NeuralNetClassifier(
        patchproject=args.project,
        nameproject=args.name,
        no_cuda=args.no_cuda,
        parallel=args.parallel,
        seed=args.seed,
        print_freq=args.print_freq,
        gpu=args.gpu
        )

    network.create( 
        arch=args.arch, 
        num_output_channels=args.num_classes, 
        num_input_channels=args.channels, 
        loss=args.loss, 
        lr=args.lr, 
        momentum=args.momentum,
        optimizer=args.opt,
        lrsch=args.scheduler,
        pretrained=args.finetuning,
        th=0.5,
        size_input=args.image_size,
        )
    
    cudnn.benchmark = True

    # resume model
    if args.resume:
        network.resume( os.path.join(network.pathmodels, args.resume ) )

    # print neural net class
    print('Load model: ')
    print(network)


    # datasets
    # training dataset

    train_data_kaggle = ATLASDataset(        
        path=args.data, 
        train=True,
        folders_images='train', #train, cloud/train_full
        metadata='train.csv',
        ext='png', #png, tif
        #count=20000,
        num_channels=args.channels,
        transform=get_transforms_aug( network.size_input ), #get_transforms_aug
        )
    
#     train_data_external = ATLASDataset(        
#         path=args.data, 
#         train=True,
#         folders_images='train_external', 
#         metadata='train_external.csv',
#         #count=20000,
#         num_channels=args.channels,
#         transform=get_transforms_aug( network.size_input ), #get_transforms_aug
#         )    
#     train_data = torch.utils.data.ConcatDataset( [train_data_kaggle, train_data_external] )
    train_data = train_data_kaggle
    
    
    frec = np.array([ x for x in train_data_kaggle.data.data['Target'] ]).sum(axis=0)
    weights = 1 / frec 


#     target_external = train_data_external.data.data['Target']
    target_kaggle = train_data_kaggle.data.data['Target']
#     target = np.concatenate( ( target_kaggle, target_external ) )    
    target = target_kaggle
    
    samples_weights = np.array([ weights[ np.array(x).astype( np.uint8 ) ].max() for x in target ])
    
    
    num_train = len(train_data)
    #sampler = SubsetRandomSampler(np.random.permutation( num_train ) ) 
    sampler = WeightedRandomSampler( weights=samples_weights, num_samples=len(samples_weights) , replacement=True )
    train_loader = DataLoader(train_data, batch_size=args.batch_size, 
        sampler=sampler, num_workers=args.workers, pin_memory=network.cuda, drop_last=True)
    
    # validate dataset
    val_data = ATLASDataset(        
        path=args.data, 
        train=True,
        folders_images='train', #train, cloud/train_full
        metadata='train.csv',
        ext='png', #png, tif
        count=5000,
        num_channels=args.channels,
        transform=get_transforms_det( network.size_input ),
        )

    num_val = len(val_data)
    val_loader = DataLoader(val_data, batch_size=80,
        shuffle=False, num_workers=args.workers, pin_memory=network.cuda, drop_last=False)
       
        
    print('Load datset')
    print('Train: ', len(train_data))
    print('Val: ', len(val_data))
    
    # training neural net
    network.fit( train_loader, val_loader, args.epochs, args.snapshot )
    
    print("Optimization Finished!")
    print("DONE!!!")
def main():

    # parameters
    parser = arg_parser()
    args = parser.parse_args()
    random.seed(0)

    print('Baseline clasification {}!!!'.format(datetime.datetime.now()))
    print('\nArgs:')
    [print('\t* {}: {}'.format(k, v)) for k, v in vars(args).items()]
    print('')

    network = NeuralNetClassifier(patchproject=args.project,
                                  nameproject=args.name,
                                  no_cuda=args.no_cuda,
                                  parallel=args.parallel,
                                  seed=args.seed,
                                  print_freq=args.print_freq,
                                  gpu=args.gpu)

    network.create(
        arch=args.arch,
        num_output_channels=args.num_classes,
        num_input_channels=args.channels,
        loss=args.loss,
        lr=args.lr,
        momentum=args.momentum,
        optimizer=args.opt,
        lrsch=args.scheduler,
        pretrained=args.finetuning,
        topk=(
            1,
            2,
        ),
    )

    cudnn.benchmark = True

    # resume model
    if args.resume:
        network.resume(os.path.join(network.pathmodels, args.resume))

    # print neural net class
    print('Load model: ')
    print(network)

    # datasets
    # training dataset
    train_data = Dataset(
        data=FactoryDataset.factory(pathname=args.data,
                                    name=args.name_dataset,
                                    subset=FactoryDataset.training,
                                    download=True),
        #count=20000,
        num_channels=network.num_input_channels,
        transform=get_transforms_aug(network.size_input),
    )

    num_train = len(train_data)
    sampler = SubsetRandomSampler(np.random.permutation(num_train))
    train_loader = DataLoader(train_data,
                              batch_size=args.batch_size,
                              sampler=sampler,
                              num_workers=args.workers,
                              pin_memory=network.cuda,
                              drop_last=True)

    # validate dataset
    val_data = Dataset(
        data=FactoryDataset.factory(pathname=args.data,
                                    name=args.name_dataset,
                                    subset=FactoryDataset.validation,
                                    download=True),
        num_channels=network.num_input_channels,
        transform=get_transforms_det(network.size_input),
    )

    num_val = len(val_data)
    val_loader = DataLoader(val_data,
                            batch_size=args.batch_size,
                            shuffle=False,
                            num_workers=args.workers,
                            pin_memory=network.cuda,
                            drop_last=False)

    print('Load datset')
    print('Train: ', len(train_data))
    print('Val: ', len(val_data))

    # training neural net
    network.fit(train_loader, val_loader, args.epochs, args.snapshot)

    print("Optimization Finished!")
    print("DONE!!!")