else: mask_pred_val = model.predict(val) # save my val pred pickle model_name = model_filename.split('.')[1].split('/')[2] my_val_dir = './results/my_val_pkl' #if test_aug: # pkl.dump(mask_pred_val, open(os.path.join(my_val_dir, model_name + '_testaug.pkl'), 'wb')) #else: # pkl.dump(mask_pred_val, open(os.path.join(my_val_dir, model_name + '.pkl'), 'wb')) for pixel_threshold in [0.5]: #np.arange(0.3,1,0.05): mask_pred_val = np.where(mask_pred_val>=pixel_threshold, 1, 0) mask_pred_val = mask_pred_val * 255 mask_pred_val = mask_pred_val.astype(np.uint8) dice, jacc, jacc_th = dice_jacc_mean(val_mask, mask_pred_val) print model_filename print "Resized val dice coef : {:.4f}".format(dice) print "Resized val jacc coef : {:.4f}".format(jacc) print "Resized val jacc_th coef : {:.4f}".format(jacc_th) if test_aug: pkl.dump((dice, jacc, jacc_th), open(os.path.join(my_val_dir, model_name + '_testaug_score.pkl'), 'wb')) else: pkl.dump((dice, jacc, jacc_th), open(os.path.join(my_val_dir, model_name + '_score.pkl'), 'wb')) def predict_challenge(challenge_folder, challenge_predicted_folder, plot=False): challenge_list = ISIC.list_from_folder(challenge_folder) challenge_resized_folder = challenge_folder + "_{}_{}".format(height, width) if not os.path.exists(challenge_resized_folder):
train = None train_mask = None # clear memory print("Load best checkpoint") model.load_weights(model_filename) # load best saved checkpoint # evaluate model mask_pred_val = model.predict(val) mask_pred_test = model.predict(test) for pixel_threshold in [0.5]: #np.arange(0.3,1,0.05): mask_pred_val = np.where(mask_pred_val >= pixel_threshold, 1, 0) mask_pred_val = mask_pred_val * 255 mask_pred_val = mask_pred_val.astype(np.uint8) print("Validation Predictions Max: {}, Min: {}".format( np.max(mask_pred_val), np.min(mask_pred_val))) print(model.evaluate(val, val_mask, batch_size=batch_size, verbose=1)) dice, jacc = dice_jacc_mean(val_mask, mask_pred_val, smooth=0) print(model_filename) print("Resized val dice coef : {:.4f}".format(dice)) print("Resized val jacc coef : {:.4f}".format(jacc)) mask_pred_test = np.where(mask_pred_test >= pixel_threshold, 1, 0) mask_pred_test = mask_pred_test * 255 mask_pred_test = mask_pred_test.astype(np.uint8) print(model.evaluate(test, test_mask, batch_size=batch_size, verbose=1)) dice, jacc = dice_jacc_mean(test_mask, mask_pred_test, smooth=0) print("Resized test dice coef : {:.4f}".format(dice)) print("Resized test jacc coef : {:.4f}".format(jacc)) else: print('Load model') model.load_weights(model_filename)
# evaluate model if test_aug: mask_pred_val = np.array([my_predict(model, x) for x in tqdm(val)]) else: mask_pred_val = model.predict(val, batch_size=batch_size)[:, 0, :, :] hist, bin_edges = np.histogram(mask_pred_val.flatten(), bins=5) print hist print bin_edges for pixel_threshold in [0.5]: #, 0.5, 0.4]: print "pixel_threshold is {}".format(pixel_threshold) mask_pred_val_256 = (np.where(mask_pred_val >= pixel_threshold, 1, 0) * 255).astype(np.uint8) dice, jacc, jacc_th = dice_jacc_mean(val_mask, mask_pred_val_256) print "Resized val dice coef : {:.4f}".format(dice) print "Resized val jacc coef : {:.4f}".format(jacc) if do_filter: print 'Use Classifier model to filter the masks' size_1_2 = 256 base_folder = './datasets/isic2018_crop_{}_{}_{}'.format( attribute, size_1_2, size_1_2) image_folder = os.path.join(base_folder, 'image') val = ISIC.load_images(val_list, size_1_2, size_1_2, image_folder) # filter by pre_cls model pre_cls_model_filename = './weights2018_task2/{}_{}_crop_pre_cls.h5'.format( 'vgg', size_1_2) pre_cls_model = models.VGG16(size_1_2, size_1_2,
if do_evaluate: model.load_weights(model_filename) val_pred_mask = model.predict(val_image) save_pred_images(val_pred_mask, val_list, pred_val_mask_folder) for pixel_threshold in [0.5]: # np.arange(0.3, 1, 0.05): val_pred_mask = np.where(val_pred_mask >= pixel_threshold, 1, 0) val_pred_mask = val_pred_mask * 255 val_pred_mask = val_pred_mask.astype(np.uint8) print "Validation Prediction Max:{}, Min:{}".format( np.max(val_pred_mask), np.min(val_pred_mask)) print model.evaluate(val_image, val_mask, batch_size=batch_size, verbose=1) dice, jacc = dice_jacc_mean(val_mask, val_pred_mask, smooth=0) print "Resized val dice coef: {:.4f}".format(dice) print "Resized val jacc coef: {:.4f}".format(jacc) if do_test: [te_image, te_mask] = ISIC.load_image(base_te_image_folder, base_te_mask_folder, te_list, height, width, remove_mean_imagenet, remove_mean_dataset, rescale_mask) te_image = te_image / 127.5 - 1 model.load_weights(model_filename) te_pred_mask = model.predict(te_image) save_pred_images(te_pred_mask, te_list, pred_te_mask_folder) for pixel_threshold in [0.5]: # np.arange(0.3, 1, 0.05): te_pred_mask = np.where(te_pred_mask >= pixel_threshold, 1, 0) te_pred_mask = te_pred_mask * 255