Как мы должны профессионально работать с проектами глубокого обучения?

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

- Эй, Джон, где самый последний набор данных для обучения нашего решения для нашего текущего проекта?

- У меня есть копия с сайта А, но я думаю, что у Алисы есть несколько новых изображений с сайта Б.

- Хорошо, завтра попрошу ее загрузить на наш общий диск. Сегодня она работает удаленно. Кстати, работающая в настоящее время модель обучалась только на изображениях с сайта А, верно?

- Я так думаю. Но я знаю, что Питер добавил несколько дополнительных тестов из лаборатории. Это были важные случаи, потому что ранее мы получали ложные срабатывания.

Хорошо, но аннотации дефектов для этих случаев уже проверены клиентом?

Я думаю, что у заказчика были некоторые замечания, но они еще не закончили аннотировать.

И так далее.

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

Есть несколько специальных вариантов, с которых можно начать для основной проблемы хранения и передачи. Один из них — создать общее дисковое пространство на локальном сервере, куда каждый может загружать или скачивать файлы. Мы называем это локальным хранилищем, и это довольно распространено. Другая возможность — использовать сервис онлайн-хранилища, такой как Google Drive. Для передачи изображений между клиентом и поставщиком люди также могут использовать такие сервисы, как WeTransfer. Все становится сложнее, когда количество наборов данных растет или когда необходимо контролировать разрешения.

При рассмотрении проектов, основанных на глубоком обучении, возникает вопрос работы с данными, а также работы с экспериментами.

Прежде всего, данные необходимо аннотировать для обучения. Отдельные компании разработали инструменты для аннотирования изображений, а затем оптимизировали их, чтобы сделать их эффективными, когда объем данных становится слишком большим, чтобы с ним мог справиться один человек. Создание, совместное использование и управление версиями аннотаций становится еще одной серьезной проблемой.

Как только наборы данных будут доступны, а аннотации к изображениям будут готовы, можно приступить к обучению модели. Это очень важный шаг, но он выходит за рамки этой статьи. После обучения следующим шагом является управление экспериментами, т. е. воспроизводимые прогоны обучения и вывод на заданном входе с использованием определенного набора параметров.

По мере того, как компании вкладывают средства в разработку моделей глубокого обучения, начали появляться новые продукты, решающие упомянутые выше проблемы. Некоторые из первых продуктов — это специализированные сервисы для хранения наборов данных и аннотаций, предназначенные для проектов машинного обучения. Одним из таких сервисов является Zillin. Он фокусируется на приложениях машинного зрения, где команда получает общее дисковое пространство для хранения изображений и онлайн-инструмент для их аннотирования.

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

«Данные сами по себе становятся не менее важными, чем код»

Следующим шагом будет добавление наборов данных. Это как папки с изображениями, с той небольшой разницей, что когда набор данных публикуется и используется в проекте, его содержимое отслеживается и не может быть изменено. Таким образом, проект представляет собой набор инструментов для маркировки объектов и аннотаций, назначенных отдельным изображениям. Аннотаторы и рецензенты работают в рамках проекта, чтобы завершить подготовку данных для обучения. Окончательные результаты можно загрузить в виде файлов JSON.

Аннотации, созданные с помощью Zillin, позже используются для обучения моделей глубокого обучения. Опять же, для этого существует множество фреймворков, но есть одна общая черта: когда эксперименты проводятся ситуативно, их становится трудно отслеживать и контролировать. Более того, может быть сложно отслеживать прогресс и воспроизводить результаты, если в команде работает много людей с разными версиями наборов данных, конфигурациями проектов и разными наборами параметров. Эти проблемы решаются с помощью инструментов управления экспериментами, таких как Neptune.ai или его альтернативы с открытым исходным кодом, Sacred и MLflow.

Обычный подход при работе с экспериментами, включающими большие наборы данных изображений, заключается в создании файлов метаданных, которые легче и проще в управлении. Эти файлы метаданных могут содержать расположение файлов изображений, файлы аннотаций (обычно JSON или XML) и дополнительную информацию, такую ​​как размер, качество и другие определяемые пользователем теги. Как правило, эту информацию можно хранить во фрейме данных (например, в файле CSV) и идентифицировать ее с помощью цифровой подписи md5. При работе с любимым фреймворком глубокого обучения, будь то TensorFlow, PyTorch или любой другой, Neptune отслеживает эти метаданные, параметры и результаты экспериментов, что делает их полностью воспроизводимыми и удобными для просмотра.

Первоначально опубликовано в IMVE в апреле/мае 2020 г.
Вы можете получить доступ к исходной статье здесь.