print("Calculate metrics (Ensemble + Z-filtering per crop) . . .") ens_zfil_iou_per_image = jaccard_index_numpy( Y_test, (ens_zfil_preds_test > 0.5).astype(np.uint8)) ens_zfil_ov_iou_per_image = voc_calculation( Y_test, (ens_zfil_preds_test > 0.5).astype(np.uint8), ens_zfil_iou_per_image) del Y_test_ensemble, ens_zfil_preds_test print("############################################################\n" "# Metrics (per image, merging crops with 50% of overlap) #\n" "############################################################\n") print("Merge X_test to crop it again with 50% overlap and make the prediction") X_test = merge_3D_data_with_overlap(X_test, orig_test_shape, overlap=overlap) X_test = crop_3D_data_with_overlap(X_test, test_3d_desired_shape, overlap=(0.5, 0.5, 0.5)) Y_test_50ov = model.predict(X_test, batch_size=batch_size_value, verbose=1) if n_classes > 1: Y_test_50ov = np.expand_dims(np.argmax(Y_test_50ov, -1), -1) Y_test_50ov = merge_3D_data_with_overlap(Y_test_50ov, orig_test_shape, overlap=(0.5, 0.5, 0.5)) print("Saving 50% overlap predicted images . . .") save_img(Y=(Y_test_50ov > 0.5).astype(np.float32), mask_dir=result_bin_dir_50ov, prefix="test_out_bin_50ov")
ov_iou = 0 index = 0 for i in tqdm(range(len(orig_test_shape))): original_3d_shape = orig_test_shape[i] crop_3d_shape = crop_test_shapes[i] f_name = filenames[1][i] orig_X_test, orig_Y_test = merge_3D_data_with_overlap( X_test[index:index + crop_3d_shape[0]], original_3d_shape, data_mask=Y_test[index:index + crop_3d_shape[0]], overlap=overlap, verbose=False) orig_X_test = crop_3D_data_with_overlap(orig_X_test, test_3d_desired_shape, overlap=(0.5, 0.5, 0.5), verbose=False) Y_test_50ov = model.predict(orig_X_test, batch_size=batch_size_value, verbose=1) if n_classes > 1: Y_test_50ov = np.expand_dims(np.argmax(Y_test_50ov, -1), -1) Y_test_50ov = merge_3D_data_with_overlap(Y_test_50ov, original_3d_shape, overlap=(0.5, 0.5, 0.5), verbose=False) Y_test_50ov = Y_test_50ov.astype(np.float32)