Обновление конфигурации протобуфера при обнаружении объекта тензорного потока - PullRequest
0 голосов
/ 11 марта 2019

В соответствующих конфигурационных файлах , по умолчанию быстрее-RCNN имеют только random horizontal flips с поддержкой и SSD с иметь random horizontal flips с последующим SSD random crop включенным . Я хочу добавить больше вариантов дополнения. Для этого я написал следующий фрагмент:

import tensorflow as tf
from object_detection.protos import pipeline_pb2, preprocessor_pb2
from google.protobuf import text_format

def get_configs_from_pipeline_file(pipeline_config_path):

  pipeline_config = pipeline_pb2.TrainEvalPipelineConfig()
  with tf.gfile.GFile(pipeline_config_path, 'r') as f:
    proto_str = f.read()
    text_format.Merge(proto_str, pipeline_config)
  return pipeline_config


config = get_configs_from_pipeline_file(
    'ssd_inception_v2_coco.config')

VERTICALFLIP = preprocessor_pb2.PreprocessingStep()
VERTICALFLIP.random_vertical_flip.SetInParent()

config.train_config.data_augmentation_options.extend([VERTICALFLIP])
print(config.train_config.data_augmentation_options)

Приведенный выше фрагмент кода добавляется random vertical flip после SSD random crops в качестве следующего шага дополнения в ssd_inception_v2_coco.config , но я хочу добавить его между random horizontal flip и SSD random crops. Потому что, я думаю, что функции увеличения применяются в этом порядке во время тренировки (поправьте меня, если я ошибаюсь).

ОБНОВЛЕНИЕ : Обходной путь, который я нашел, состоит в том, чтобы удалить произвольную обрезку SSD и снова вставить ее в конце.

config = get_configs_from_pipeline_file(
    'ssd_inception_v2_coco.config')

del config.train_config.data_augmentation_options[-1]

VERTICALFLIP = preprocessor_pb2.PreprocessingStep()
VERTICALFLIP.random_vertical_flip.SetInParent()

SSD_RANDOM_CROP = preprocessor_pb2.PreprocessingStep()
SSD_RANDOM_CROP.ssd_random_crop.SetInParent()

config.train_config.data_augmentation_options.extend([VERTICALFLIP])
config.train_config.data_augmentation_options.extend([SSD_RANDOM_CROP])

У меня есть прямой способ сделать это так, как мы можем вставить в список Python по определенному индексу, например:

a=[10,20,30]
a.insert(-1,100)

Я новичок в работе с буферами протокола Google

...