Может ли Tensorflow перемешать несколько двоичных файлов TFrecord для обучения обнаружению объектов? - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь обучить модель FasterRCNN с помощью API обнаружения объектов.

У меня есть набор данных из 5 классов (грузовик, машина, фургон, лодка и мотоцикл), по 1000 изображений в каждом.Каждый класс имеет свой собственный файл TFrecord, разделенный на 10 частей.Это дает мне 50 файлов, которые выглядят примерно так:

  • truck_train.record-00000-of-00010
  • car_train.record-00000-of-00010
  • van_train.record-00000-of-00010
  • boat_train.record-00000-of-00010
  • bike_train.record-00000-of-00010

Могу ли я настроить свой обучающий конвейер таким образом, чтобы Tensorflow открывал и перемешивал содержимое этих файлов случайным образом?

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

Прочитав этот старый ответ о перемешивании, мне интересно, есть ливстроенный способ, которым Tensorflow может реализовать очередь случайного воспроизведения, даже если это означает разделение моих файлов TFrecords на 100 осколков вместо 10.

Я использую модифицированный образец .config файла для FasterRCNNNно я представляю проблемыесли Tensorflow открывает только один файл .record за раз, поскольку каждый файл содержит только один класс.

Мне известно, что tf_record_input_reader может получить список файлов:

train_input_reader: {
  tf_record_input_reader {
    input_path: ["Datasets\train-1.record", "Datasets\train-2.record"]
  }

Byувеличит размер читателей ввода shuffle buffer и num_readers, будет ли train.py иметь достаточную рандомизацию данных?

1 Ответ

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

Такая конфигурация должна быть в порядке:

train_input_reader: {
  tf_record_input_reader {
    input_path: "Datasets\train-1.record"
    input_path: "Datasets\train-2.record"
    ...
    input_path: "Datasets\train-10.record"
  }
  shuffle: True
}

Или просто:

train_input_reader: {
  tf_record_input_reader {
    input_path: "Datasets\*.record"
  }
  shuffle: True
}

Однако значение по умолчанию для shuffle в любом случае равно True,так что это только для многословия.

Значение по умолчанию для num_readers равно 64, а для filenames_shuffle_buffer_size - 100, поэтому для имеющихся у вас 50 файлов этого должно быть достаточно.

...