コード例 #1
0
def get_model(model_path):
    model_folder_name = os.path.split(model_path)[-2]
    if '0-to-0' in model_folder_name:
        n_input_channel = 2
    elif '0-to-inf' in model_folder_name:
        n_input_channel = 3
    else:
        raise ValueError("MODEL PATH not valid")

    #%% Define Model ###
    model = ClassifyOnSegment(input_shape=(288, 384, n_input_channel),
                              model_structure='pspnet',
                              model_path=tempfile.mkdtemp(),
                              encoder_weights='imagenet',
                              n_segment_classes=4,
                              segment_class_weights=[1., 1., 1., 1.],
                              n_classify_classes=4,
                              classify_class_weights=[1., 1., 1., 1.],
                              eval_fn=evaluate_confusion_mat)

    model.load(model_path)
    return model
コード例 #2
0
        valid_name_file,
        valid_X_filenames,
        segment_y_files=valid_y_filenames,
        segment_w_files=valid_w_filenames,
        classify_label_file=valid_label_file,
        **kwargs)
    
    assert len(set(train_gen.names[i] for i in train_gen.selected_inds) & \
        set(valid_gen.names[i] for i in valid_gen.selected_inds)) == 0
    

    print("Initiate Model", flush=True)
    model = ClassifyOnSegment(
        input_shape=(288, 384, 3),
        model_structure='pspnet',
        model_path=model_dir,
        encoder_weights='imagenet',
        n_segment_classes=2,
        n_classify_classes=2)


    ### Training ###
    # print("Start Training", flush=True)
    # model.fit(train_gen,
    #           valid_gen=valid_gen,
    #           verbose=2,
    #           n_epochs=40)

    ### Validation ###
    print("=========================")
    print("Loading from: %s" % os.path.join(model_dir, 'bkp.model'))
コード例 #3
0
}

n_fs = len([f for f in os.listdir(data_path) if f.startswith('X')])
X_filenames = [os.path.join(data_path, 'X_%d.pkl' % i) for i in range(n_fs)]
y_filenames = [os.path.join(data_path, 'y_%d.pkl' % i) for i in range(n_fs)]
w_filenames = [os.path.join(data_path, 'w_%d.pkl' % i) for i in range(n_fs)]
name_file = os.path.join(data_path, 'names.pkl')
valid_gen = CustomGenerator(X_filenames,
                            y_filenames,
                            w_filenames,
                            name_file,
                            **kwargs)
model = ClassifyOnSegment(
    input_shape=(288, 384, 2), 
    model_structure='pspnet', 
    model_path='.', 
    encoder_weights='imagenet',
    n_segment_classes=2,
    n_classify_classes=2)

model_path = '/oak/stanford/groups/jamesz/zqwu/iPSC_data/model_save/0-to-0_random/bkp.model'
model.load(model_path)

fls = pickle.load(open(os.path.join(DATA_ROOT, 'D%d_fl.pkl' % day), 'rb'))
labels = pickle.load(open(os.path.join(DATA_ROOT, 'D%d_labels.pkl' % day), 'rb'))

preds = []
classify_preds = []
for batch in valid_gen:
    pred = model.predict(batch)
    preds.append(pred[0])
コード例 #4
0
    os.path.join(VALID_DIR, 'segment_continuous_y_%d.pkl' % i)
    for i in range(n_fs)
]
w_filenames = [
    os.path.join(VALID_DIR, 'segment_continuous_w_%d.pkl' % i)
    for i in range(n_fs)
]
name_file = os.path.join(VALID_DIR, 'names.pkl')
label_file = os.path.join(VALID_DIR, 'classify_continuous_labels.pkl')

valid_gen = CustomGenerator(name_file,
                            X_filenames,
                            segment_y_files=y_filenames,
                            segment_w_files=w_filenames,
                            classify_label_file=label_file,
                            **kwargs)

### Training ###
model = ClassifyOnSegment(input_shape=(288, 384, 2),
                          model_structure='pspnet',
                          model_path=MODEL_DIR,
                          encoder_weights='imagenet',
                          n_segment_classes=4,
                          n_classify_classes=4,
                          eval_fn=evaluate_confusion_mat)

# model.load(os.path.join(MODEL_DIR, 'bkp.model'))

model.fit(train_gen, valid_gen=valid_gen, n_epochs=200, verbose=2)
model.save(os.path.join(MODEL_DIR, 'pspnet_random_0-to-0_0.model'))
コード例 #5
0
def main(args):
    input_folder = args.input_folder
    output_folder = args.output_folder
    model_path = args.model_path
    well_setting = args.well_setting
    target_day = args.target_day

    intermediate_save_dir = tempfile.mkdtemp()

    # if `well_setting` is given, corner views will be removed
    preprocess_filter = partial(
        PREPROCESS_FILTER,
        well_setting=well_setting) if len(well_setting) > 0 else lambda x: True

    # Load all phase contrast (identified by keyword "Phase" in the file name)
    # and all GFP (identifier by keyword "GFP") images under the folder recursively.
    # Phase contrast/GFP of the same well will be matched into pairs automatically
    pairs = load_all_pairs(path=input_folder)
    print("Checking input data")
    # Function below checks all the identified phase contrast/GFP files and shows stats
    check_pairs_by_day(pairs)

    # Process all input files, save into a temp folder
    preprocess(pairs,
               output_path=intermediate_save_dir,
               preprocess_filter=preprocess_filter,
               target_size=(384, 288),
               well_setting=well_setting,
               linear_align=False,
               shuffle=True,
               seed=123,
               labels=[])

    n_fs = len([
        f for f in os.listdir(intermediate_save_dir)
        if f.startswith('X_') and f.endswith('.pkl')
    ])
    X_filenames = [
        os.path.join(intermediate_save_dir, 'X_%d.pkl' % i)
        for i in range(n_fs)
    ]
    name_file = os.path.join(intermediate_save_dir, 'names.pkl')

    # Generator instance looping through all input files
    test_gen = CustomGenerator(
        name_file,
        X_filenames,
        batch_size=8,
        augment=False,
        batch_with_name=True,
        shuffle_inds=False,
        n_segment_classes=None,
        segment_class_weights=None,
        segment_extra_weights=None,
        n_classify_classes=None,
        classify_class_weights=None,
    )

    # Identify model type: 0-to-0 / 0-to-inf
    n_input_channel = 2 if '0-to-0' in model_path else 3
    model = ClassifyOnSegment(input_shape=(288, 384, n_input_channel),
                              model_structure='pspnet',
                              model_path=tempfile.mkdtemp(),
                              encoder_weights='imagenet',
                              n_segment_classes=4,
                              segment_class_weights=[1., 1., 1., 1.],
                              n_classify_classes=4,
                              classify_class_weights=[1., 1., 1., 1.])

    # Load model weights
    model.load(model_path)

    # If it is 0-to-inf prediction, define the placeholder for endpoint (default at 18)
    input_transform = None
    if n_input_channel == 3:
        input_transform = partial(augment_fixed_end, end=target_day)

    # Calculate predictions and save to designated folder
    # refer to `collect_predictions.py` for the function below
    collect_preds(test_gen,
                  model,
                  output_folder,
                  input_transform=input_transform)
コード例 #6
0
]
w_filenames = [
    os.path.join(data_path, 'random_valid_w_%d.pkl' % i) for i in range(n_fs)
]
name_file = os.path.join(data_path, 'random_valid_names.pkl')
label_file = os.path.join(data_path, 'random_valid_labels.pkl')
ref_valid_gen = CustomGenerator(X_filenames,
                                y_filenames,
                                w_filenames,
                                name_file,
                                label_file=label_file,
                                **kwargs)

model = ClassifyOnSegment(input_shape=(288, 384, 3),
                          model_structure='pspnet',
                          model_path='.',
                          encoder_weights='imagenet',
                          n_segment_classes=2,
                          n_classify_classes=2)

model.load(
    '/oak/stanford/groups/jamesz/zqwu/iPSC_data/model_save/bkp/pspnet_random_0-to-inf_1.model'
)

seg_preds = []
cl_preds = []
for batch in valid_gen:
    seg_pred, cl_pred = model.model.predict(batch[0])
    seg_pred = scipy.special.softmax(seg_pred, -1)
    cl_pred = scipy.special.softmax(cl_pred, -1)
    seg_preds.append(seg_pred)
    cl_preds.append(cl_pred)
コード例 #7
0
]
w_filenames = [
    os.path.join(data_path, 'random_valid_w_%d.pkl' % i) for i in range(n_fs)
]
name_file = os.path.join(data_path, 'random_valid_names.pkl')
label_file = os.path.join(data_path, 'random_valid_labels.pkl')
ref_valid_gen = CustomGenerator(X_filenames,
                                y_filenames,
                                w_filenames,
                                name_file,
                                label_file=label_file,
                                **kwargs)

model = ClassifyOnSegment(input_shape=(288, 384, 2),
                          model_structure='pspnet',
                          model_path='.',
                          encoder_weights='imagenet',
                          n_segment_classes=2,
                          n_classify_classes=2)

model.load(
    '/oak/stanford/groups/jamesz/zqwu/iPSC_data/model_save/0-to-0_random/bkp.model'
)

seg_preds = []
cl_preds = []
for batch in valid_gen:
    seg_pred, cl_pred = model.model.predict(batch[0])
    seg_pred = scipy.special.softmax(seg_pred, -1)
    cl_pred = scipy.special.softmax(cl_pred, -1)
    seg_preds.append(seg_pred)
    cl_preds.append(cl_pred)