Чистый и простой шаблон для старта вашего следующего dl-проекта 🚀🚀

Шаблон находится здесь

В этой статье мы представляем вам шаблон глубокого обучения на основе Pytorch. Этот шаблон призван упростить вам начало нового проекта глубокого обучения компьютерного зрения с PyTorch. Основные особенности:

  • модульность: мы разделяем каждую логическую часть на отдельный подмодуль python
  • расширение данных: мы включили imgaug
  • Готово к работе: используя poutyne фреймворк, подобный Keras, вам не нужно писать никакой цикл поезда.
  • Torchsummary, чтобы показать резюме ваших моделей
  • снизить скорость обучения на плато
  • автосохранение лучшей модели
  • слежение за экспериментом с кометой

Мотивация

Посмотрим правде в глаза, как правило, специалисты по данным не являются разработчиками программного обеспечения, и они обычно заканчивают спагетти-кодом, большую часть времени на большом непригодном для использования ноутбуке Jupiter. В этом репо вы предложили чистый пример того, как ваш код должен быть разделен и разбит на модули, чтобы сделать возможными масштабируемость и совместимость. В этом примере мы попытаемся классифицировать Дарта Вейдера и Люка Скайуокера. У нас есть 100 изображений на класс, собранных с помощью изображений Google. Набор данных находится здесь. Вам просто нужно найти его в этой папке и запустить main.py. Мы настраиваем resnet18, и он должен достичь ›90% точности за 5/10 эпох.

Шаблон находится внутри ./template.

Мы настоятельно рекомендуем поэкспериментировать с шаблоном

Сохраняйте структуру чистой и лаконичной

В каждом проекте глубокого обучения есть как минимум три основных этапа:

  • сбор / обработка данных
  • моделирование
  • обучение / оценка

Хорошая идея - хранить все пути в интересном месте, например. папка набора данных в общем классе, к которой может получить доступ любой пользователь в папке. Никогда не следует жестко кодировать какие-либо пути, всегда определять их один раз и импортировать. Итак, если вы позже измените свою структуру, вам нужно будет изменить только один файл. Если мы посмотрим на Project.py, мы увидим, как мы определили data_dir и checkpoint_dir раз и навсегда. Мы используем новые API Пути, которые поддерживают различные ОС из коробки, а также упрощают объединение и объединение путей.

Например, если мы хотим узнать местоположение данных, мы можем:

from Project import project
print(projct.data_dir) # /foo/baa/…/dataset

В пакете data вы можете определить свой собственный набор данных, как всегда, создав подклассы torch.data.utils.Dataset, предоставив преобразования и утилиты для работы с вашими данными. В нашем примере мы напрямую использовали ImageDataset из torchvision, но мы включили скелет для пользовательского Dataset в /data/MyDataset

Трансформация

Обычно вам нужно выполнить некоторую предварительную обработку данных, например измените размер изображений и примените увеличение данных. Вся ваша трансформация должна происходить внутри .data.trasformation. В наш шаблон мы включили обертку для imgaug

Dataloaders

Как вы знаете, вам нужно создать Dataloader, чтобы ввести данные в модель. В data.__init__.py файле мы предоставляем очень простую функцию get_dataloaders для автоматической настройки загрузчиков данных train, val и test с использованием нескольких параметров.

Все ваши модели находятся внутри models, в нашем случае у нас есть очень простой cnn, и мы переопределяем функцию resnet18, чтобы предоставить замороженную модель для точной настройки.

В нашем случае мы сохранили простоту, вся логика обучения и оценки находится внутри .main.py, где мы использовали poutyne в качестве основной библиотеки. Мы уже определили полезный список обратных вызовов:

  • планировщик скорости обучения
  • автосохранение лучшей модели
  • ранняя остановка Обычно это все, что вам нужно!

Отслеживайте свой эксперимент

Мы используем комету для автоматического отслеживания результатов наших моделей. Так выглядит доска кометы после прогона нескольких моделей.

Запуск main.py дает следующий результат:

Мы также создали различные служебные функции для построения набора данных кабины и загрузчика данных. Они в utils.py. Например, вызов show_dl в нашем наборе данных train и val дает следующие выходные данные.

Как видите, расширение данных правильно применено к набору поездов.

Код здесь

Выводы

Надеюсь, вы нашли полезную информацию, и надеюсь, что этот шаблон поможет вам в вашем следующем замечательном проекте :)

Дайте мне знать, если у вас есть идеи / предложения по его улучшению.

Вы также можете найти эту статью интересной:



Https://towardsdatascience.com/pytorch-how-and-when-to-use-module-sequential-modulelist-and-moduledict-7a54597b5f17

Спасибо за чтение.