def cluster(self, sem_seg_prediction, ins_seg_prediction,
                n_objects_prediction):

        seg_height, seg_width = ins_seg_prediction.shape[1:]

        sem_seg_prediction = sem_seg_prediction.cpu().numpy()
        sem_seg_prediction = sem_seg_prediction.argmax(0).astype(np.uint8)

        embeddings = ImageUtilities.coordinate_adder(
            seg_height, seg_width)(ins_seg_prediction)
        embeddings = embeddings.cpu().numpy()
        embeddings = embeddings.transpose(1, 2, 0)  # h, w, c

        n_objects_prediction = n_objects_prediction.cpu().numpy()[0]

        embeddings = np.stack([
            embeddings[:, :, i][sem_seg_prediction != 0]
            for i in range(embeddings.shape[2])
        ],
                              axis=1)

        clustering = SpectralClustering(n_clusters=n_objects_prediction,
                                        eigen_solver=None,
                                        random_state=None,
                                        n_init=10,
                                        gamma=1.0,
                                        affinity='rbf',
                                        n_neighbors=10,
                                        eigen_tol=0.0,
                                        assign_labels='discretize',
                                        degree=3,
                                        coef0=1,
                                        kernel_params=None,
                                        n_jobs=self.n_workers).fit(embeddings)

        labels = clustering.labels_

        instance_mask = np.zeros((seg_height, seg_width), dtype=np.uint8)

        fg_coords = np.where(sem_seg_prediction != 0)
        for si in range(len(fg_coords[0])):
            y_coord = fg_coords[0][si]
            x_coord = fg_coords[1][si]
            _label = labels[si] + 1
            instance_mask[y_coord, x_coord] = _label

        return sem_seg_prediction, instance_mask, n_objects_prediction
    def __init__(self, resize_height, resize_width, mean, std, use_coordinates,
                 model, n_workers):

        self.normalizer = ImageUtilities.image_normalizer(mean, std)
        self.use_coordinates = use_coordinates

        self.resize_height = resize_height
        self.resize_width = resize_width
        self.model = model

        self.n_workers = n_workers

        self.img_resizer = ImageUtilities.image_resizer(
            self.resize_height, self.resize_width)

        if self.use_coordinates:
            self.coordinate_adder = ImageUtilities.coordinate_adder(
                self.resize_height, self.resize_width)
    def __init__(self, resize_height, resize_width, mean,
                 std, use_coordinates, model, n_workers):

        self.normalizer = ImageUtilities.image_normalizer(mean, std)
        self.use_coordinates = use_coordinates

        self.resize_height = resize_height
        self.resize_width = resize_width
        self.model = model

        self.n_workers = n_workers

        self.img_resizer = ImageUtilities.image_resizer(
            self.resize_height, self.resize_width)

        if self.use_coordinates:
            self.coordinate_adder = ImageUtilities.coordinate_adder(
                self.resize_height, self.resize_width)
    def cluster(self, sem_seg_prediction, ins_seg_prediction,
                n_objects_prediction):

        seg_height, seg_width = ins_seg_prediction.shape[1:]

        sem_seg_prediction = sem_seg_prediction.cpu().numpy()
        sem_seg_prediction = sem_seg_prediction.argmax(0).astype(np.uint8)

        embeddings = ImageUtilities.coordinate_adder(
            seg_height, seg_width)(ins_seg_prediction)
        embeddings = embeddings.cpu().numpy()
        embeddings = embeddings.transpose(1, 2, 0)  # h, w, c

        n_objects_prediction = n_objects_prediction.cpu().numpy()[0]

        embeddings = np.stack([embeddings[:, :, i][sem_seg_prediction != 0]
                               for i in range(embeddings.shape[2])], axis=1)

        clustering = SpectralClustering(n_clusters=n_objects_prediction,
                                        eigen_solver=None, random_state=None,
                                        n_init=10, gamma=1.0, affinity='rbf',
                                        n_neighbors=10, eigen_tol=0.0,
                                        assign_labels='discretize', degree=3,
                                        coef0=1,
                                        kernel_params=None,
                                        n_jobs=self.n_workers).fit(embeddings)

        labels = clustering.labels_

        instance_mask = np.zeros((seg_height, seg_width), dtype=np.uint8)

        fg_coords = np.where(sem_seg_prediction != 0)
        for si in range(len(fg_coords[0])):
            y_coord = fg_coords[0][si]
            x_coord = fg_coords[1][si]
            _label = labels[si] + 1
            instance_mask[y_coord, x_coord] = _label

        return sem_seg_prediction, instance_mask, n_objects_prediction
Beispiel #5
0
    def __init__(self,
                 mode,
                 n_classes,
                 max_n_objects,
                 mean,
                 std,
                 image_height,
                 image_width,
                 random_hor_flipping=True,
                 random_ver_flipping=True,
                 random_90x_rotation=True,
                 random_rotation=True,
                 random_color_jittering=True,
                 use_coordinates=False):

        self._mode = mode
        self.n_classes = n_classes
        self.max_n_objects = max_n_objects

        assert self._mode in ['training', 'test']

        self.mean = mean
        self.std = std
        self.image_height = image_height
        self.image_width = image_width

        self.random_horizontal_flipping = random_hor_flipping
        self.random_vertical_flipping = random_ver_flipping
        self.random_90x_rotation = random_90x_rotation
        self.random_rotation = random_rotation
        self.random_color_jittering = random_color_jittering

        self.use_coordinates = use_coordinates

        if self._mode == 'training':
            if self.random_horizontal_flipping:
                self.horizontal_flipper = IU.image_random_horizontal_flipper()
            if self.random_vertical_flipping:
                self.vertical_flipper = IU.image_random_vertical_flipper()
            if self.random_90x_rotation:
                self.rotator_90x = IU.image_random_90x_rotator()
            if self.random_rotation:
                self.rotator = IU.image_random_rotator(expand=True)
            if self.random_color_jittering:
                self.color_jitter = IU.image_random_color_jitter(
                    brightness=0.1, contrast=0.1, saturation=0.1, hue=0.1)

            self.img_resizer = IU.image_resizer(self.image_height,
                                                self.image_width)
            self.ann_resizer = IU.image_resizer(self.image_height,
                                                self.image_width,
                                                interpolation=Image.NEAREST)
        else:
            self.img_resizer = IU.image_resizer(self.image_height,
                                                self.image_width)
            self.ann_resizer = IU.image_resizer(self.image_height,
                                                self.image_width,
                                                interpolation=Image.NEAREST)

        self.image_normalizer = IU.image_normalizer(self.mean, self.std)

        if self.use_coordinates:
            self.coordinate_adder = IU.coordinate_adder(
                self.image_height, self.image_width)