def main_UNet_II(): # TODO: Get through CLI arg # Step 01: Get Input Resources and Model Configuration parser = app_argparse() args = parser.parse_args() # print(args) use_gpu = args.use_gpu # tile_size = args.tile_size tile_size = (200, 200) INPUT_IMAGE_PATH = args.input_RGB LABEL_IMAGE_PATH = args.input_GT # WEIGHTS_FILE_PATH = args.output_model_path WEIGHTS_FILE_PATH = "weights/Adam.UNet.weights.II.pt" OUTPUT_IMAGE_PATH = args.output_images # Step 02: Get Input Resources and Model Configuration device = utils.device(use_gpu=use_gpu) model = UNet() # model = utils.load_weights_from_disk(model) model = utils.load_entire_model(model, WEIGHTS_FILE_PATH, use_gpu) print("use pretrained model!") # print(model) # summary(model, (3, tile_size[0], tile_size[1])) # this is issue !!! loader = dataset.full_image_loader( INPUT_IMAGE_PATH, LABEL_IMAGE_PATH, tile_size=tile_size) prediction = predict(model, loader, device=device, class_label=ClassLabel.house) # Step 03: save the output input_image = utils.input_image(INPUT_IMAGE_PATH) pred_image, mask_image = utils.overlay_class_prediction( input_image, prediction) pred_image_path = OUTPUT_IMAGE_PATH + "/prediction.png" pred_image.save(pred_image_path) pred_mask_path = OUTPUT_IMAGE_PATH + "/mask.png" mask_image.save(pred_mask_path) print("(i) Prediction and Mask image saved at {}".format(pred_image_path)) print("(ii) Mask image saved at {}".format(pred_mask_path)) # Step 04: Check the metrics img_gt = np.array(Image.open(LABEL_IMAGE_PATH), dtype=np.int32) img_mask = np.array(Image.open(pred_mask_path), dtype=np.int32) metricComputation(img_gt, img_mask)
return torch.max(y_full, dim=1)[1] if class_label == ClassLabel.house: return torch.max(-y_full, dim=1)[1] #TODO: Subclass error raise ValueError('Unknown class label: {}'.format(class_label)) if __name__ == '__main__': #TODO: Get through CLI arg use_gpu = False tile_size = (256, 256) device = utils.device(use_gpu=use_gpu) model = UNet() model = utils.load_weights_from_disk(model) input_image = utils.input_image() loader = dataset.full_image_loader(tile_size=tile_size, img_path="images/img/train1.jpg") prediction = predict(model, loader, device=device, class_label=ClassLabel.house) pred_image = utils.overlay_class_prediction(input_image, prediction) pred_image_path = './images/output/prediction.png' pred_image.save(pred_image_path) print('(i) Prediction image saved at {}'.format(pred_image_path))
args = parser.parse_args() print(args) use_gpu = args.use_gpu INPUT_IMAGE_PATH = args.input_RGB LABEL_IMAGE_PATH = args.input_GT WEIGHTS_FILE_PATH = args.output_model_path # Step 1: TensorBoard setup # default `log_dir` is "runs" - we'll be more specific here writer = SummaryWriter("runs/aerial_image_segmentation") # Step 2: Writing to TensorBoard # get some random training images tile_size = (250, 250) loader = dataset.full_image_loader(INPUT_IMAGE_PATH, LABEL_IMAGE_PATH, tile_size=tile_size) # dataiter = iter(loader) # images, labels = dataiter.next() images_RGB = torch.tensor(np.zeros((16, 3, 250, 250))) images_GT = torch.tensor(np.zeros((16, 1, 250, 250))) i = 0 for x, y in loader: # print(x.shape, y.shape) images_RGB[i, :, :, :] = x images_GT[i, :, :, :] = y i = i + 1 # # create grid of images
if class_label == ClassLabel.house: return torch.max(-y_full, dim=1)[1] #TODO: Subclass error raise ValueError('Unknown class label: {}'.format(class_label)) if __name__ == '__main__': #TODO: Get through CLI arg use_gpu = False tile_size = (256, 256) device = utils.device(use_gpu=use_gpu) model = FCNN() model = utils.load_weights_from_disk(model) loader = dataset.full_image_loader(tile_size=tile_size) prediction = predict(model, loader, device=device, class_label=ClassLabel.house) input_image = utils.input_image() pred_image = utils.overlay_class_prediction(input_image, prediction) pred_image_path = './images/output/prediction.png' pred_image.save(pred_image_path) print('(i) Prediction image saved at {}'.format(pred_image_path))
def dev_predit(args): use_gpu = args.use_gpu tile_size = tile_size = (args.tile_size_height, args.tile_size_width) INPUT_IMAGE_PATH = args.input_RGB LABEL_IMAGE_PATH = args.input_GT WEIGHTS_FILE_PATH = args.output_model_path LOSS_PLOT_PATH = args.output_loss_plot OUTPUT_IMAGE_PATH = args.output_images # Step 02: Get Input Resources and Model Configuration device = utils.device(use_gpu=use_gpu) model = FCNN() # model = utils.load_weights_from_disk(model) model = utils.load_entire_model(model, WEIGHTS_FILE_PATH, use_gpu) # print(model) # summary(model, (3, tile_size[0], tile_size[1])) # this is issue !!! loader = dataset.full_image_loader(INPUT_IMAGE_PATH, LABEL_IMAGE_PATH, tile_size=tile_size) prediction = predict(model, loader, device=device, class_label=utils.ClassLabel.house) # Step 03: save the output input_image = utils.input_image(INPUT_IMAGE_PATH) pred_image, mask_image = utils.overlay_class_prediction( input_image, prediction) pred_image_path = OUTPUT_IMAGE_PATH + "/prediction.png" pred_image.save(pred_image_path) pred_mask_path = OUTPUT_IMAGE_PATH + "/mask.png" mask_image.save(pred_mask_path) print("(i) Prediction and Mask image saved at {}".format(pred_image_path)) print("(ii) Prediction and Mask image saved at {}".format(pred_mask_path)) # Show Metrics Computation img_gt = np.array(Image.open(LABEL_IMAGE_PATH), dtype=np.int32) img_mask = np.array(Image.open(pred_mask_path), dtype=np.int32) metricComputation(img_gt, img_mask) # show images img_rgb = cv.imread(INPUT_IMAGE_PATH) img_gt = cv.imread(LABEL_IMAGE_PATH) img_pred = cv.imread(pred_mask_path) # pred_image_path img_lost = cv.imread(LOSS_PLOT_PATH) images = [img_rgb, img_gt, img_pred, img_lost] titles = ["RGB", "GT", "Prediction", "Training Loss"] plt.figure(num=None, figsize=(7, 7), dpi=80, facecolor="w", edgecolor="k") for i in range(4): plt.subplot(2, 2, i + 1), plt.imshow(images[i], "gray", vmin=0, vmax=255) plt.title(titles[i]) plt.xticks([]), plt.yticks([]) plt.show() return pred_image_path, pred_mask_path