Файлы TFRecord содержат примеры protobuf для этого. парные изображения для обозначения одного и разных людей.
Проблемы и то, что я пробовал:
- Медленная однопоточная обработка. Обработка даже ограниченного подмножества набора данных (5 пар изображений на каталог для обучения, по 2 для проверки/тестирования) занимает значительное количество времени. (потенциально до 24 часов) с использованием одного потока. Я максимально оптимизировал свой код, что побудило меня изучить многопоточность для повышения производительности.
- Проблемы многопоточности: Когда я реализую многопоточность с помощью concurrent.futures.ThreadPoolExecutor, сеанс внезапно прекращается без каких-либо сообщений об ошибках. Кроме того, все переменные теряются, что требует полного перезапуска с самого начала. Интересно, что многопоточность работает безупречно при использовании одного каталога (поскольку реализованная мной многопоточность заключалась в одновременной работе с разными каталогами, работа с одним каталогом больше не была многопоточностью, а была однопоточным процессом, даже если он был отключен из-за многопоточного пула. объект-исполнитель), но даже использование двух каталогов вызывает те же проблемы, что описаны выше (VGGFace2 имеет примерно 8631 каталог).
Мои вопросы:
- Возможные причины: Что может быть причина этих проблем с многопоточностью? Это ограничение памяти ресурсов Kaggle?
- Альтернативные подходы: Сталкивались ли другие с подобными проблемами? Существуют ли альтернативные подходы для ускорения записи TFRecord в среде Kaggle?
- Я использую библиотеку contextlib.ExitStack, чтобы открыть множество средств записи и писать одновременно.
< /li>
Я долго искал решения в обсуждениях Kaggle и переполнении стека, но не нашел конкретного решения для этого сценария.
Подробнее здесь: https://stackoverflow.com/questions/787 ... e-notebook