def save_predictions(train_ids, train_predictions, meta_test, out_of_fold_test_predictions): averaged_mask_predictions_test = np.mean( np.array(out_of_fold_test_predictions), axis=0) pipeline_postprocessing = pipelines.mask_postprocessing(config=CONFIG) pipeline_postprocessing.clean_cache() test_pipe_masks = { 'input_masks': { 'resized_images': averaged_mask_predictions_test } } y_pred_test = pipeline_postprocessing.transform( test_pipe_masks)['binarized_images'] LOGGER.info('Saving predictions') out_of_fold_train_predictions_path = os.path.join( EXPERIMENT_DIR, 'out_of_fold_train_predictions.pkl') joblib.dump({ 'ids': train_ids, 'images': train_predictions }, out_of_fold_train_predictions_path) out_of_fold_test_predictions_path = os.path.join( EXPERIMENT_DIR, 'out_of_fold_test_predictions.pkl') joblib.dump( { 'ids': meta_test[ID_COLUMN].tolist(), 'images': averaged_mask_predictions_test }, out_of_fold_test_predictions_path) submission = utils.create_submission(meta_test, y_pred_test) submission_filepath = os.path.join(EXPERIMENT_DIR, 'submission.csv') submission.to_csv(submission_filepath, index=None, encoding='utf-8') LOGGER.info('submission saved to {}'.format(submission_filepath)) LOGGER.info('submission head \n\n{}'.format(submission.head()))
def predict(): meta = pd.read_csv(PARAMS.metadata_filepath) meta_test = meta[meta['is_train'] == 0] if DEV_MODE: meta_test = meta_test.sample(PARAMS.dev_mode_size, random_state=SEED) data = { 'input': { 'meta': meta_test, }, 'callback_input': { 'meta_valid': None } } pipeline_network = unet(config=CONFIG, train_mode=False) pipeline_postprocessing = pipelines.mask_postprocessing(config=CONFIG) pipeline_network.clean_cache() predicted_masks = pipeline_network.transform(data) test_masks = {'input_masks': predicted_masks} output = pipeline_postprocessing.transform(test_masks) pipeline_network.clean_cache() pipeline_postprocessing.clean_cache() y_pred_test = output['binarized_images'] submission = utils.create_submission(meta_test, y_pred_test) submission_filepath = os.path.join(EXPERIMENT_DIR, 'submission.csv') submission.to_csv(submission_filepath, index=None, encoding='utf-8') LOGGER.info('submission saved to {}'.format(submission_filepath)) LOGGER.info('submission head \n\n{}'.format(submission.head()))
def fold_evaluate_loop(valid_data_split, fold_id): valid_pipe_input = { 'input': { 'meta': valid_data_split }, 'callback_input': { 'meta_valid': None } } valid_ids = valid_data_split[ID_COLUMN].tolist() LOGGER.info('Start pipeline transform on valid') pipeline_network = unet(config=CONFIG, suffix='_fold_{}'.format(fold_id), train_mode=False) pipeline_postprocessing = pipelines.mask_postprocessing( config=CONFIG, suffix='_fold_{}'.format(fold_id)) pipeline_network.clean_cache() pipeline_postprocessing.clean_cache() predicted_masks_valid = pipeline_network.transform(valid_pipe_input) valid_pipe_masks = {'input_masks': predicted_masks_valid} output_valid = pipeline_postprocessing.transform(valid_pipe_masks) utils.clean_object_from_memory(pipeline_network) y_pred_valid = output_valid['binarized_images'] y_true_valid = utils.read_masks(valid_data_split[Y_COLUMN].values) iou, iout = calculate_scores(y_true_valid, y_pred_valid) predicted_masks_valid = predicted_masks_valid['resized_images'] return iou, iout, (valid_ids, predicted_masks_valid)
def evaluate(): meta = pd.read_csv(PARAMS.metadata_filepath) meta_train = meta[meta['is_train'] == 1] cv = utils.KFoldBySortedValue(n_splits=PARAMS.n_cv_splits, shuffle=PARAMS.shuffle, random_state=SEED) for train_idx, valid_idx in cv.split( meta_train[DEPTH_COLUMN].values.reshape(-1)): break meta_valid_split = meta_train.iloc[valid_idx] y_true_valid = utils.read_masks(meta_valid_split[Y_COLUMN].values) if DEV_MODE: meta_valid_split = meta_valid_split.sample(PARAMS.dev_mode_size, random_state=SEED) data = { 'input': { 'meta': meta_valid_split, }, 'callback_input': { 'meta_valid': None } } pipeline_network = unet(config=CONFIG, train_mode=False) pipeline_postprocessing = pipelines.mask_postprocessing(config=CONFIG) pipeline_network.clean_cache() output = pipeline_network.transform(data) valid_masks = {'input_masks': output} output = pipeline_postprocessing.transform(valid_masks) pipeline_network.clean_cache() pipeline_postprocessing.clean_cache() y_pred_valid = output['binarized_images'] LOGGER.info('Calculating IOU and IOUT Scores') iou_score, iout_score = calculate_scores(y_true_valid, y_pred_valid) LOGGER.info('IOU score on validation is {}'.format(iou_score)) CTX.channel_send('IOU', 0, iou_score) LOGGER.info('IOUT score on validation is {}'.format(iout_score)) CTX.channel_send('IOUT', 0, iout_score) results_filepath = os.path.join(EXPERIMENT_DIR, 'validation_results.pkl') LOGGER.info('Saving validation results to {}'.format(results_filepath)) joblib.dump((meta_valid_split, y_true_valid, y_pred_valid), results_filepath)