示例#1
0
    
if __name__ == '__main__':
    #bn = 'v2_openpose+light_maxlikelihood_20191211_150642_adam_lr0.0001_wd0.0_batch32'
    #bn = 'v2_openpose+light+fullsym_maxlikelihood_20191229_223132_adam_lr0.0001_wd0.0_batch22'
    #bn = 'v2_openpose+head_maxlikelihood_20191223_105436_adam_lr0.0001_wd0.0_batch28'
    #bn = 'v2_openpose+light+fullsym_maxlikelihood_20191229_223132_adam_lr0.0001_wd0.0_batch22'
    #bn = 'v2_openpose+light+head_maxlikelihood_20191219_144819_adam_lr0.0001_wd0.0_batch32'
    #bn = 'v3_openpose+light+head_maxlikelihood_20200118_100732_adam_lr0.0001_wd0.0_batch24'
    bn = 'v4PAFflat_openpose+light+head_maxlikelihood_20200206_105708_adam_lr0.0001_wd0.0_batch24'
    
    set_type = bn.partition('_')[0]
    model_path = Path.home() / 'workspace/WormData/worm-poses/results' / set_type  / bn / 'model_best.pth.tar'
    
    
    cuda_id = 0
    device = get_device(cuda_id)
    batch_size = 64
    roi_size = 256
    
    images_queue_size = 2
    results_queue_size = 4
    
    model_args = get_model_arguments(bn)
    #%%
    model = PoseDetector(**model_args)
    state = torch.load(model_path, map_location = 'cpu')
    model.load_state_dict(state['state_dict'])
    model.eval()
    model = model.to(device)
    
    #%%
示例#2
0
def train_PAF(
        data_type='v2',
        model_name='openpose',
        cuda_id=0,
        log_dir_root=log_dir_root_dflt,
        batch_size=16,
        num_workers=1,
        loss_type='maxlikelihood',
        lr=1e-4,
        weight_decay=0.0,
        n_epochs=1,  #1000,
        save_frequency=200,
        init_model_path=None):

    d_args = data_types[data_type]
    flow_args = d_args['flow_args']
    root_dir = d_args['root_dir']

    log_dir = log_dir_root / data_type

    return_bboxes = False
    return_half_bboxes = False
    if not 'openpose' in model_name:
        if 'halfboxes' in data_type:
            return_half_bboxes = True
        else:
            return_bboxes = True

    model_args = available_models[model_name]
    train_flow = SkelMapsFlow(
        root_dir=root_dir,
        set2read='train',
        #set2read = 'validation',
        #samples_per_epoch = 1000,
        return_key_value_pairs=True,
        PAF_seg_dist=model_args['PAF_seg_dist'],
        n_segments=model_args['n_segments'],
        fold_skeleton=model_args['fold_skeleton'],
        return_bboxes=return_bboxes,
        return_half_bboxes=return_half_bboxes,
        **flow_args)

    val_flow = SkelMapsFlowValidation(
        root_dir=root_dir,
        set2read='validation',
        return_key_value_pairs=True,
        PAF_seg_dist=model_args['PAF_seg_dist'],
        n_segments=model_args['n_segments'],
        fold_skeleton=model_args['fold_skeleton'],
        return_bboxes=return_bboxes,
        return_half_bboxes=return_half_bboxes,
        **flow_args)

    if 'openpose' in model_name:
        model = PoseDetector(n_segments=train_flow.n_segments_out,
                             n_affinity_maps=train_flow.n_affinity_maps_out,
                             n_stages=model_args['n_stages'],
                             features_type=model_args['features_type'],
                             use_head_loss=model_args['use_head_loss'],
                             pose_loss_type=model_args['pose_loss_type'])
    else:
        model = get_keypointrcnn(backbone=model_args['backbone'],
                                 num_classes=2,
                                 num_keypoints=train_flow.n_segments_out)

    if init_model_path is not None:
        model_name = 'R+' + model_name
        state = torch.load(init_model_path, map_location='cpu')
        model.load_state_dict(state['state_dict'])

    device = get_device(cuda_id)
    lr_scheduler = None

    model_params = filter(lambda p: p.requires_grad, model.parameters())
    optimizer = torch.optim.Adam(model_params,
                                 lr=lr,
                                 weight_decay=weight_decay)

    now = datetime.datetime.now()
    date_str = now.strftime('%Y%m%d_%H%M%S')

    basename = f'{data_type}_{model_name}_{loss_type}_{date_str}_adam_lr{lr}_wd{weight_decay}_batch{batch_size}'

    train_poses(basename,
                model,
                device,
                train_flow,
                val_flow,
                optimizer,
                log_dir,
                lr_scheduler=lr_scheduler,
                batch_size=batch_size,
                n_epochs=n_epochs,
                num_workers=num_workers,
                save_frequency=save_frequency)