Использование операции ssd_random_crop_pad в API обнаружения объектов Tensorflow

Я использую API обнаружения объектов Tensorflow для обучения модели обнаружения объектов начального SSD в Cloud ML Engine, и я хочу использовать различные data_augmentation_options, как указано в файл preprocessor.proto.

Тот, который меня сейчас интересует, - это операция ssd_random_crop_pad и изменение min_padded_size_ratio и max_padded_size_ratio.

Документация, упомянутая в preprocessor.proto говорит следующее:

// Min ratio of padded image height and width to the input image's height and
  // width. Two entries per operation.
  repeated float min_padded_size_ratio = 8;

  // Max ratio of padded image height and width to the input image's height and
  // width. Two entries per operation.
repeated float max_padded_size_ratio = 9;

И документация, упомянутая в preprocessor.py определяет функцию как таковую:

def ssd_random_crop_pad(image,
                        boxes,
                        labels,
                        label_scores=None,
                        multiclass_scores=None,
                        min_object_covered=(0.1, 0.3, 0.5, 0.7, 0.9, 1.0),
                        aspect_ratio_range=((0.5, 2.0),) * 6,
                        area_range=((0.1, 1.0),) * 6,
                        overlap_thresh=(0.1, 0.3, 0.5, 0.7, 0.9, 1.0),
                        random_coef=(0.15,) * 6,
                        min_padded_size_ratio=((1.0, 1.0),) * 6,
                        max_padded_size_ratio=((2.0, 2.0),) * 6,
                        pad_color=(None,) * 6,
                        seed=None,
preprocess_vars_cache=None)

Где аргументы для min_padded_size_ratio и max_padded_size_ratio являются кортежем формы (h, w).

Однако, когда я предоставляю эти аргументы в файле config в формате, указанном ниже:

data_augmentation_options {
    ssd_random_crop_pad {
      operations {
        min_padded_size_ratio: (16.0, 16.0)
        max_padded_size_ratio: (16.0, 16.0)
        random_coef: 0.5
      }
    }
  }

Я столкнулся со следующей ошибкой:

ps-replica-2
Traceback (most recent call last): File "/usr/lib/python2.7/runpy.py", line 174, in _run_module_as_main "__main__", fname, loader, pkg_name) File "/usr/lib/python2.7/runpy.py", line 72, in _run_code exec code in run_globals File "/root/.local/lib/python2.7/site-packages/object_detection/train.py", line 163, in <module> tf.app.run() File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/platform/app.py", line 48, in run _sys.exit(main(_sys.argv[:1] + flags_passthrough)) File "/root/.local/lib/python2.7/site-packages/object_detection/train.py", line 91, in main FLAGS.pipeline_config_path) File "/root/.local/lib/python2.7/site-packages/object_detection/utils/config_util.py", line 43, in get_configs_from_pipeline_file text_format.Merge(proto_str, pipeline_config) File "/usr/local/lib/python2.7/dist-packages/google/protobuf/text_format.py", line 533, in Merge descriptor_pool=descriptor_pool) File "/usr/local/lib/python2.7/dist-packages/google/protobuf/text_format.py", line 587, in MergeLines return parser.MergeLines(lines, message) File "/usr/local/lib/python2.7/dist-packages/google/protobuf/text_format.py", line 620, in MergeLines self._ParseOrMerge(lines, message) File "/usr/local/lib/python2.7/dist-packages/google/protobuf/text_format.py", line 635, in _ParseOrMerge self._MergeField(tokenizer, message) File "/usr/local/lib/python2.7/dist-packages/google/protobuf/text_format.py", line 735, in _MergeField merger(tokenizer, message, field) File "/usr/local/lib/python2.7/dist-packages/google/protobuf/text_format.py", line 823, in _MergeMessageField self._MergeField(tokenizer, sub_message) File "/usr/local/lib/python2.7/dist-packages/google/protobuf/text_format.py", line 735, in _MergeField merger(tokenizer, message, field) File "/usr/local/lib/python2.7/dist-packages/google/protobuf/text_format.py", line 823, in _MergeMessageField self._MergeField(tokenizer, sub_message) File "/usr/local/lib/python2.7/dist-packages/google/protobuf/text_format.py", line 735, in _MergeField merger(tokenizer, message, field) File "/usr/local/lib/python2.7/dist-packages/google/protobuf/text_format.py", line 823, in _MergeMessageField self._MergeField(tokenizer, sub_message) File "/usr/local/lib/python2.7/dist-packages/google/protobuf/text_format.py", line 735, in _MergeField merger(tokenizer, message, field) File "/usr/local/lib/python2.7/dist-packages/google/protobuf/text_format.py", line 823, in _MergeMessageField self._MergeField(tokenizer, sub_message) File "/usr/local/lib/python2.7/dist-packages/google/protobuf/text_format.py", line 735, in _MergeField merger(tokenizer, message, field) File "/usr/local/lib/python2.7/dist-packages/google/protobuf/text_format.py", line 870, in _MergeScalarField value = tokenizer.ConsumeFloat() File "/usr/local/lib/python2.7/dist-packages/google/protobuf/text_format.py", line 1201, in ConsumeFloat raise self.ParseError(str(e)) ParseError: 166:31 : Couldn't parse float: (

Может ли кто-нибудь помочь мне с форматом передачи аргументов в min_padded_size_ratio и max_padded_size_ratio?

Изменить 1: изменен файл config со следующими аргументами:

ssd_random_crop_pad {
operations {
min_padded_size_ratio: 16.0
min_padded_size_ratio: 16.0
max_padded_size_ratio: 16.0
max_padded_size_ratio: 16.0
random_coef: 0.5
}
}

Теперь вы столкнулись со следующей ошибкой:

Executor failed to create kernel. Invalid argument: Aspect ratio range must be non-negative: [0, 0]

[[Node: cond/RandomCropImage/SampleDistortedBoundingBox = SampleDistortedBoundingBox[T=DT_INT32, area_range=[0, 0], aspect_ratio_range=[0, 0], max_attempts=100, min_object_covered=0, seed=0, seed2=0, use_image_if_no_bounding_boxes=true, _device="/job:master/replica:0/task:0/cpu:0"](cond/RandomCropImage/Shape, cond/RandomCropImage/ExpandDims)]]

person Jash Shah    schedule 10.06.2018    source источник


Ответы (3)


Как упоминалось здесь, вам нужен другой способ подготовки прототипа текста . Пожалуйста, предоставьте более подробную информацию для вашего дальнейшего вопроса.

person Zhichao Lu    schedule 10.06.2018
comment
Какие дополнительные сведения я могу предоставить вам, чтобы убедиться, что проблема решена? - person Jash Shah; 11.06.2018
comment
Очевидно, вам нужно присвоить значения для aspect_ratio_range в вашей операции, чтобы они не использовали значение по умолчанию [0,0], что нарушает некоторые утверждения. - person Zhichao Lu; 11.06.2018

Я столкнулся с той же проблемой, и для меня аргументы были переданы:

  data_augmentation_options {
    random_crop_pad_image {
      min_padded_size_ratio: 1
      min_padded_size_ratio: 1
      max_padded_size_ratio: 2
      max_padded_size_ratio: 2
      random_coef: 0.5
      min_aspect_ratio: 0.5
      max_aspect_ratio: 2.0
    }

Так что, возможно, вам стоит вообще удалить operations. Кроме того, по моему опыту, вам не следует слишком полагаться на документацию по тензорному потоку (они, как правило, ломаются или, по крайней мере, меняются слишком часто, к сожалению). Проверьте варианты прямо в ваших протоколах. Например, в моем случае аргумент aspect_ratio_range появляется в docs, но не в моем прототипе, поэтому он жаловался. Мой прототип содержал код:

message RandomCropPadImage {
  // Cropping operation must cover at least one box by this fraction.
  optional float min_object_covered = 1 [default=1.0];

  // Aspect ratio bounds of image after cropping operation.
  optional float min_aspect_ratio = 2 [default=0.75];
  optional float max_aspect_ratio = 3 [default=1.33];

что показывает, что я должен использовать вместо них min_aspect_ratio и max_aspect_ratio.

person Eypros    schedule 09.10.2018

Я тоже столкнулся с ошибкой. Я мог бы решить эту проблему, передав следующий аргумент:

data_augmentation_options {                                            
   ssd_random_crop_pad_fixed_aspect_ratio {
   operations{
        min_object_covered: 1
        min_aspect_ratio: 0.9
        max_aspect_ratio: 1.1
        min_area: 0.4
        max_area: 1
   }
   aspect_ratio: 1
}                                                                            
}
person Rasmita-A    schedule 29.04.2021