Как анализировать, редактировать и генерировать файлы object_detection / pipeline.config с помощью Google Protobuf - PullRequest
0 голосов
/ 10 февраля 2019
  • Я тренирую несколько моделей в общей парадигме обучения ансамбля, в настоящее время я работаю с несколькими детекторами, и каждый раз, когда я тренируюсь, мне приходится редактировать конфигурационный файл каждого детектора, это, очевидно, вызывает путаницу иНесколько раз я начинал тренироваться с неправильными файлами конфигурации.
  • В качестве решения я пытаюсь создать редактор для файлов конфигурации API обнаружения объектов Google.Файл конфигурации работает с Google Protocol Buffer .
  • Ссылка на файлы, которые я использую: pipe.proto , object_detection / protos , пример .config file

Я пробовал следующий код:

from object_detection.protos import input_reader_pb2
with open('/models/research/object_detection/samples/configs/ssd_resnet50_v1_fpn_shared_box_predictor_640x640_coco14_sync.config', 'rb') as f:
    config = f.read()

read = input_reader_pb2.InputReader().ParseFromString(config)

И я получаю следующую ошибку:

    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-19-8043e6bb108f>", line 1, in <module>
    input_reader_pb2.InputReader().ParseFromString(txt)
google.protobuf.message.DecodeError: Error parsing message

Что мне здесь не хватает?Как правильно проанализировать и отредактировать файл конфигурации?

Спасибо,

Ход

1 Ответ

0 голосов
/ 21 февраля 2019

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

import tensorflow as tf
from google.protobuf import text_format

from object_detection.protos import pipeline_pb2

def get_configs_from_pipeline_file(pipeline_config_path, config_override=None):

  '''
  read .config and convert it to proto_buffer_object
  '''

  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)
  if config_override:
    text_format.Merge(config_override, pipeline_config)
  #print(pipeline_config)
  return pipeline_config


def create_configs_from_pipeline_proto(pipeline_config):
  '''
  Returns the configurations as dictionary
  '''

  configs = {}
  configs["model"] = pipeline_config.model
  configs["train_config"] = pipeline_config.train_config
  configs["train_input_config"] = pipeline_config.train_input_reader
  configs["eval_config"] = pipeline_config.eval_config
  configs["eval_input_configs"] = pipeline_config.eval_input_reader
  # Keeps eval_input_config only for backwards compatibility. All clients should
  # read eval_input_configs instead.
  if configs["eval_input_configs"]:
    configs["eval_input_config"] = configs["eval_input_configs"][0]
  if pipeline_config.HasField("graph_rewriter"):
    configs["graph_rewriter_config"] = pipeline_config.graph_rewriter

  return configs


configs = get_configs_from_pipeline_file('faster_rcnn_resnet101_pets.config')
config_as_dict = create_configs_from_pipeline_proto(configs)

по ссылке здесь

...