def sample(self, iter_time): if np.mod(iter_time, self.flags.sample_freq) == 0: idx = np.random.choice(self.dataset.num_val, 2, replace=False) x_imgs, y_imgs = self.dataset.val_imgs[ idx], self.dataset.val_vessels[idx] samples = self.model.sample_imgs(x_imgs) # masking seg_samples = utils.remain_in_mask(samples, self.dataset.val_masks[idx]) # crop to original image shape x_imgs_ = utils.crop_to_original(x_imgs, self.dataset.ori_shape) seg_samples_ = utils.crop_to_original(seg_samples, self.dataset.ori_shape) y_imgs_ = utils.crop_to_original(y_imgs, self.dataset.ori_shape) # sampling self.plot(x_imgs_, seg_samples_, y_imgs_, iter_time, idx=idx, save_file=self.sample_out_dir, phase='train')
def eval(self, iter_time=0, phase='train'): total_time, auc_sum = 0., 0. if np.mod(iter_time, self.flags.eval_freq) == 0: num_data, imgs, vessels, masks = None, None, None, None if phase == 'train': num_data = self.dataset.num_val imgs = self.dataset.val_imgs vessels = self.dataset.val_vessels masks = self.dataset.val_masks elif phase == 'test': num_data = self.dataset.num_test imgs = self.dataset.test_imgs vessels = self.dataset.test_vessels masks = self.dataset.test_masks generated = [] for iter_ in range(num_data): x_img = imgs[iter_] x_img = np.expand_dims(x_img, axis=0) # (H, W, C) to (1, H, W, C) # measure inference time start_time = time.time() generated_vessel = self.model.sample_imgs(x_img) total_time += (time.time() - start_time) generated.append(np.squeeze( generated_vessel, axis=(0, 3))) # (1, H, W, 1) to (H, W) generated = np.asarray(generated) # calculate measurements auc_sum = self.measure(generated, vessels, masks, num_data, iter_time, phase, total_time) if phase == 'test': # save test images segmented_vessel = utils.remain_in_mask(generated, masks) # crop to original image shape imgs_ = utils.crop_to_original(imgs, self.dataset.ori_shape) cropped_vessel = utils.crop_to_original( segmented_vessel, self.dataset.ori_shape) vessels_ = utils.crop_to_original(vessels, self.dataset.ori_shape) for idx in range(num_data): self.plot(np.expand_dims(imgs_[idx], axis=0), np.expand_dims(cropped_vessel[idx], axis=0), np.expand_dims(vessels_[idx], axis=0), 'test', idx=[idx], save_file=self.img_out_dir, phase='test') return auc_sum
# iterate all images img_size = (640, 640) if dataset == "DRIVE" else (720, 720) ori_shape = (1, 584, 565) if dataset == "DRIVE" else (1, 605, 700) # batchsize=1 fundus_files = utils.all_files_under(fundus_dir.format(dataset)) mask_files = utils.all_files_under(mask_dir.format(dataset)) for index, fundus_file in enumerate(fundus_files): print("processing {}...".format(fundus_file)) # load imgs img = utils.imagefiles2arrs([fundus_file]) mask = utils.imagefiles2arrs([mask_files[index]]) # z score with mean, std (batchsize=1) mean = np.mean(img[0, ...][mask[0, ...] == 255.0], axis=0) std = np.std(img[0, ...][mask[0, ...] == 255.0], axis=0) img[0, ...] = (img[0, ...] - mean) / std # run inference padded_img = utils.pad_imgs(img, img_size) #padded_img=utils.rescale_imgs(img, img_size) vessel_img = model.predict(padded_img, batch_size=1) * 255 # rescaled_vessel = utils.rescale_to_original(vessel_img[...,0], ori_shape) # final_result = utils.remain_in_mask(rescaled_vessel[0,...], mask[0,...]) cropped_vessel = utils.crop_to_original(vessel_img[..., 0], ori_shape) final_result = utils.remain_in_mask(cropped_vessel[0, ...], mask[0, ...]) png_file = os.path.splitext(fundus_file)[0] + '.png' Image.fromarray(final_result.astype(np.uint8)).save( os.path.join(out_dir.format(dataset), os.path.basename(png_file)))