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
Пример #3
0
    # 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)))