def _make_chip_pos_windows(image_extent, label_store, chip_size): chip_size = chip_size pos_windows = [] boxes = label_store.get_labels().get_boxes() done_boxes = set() # Get a random window around each box. If a box was previously included # in a window, then it is skipped. for box in boxes: if box.tuple_format() not in done_boxes: # If this object is bigger than the chip, # don't use this box. if chip_size < box.get_width() or chip_size < box.get_height(): log.warning('Label is larger than chip size: {} ' 'Skipping this label'.format(box.tuple_format())) continue window = box.make_random_square_container(chip_size) pos_windows.append(window) # Get boxes that lie completely within window window_boxes = label_store.get_labels(window=window) window_boxes = ObjectDetectionLabels.get_overlapping( window_boxes, window, ioa_thresh=1.0) window_boxes = window_boxes.get_boxes() window_boxes = [box.tuple_format() for box in window_boxes] done_boxes.update(window_boxes) return pos_windows
def get_train_labels(self, window, scene): window_labels = scene.ground_truth_label_source.get_labels( window=window) return ObjectDetectionLabels.get_overlapping( window_labels, window, ioa_thresh=self.config.chip_options.ioa_thresh, clip=True)
def make_neg_windows(raster_source, label_store, chip_size, nb_windows, max_attempts, filter_windows): extent = raster_source.get_extent() neg_windows = [] for _ in range(max_attempts): for _ in range(max_attempts): window = extent.make_random_square(chip_size) if any(filter_windows([window])): break chip = raster_source.get_chip(window) labels = ObjectDetectionLabels.get_overlapping( label_store.get_labels(), window, ioa_thresh=0.2) # If no labels and not blank, append the chip if len(labels) == 0 and np.sum(chip.ravel()) > 0: neg_windows.append(window) if len(neg_windows) == nb_windows: break return list(neg_windows)
def get_labels(self, window=None): if window is None: return self.labels return ObjectDetectionLabels.get_overlapping(self.labels, window)