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
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
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
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
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
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
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)
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)))