Exemplo n.º 1
0
  def build_inputs(
      self,
      params: exp_cfg.DataConfig,
      input_context: Optional[tf.distribute.InputContext] = None
  ) -> tf.data.Dataset:
    """Builds classification input."""

    num_classes = self.task_config.model.num_classes
    input_size = self.task_config.model.input_size
    image_field_key = self.task_config.train_data.image_field_key
    label_field_key = self.task_config.train_data.label_field_key
    is_multilabel = self.task_config.train_data.is_multilabel

    if params.tfds_name:
      decoder = tfds_factory.get_classification_decoder(params.tfds_name)
    else:
      decoder = classification_input.Decoder(
          image_field_key=image_field_key, label_field_key=label_field_key,
          is_multilabel=is_multilabel)

    parser = classification_input.Parser(
        output_size=input_size[:2],
        num_classes=num_classes,
        image_field_key=image_field_key,
        label_field_key=label_field_key,
        decode_jpeg_only=params.decode_jpeg_only,
        aug_rand_hflip=params.aug_rand_hflip,
        aug_type=params.aug_type,
        is_multilabel=is_multilabel,
        dtype=params.dtype)

    reader = input_reader_factory.input_reader_generator(
        params,
        dataset_fn=dataset_fn.pick_dataset_fn(params.file_type),
        decoder_fn=decoder.decode,
        parser_fn=parser.parse_fn(params.is_training))

    dataset = reader.read(input_context=input_context)

    return dataset
    def build_inputs(self, params, input_context=None):
        """Build input dataset."""
        decoder_cfg = params.decoder.get()
        if params.decoder.type == 'simple_decoder':
            decoder = tf_example_decoder.TfExampleDecoder(
                regenerate_source_id=decoder_cfg.regenerate_source_id)
        elif params.decoder.type == 'label_map_decoder':
            decoder = tf_example_label_map_decoder.TfExampleDecoderLabelMap(
                label_map=decoder_cfg.label_map,
                regenerate_source_id=decoder_cfg.regenerate_source_id)
        else:
            raise ValueError('Unknown decoder type: {}!'.format(
                params.decoder.type))

        parser = retinanet_input.Parser(
            output_size=self.task_config.model.input_size[:2],
            min_level=self.task_config.model.min_level,
            max_level=self.task_config.model.max_level,
            num_scales=self.task_config.model.anchor.num_scales,
            aspect_ratios=self.task_config.model.anchor.aspect_ratios,
            anchor_size=self.task_config.model.anchor.anchor_size,
            dtype=params.dtype,
            match_threshold=params.parser.match_threshold,
            unmatched_threshold=params.parser.unmatched_threshold,
            aug_rand_hflip=params.parser.aug_rand_hflip,
            aug_scale_min=params.parser.aug_scale_min,
            aug_scale_max=params.parser.aug_scale_max,
            skip_crowd_during_training=params.parser.
            skip_crowd_during_training,
            max_num_instances=params.parser.max_num_instances)

        reader = input_reader.InputReader(
            params,
            dataset_fn=dataset_fn.pick_dataset_fn(params.file_type),
            decoder_fn=decoder.decode,
            parser_fn=parser.parse_fn(params.is_training))
        dataset = reader.read(input_context=input_context)

        return dataset
Exemplo n.º 3
0
  def build_inputs(self,
                   params: exp_cfg.DataConfig,
                   input_context: Optional[tf.distribute.InputContext] = None):
    """Builds classification input."""

    num_classes = self.task_config.model.num_classes
    input_size = self.task_config.model.input_size
    image_field_key = self.task_config.train_data.image_field_key
    label_field_key = self.task_config.train_data.label_field_key

    if params.tfds_name:
      if params.tfds_name in tfds_classification_decoders.TFDS_ID_TO_DECODER_MAP:
        decoder = tfds_classification_decoders.TFDS_ID_TO_DECODER_MAP[
            params.tfds_name]()
      else:
        raise ValueError('TFDS {} is not supported'.format(params.tfds_name))
    else:
      decoder = classification_input.Decoder(
          image_field_key=image_field_key, label_field_key=label_field_key)

    parser = classification_input.Parser(
        output_size=input_size[:2],
        num_classes=num_classes,
        image_field_key=image_field_key,
        label_field_key=label_field_key,
        aug_rand_hflip=params.aug_rand_hflip,
        aug_type=params.aug_type,
        dtype=params.dtype)

    reader = input_reader_factory.input_reader_generator(
        params,
        dataset_fn=dataset_fn.pick_dataset_fn(params.file_type),
        decoder_fn=decoder.decode,
        parser_fn=parser.parse_fn(params.is_training))

    dataset = reader.read(input_context=input_context)

    return dataset
Exemplo n.º 4
0
    def build_inputs(self, params, input_context=None) -> tf.data.Dataset:
        """Builds classification input."""
        decoder = segmentation_input_3d.Decoder(
            image_field_key=params.image_field_key,
            label_field_key=params.label_field_key)
        parser = segmentation_input_3d.Parser(
            input_size=params.input_size,
            num_classes=params.num_classes,
            num_channels=params.num_channels,
            image_field_key=params.image_field_key,
            label_field_key=params.label_field_key,
            dtype=params.dtype,
            label_dtype=params.label_dtype)

        reader = input_reader.InputReader(
            params,
            dataset_fn=dataset_fn.pick_dataset_fn(params.file_type),
            decoder_fn=decoder.decode,
            parser_fn=parser.parse_fn(params.is_training))

        dataset = reader.read(input_context=input_context)

        return dataset
Exemplo n.º 5
0
    def build_inputs(
            self,
            params,
            input_context: Optional[tf.distribute.InputContext] = None):
        """Build input dataset."""
        if isinstance(params, coco.COCODataConfig):
            dataset = coco.COCODataLoader(params).load(input_context)
        else:
            if params.tfds_name:
                decoder = tfds_factory.get_detection_decoder(params.tfds_name)
            else:
                decoder_cfg = params.decoder.get()
                if params.decoder.type == 'simple_decoder':
                    decoder = tf_example_decoder.TfExampleDecoder(
                        regenerate_source_id=decoder_cfg.regenerate_source_id)
                elif params.decoder.type == 'label_map_decoder':
                    decoder = tf_example_label_map_decoder.TfExampleDecoderLabelMap(
                        label_map=decoder_cfg.label_map,
                        regenerate_source_id=decoder_cfg.regenerate_source_id)
                else:
                    raise ValueError('Unknown decoder type: {}!'.format(
                        params.decoder.type))

            parser = detr_input.Parser(
                class_offset=self._task_config.losses.class_offset,
                output_size=self._task_config.model.input_size[:2],
            )

            reader = input_reader_factory.input_reader_generator(
                params,
                dataset_fn=dataset_fn.pick_dataset_fn(params.file_type),
                decoder_fn=decoder.decode,
                parser_fn=parser.parse_fn(params.is_training))
            dataset = reader.read(input_context=input_context)

        return dataset
Exemplo n.º 6
0
  def build_inputs(self,
                   params: exp_cfg.DataConfig,
                   input_context: Optional[tf.distribute.InputContext] = None):
    """Builds BASNet input."""

    ignore_label = self.task_config.losses.ignore_label

    decoder = segmentation_input.Decoder()
    parser = segmentation_input.Parser(
        output_size=params.output_size,
        crop_size=params.crop_size,
        ignore_label=ignore_label,
        aug_rand_hflip=params.aug_rand_hflip,
        dtype=params.dtype)

    reader = input_reader.InputReader(
        params,
        dataset_fn=dataset_fn.pick_dataset_fn(params.file_type),
        decoder_fn=decoder.decode,
        parser_fn=parser.parse_fn(params.is_training))

    dataset = reader.read(input_context=input_context)

    return dataset
  def build_inputs(self,
                   params: exp_cfg.DataConfig,
                   input_context: Optional[tf.distribute.InputContext] = None):
    """Builds classification input."""

    ignore_label = self.task_config.losses.ignore_label

    if params.tfds_name:
      if params.tfds_name in tfds_segmentation_decoders.TFDS_ID_TO_DECODER_MAP:
        decoder = tfds_segmentation_decoders.TFDS_ID_TO_DECODER_MAP[
            params.tfds_name]()
      else:
        raise ValueError('TFDS {} is not supported'.format(params.tfds_name))
    else:
      decoder = segmentation_input.Decoder()

    parser = segmentation_input.Parser(
        output_size=params.output_size,
        crop_size=params.crop_size,
        ignore_label=ignore_label,
        resize_eval_groundtruth=params.resize_eval_groundtruth,
        groundtruth_padded_size=params.groundtruth_padded_size,
        aug_scale_min=params.aug_scale_min,
        aug_scale_max=params.aug_scale_max,
        aug_rand_hflip=params.aug_rand_hflip,
        dtype=params.dtype)

    reader = input_reader_factory.input_reader_generator(
        params,
        dataset_fn=dataset_fn.pick_dataset_fn(params.file_type),
        decoder_fn=decoder.decode,
        parser_fn=parser.parse_fn(params.is_training))

    dataset = reader.read(input_context=input_context)

    return dataset
Exemplo n.º 8
0
    def build_inputs(self, params, input_context=None):
        """Build input dataset."""
        model = self.task_config.model

        # get anchor boxes dict based on models min and max level
        backbone = model.backbone.get()
        anchor_dict, level_limits = model.anchor_boxes.get(
            backbone.min_level, backbone.max_level)

        params.seed = self.task_config.seed
        # set shared patamters between mosaic and yolo_input
        base_config = dict(
            letter_box=params.parser.letter_box,
            aug_rand_translate=params.parser.aug_rand_translate,
            aug_rand_angle=params.parser.aug_rand_angle,
            aug_rand_perspective=params.parser.aug_rand_perspective,
            area_thresh=params.parser.area_thresh,
            random_flip=params.parser.random_flip,
            seed=params.seed,
        )

        # get the decoder
        decoder = self._get_data_decoder(params)

        # init Mosaic
        sample_fn = mosaic.Mosaic(
            output_size=model.input_size,
            mosaic_frequency=params.parser.mosaic.mosaic_frequency,
            mixup_frequency=params.parser.mosaic.mixup_frequency,
            jitter=params.parser.mosaic.jitter,
            mosaic_center=params.parser.mosaic.mosaic_center,
            mosaic_crop_mode=params.parser.mosaic.mosaic_crop_mode,
            aug_scale_min=params.parser.mosaic.aug_scale_min,
            aug_scale_max=params.parser.mosaic.aug_scale_max,
            **base_config)

        # init Parser
        parser = yolo_input.Parser(
            output_size=model.input_size,
            anchors=anchor_dict,
            use_tie_breaker=params.parser.use_tie_breaker,
            jitter=params.parser.jitter,
            aug_scale_min=params.parser.aug_scale_min,
            aug_scale_max=params.parser.aug_scale_max,
            aug_rand_hue=params.parser.aug_rand_hue,
            aug_rand_saturation=params.parser.aug_rand_saturation,
            aug_rand_brightness=params.parser.aug_rand_brightness,
            max_num_instances=params.parser.max_num_instances,
            scale_xy=model.detection_generator.scale_xy.get(),
            expanded_strides=model.detection_generator.path_scales.get(),
            darknet=model.darknet_based_model,
            best_match_only=params.parser.best_match_only,
            anchor_t=params.parser.anchor_thresh,
            random_pad=params.parser.random_pad,
            level_limits=level_limits,
            dtype=params.dtype,
            **base_config)

        # init the dataset reader
        reader = input_reader.InputReader(
            params,
            dataset_fn=dataset_fn.pick_dataset_fn(params.file_type),
            decoder_fn=decoder.decode,
            sample_fn=sample_fn.mosaic_fn(is_training=params.is_training),
            parser_fn=parser.parse_fn(params.is_training))
        dataset = reader.read(input_context=input_context)
        return dataset
Exemplo n.º 9
0
 def __init__(self, file_pattern, file_type, num_examples, include_mask):
   self._file_pattern = file_pattern
   self._num_examples = num_examples
   self._include_mask = include_mask
   self._dataset_fn = dataset_fn.pick_dataset_fn(file_type)
Exemplo n.º 10
0
    def test_yolo_input(self, is_training, should_output_image=False):

        params = DataConfig(input_path='D:/data/whizz_tf/detect_env*',
                            output_size=[256, 256],
                            global_batch_size=1,
                            is_training=is_training,
                            max_bbox_per_scale=150,
                            is_bbox_in_pixels=False,
                            is_xywh=True)

        model_params = YoloModel(num_classes=6,
                                 input_size=[256, 256, 3],
                                 head=YoloHead(anchor_per_scale=3,
                                               strides=[16, 32, 64],
                                               anchors=[
                                                   12, 16, 19, 36, 40, 28, 36,
                                                   75, 76, 55, 72, 146, 142,
                                                   110, 192, 243, 459, 401
                                               ],
                                               xy_scale=[1.2, 1.1, 1.05]))

        decoder = yolo_input.Decoder(
            is_bbox_in_pixels=params.is_bbox_in_pixels, is_xywh=params.is_xywh)
        parser = yolo_input.Parser(
            output_size=params.output_size,
            input_size=model_params.input_size,
            anchor_per_scale=model_params.head.anchor_per_scale,
            num_classes=model_params.num_classes,
            max_bbox_per_scale=params.max_bbox_per_scale,
            strides=model_params.head.strides,
            anchors=model_params.head.anchors,
            aug_policy=params.aug_policy,
            randaug_magnitude=params.randaug_magnitude,
            randaug_available_ops=params.randaug_available_ops,
            aug_rand_hflip=params.aug_rand_hflip,
            aug_scale_min=params.aug_scale_min,
            aug_scale_max=params.aug_scale_max,
            preserve_aspect_ratio=params.preserve_aspect_ratio,
            aug_jitter_im=params.aug_jitter_im,
            aug_jitter_boxes=params.aug_jitter_boxes,
            dtype=params.dtype)

        reader = input_reader_factory.input_reader_generator(
            params,
            dataset_fn=dataset_fn.pick_dataset_fn(params.file_type),
            decoder_fn=decoder.decode,
            parser_fn=parser.parse_fn(params.is_training))

        dataset = reader.read(input_context=None).take(1)

        sample = tf.data.experimental.get_single_element(dataset)
        image, target = sample

        if should_output_image:
            output_image = tf.image.convert_image_dtype(tf.squeeze(image[0]),
                                                        dtype=tf.uint8)
            output_image = tf.image.encode_png(output_image)
            tf.io.write_file('D:/Desktop/test.png', output_image)

        self.assertAllEqual(image.shape, (1, 256, 256, 3))

        for i in range(len(target['labels'])):
            self.assertAllEqual(target['labels'][i].shape[-2:], (3, 11))

            self.assertTrue(tf.reduce_all(target['labels'][i] >= 0))
            self.assertTrue(
                tf.reduce_all(target['labels'][i][:, :, :, :, :4] <= 256))
            self.assertTrue(
                tf.reduce_all(target['labels'][i][:, :, :, :, 4:] <= 1))

            print(
                'target boxes for %s has >1 %s' %
                (i,
                 tf.math.reduce_any(target['labels'][i][:, :, :, :, :4] > 1)))

            self.assertAllEqual(target['bboxes'][i].shape[-2:], (150, 4))
            self.assertTrue(
                tf.reduce_all(
                    tf.math.logical_and(target['bboxes'][i] >= 0,
                                        target['bboxes'][i] <= 256)))