Создание записей TFRecord для задач сегментации
Для эффективной работы с данными, в том числе и на TPU, TensorFlow предоставляет формат TFRecord. Формат TFRecord это простой формат для хранения последовательности двоичных записей. Подробнее об этом вы можете почитать здесь:
https://www.tensorflow.org/tutorials/load_data/tfrecord?hl=ru
Здесь же будет показано, как использовать TFRecord для задач сегментации, например сетей UNet. Пример был сделал с использованием Googler Colab. Ссылка на GitHub с кодом представлена внизу.
Первоначально создадим тестовые данные, которые будут добавляться в tfrec. Для этого воспользуемся OpenCV и генератором случайных окружностей
Выведем часть полученных изображений.
Создадим маски путём перевода изображений в градации серого, а затем бинаризуя их.
Теперь необходимо сохранить все эти изображения в tfrec. Для этого подключаем TensorFlow
Используем рекомендуемые функции для перевода в byte. Каждая функция принимает на вход скалярное значение и возвращает tf.train.Feature содержащий один из трех вышеприведенных list типов:
Объединяющая функция, чтобы создать один элемент записи из изображения и маски
Создание записи
Видно, что файл размером около 100Mb создан. Далее читаем эти данные.
Смотрим маску и изображение:
На этом все. Для удобства можете загрузить отсюда код в Google Colab и попробовать
https://github.com/recogru/papers/blob/master/TFRecord_sample.ipynb