Исходный размер 1140x1600

Обучение генеративной модели Stable Diffusion на фотографиях неба

Рубрикатор

  1. Концепция
  2. Порядок выполнения работы
  3. Результат
  4. Выводы

Концепция

Я не хотела брать для создания нейросети чей-то стиль работ, поскольку это идет вразрез с моими моральными устоями. Поэтому предпочла делать «второй вариант» генерации, то есть тренировать нейросеть на фотографиях, как было сделано с собакой в примере из лекции. Вернее, там было упомянуто, что так тоже можно.

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

Поэтому я условно разделила исследование на два критерия:

  1. Цветовая гамма генерируемых изображений
  2. Генерация объектов, косвенно присутствующих на фотографиях

Базу данных — то бишь фотографии — я взяла из открытого источника (с сайта images.cv), отбраковав неподходящие: с надписями, вытянутые, с наложенными фильтрами. Для своих задач я выбрала фото заката — в оранжевой гамме; и фото гроз — в фиолетовой.

Пример картинок из использованного датасета. Гроза в фиолетовых тонах

Пример картинок из использованного датасета. Закат в оранжевых тонах

Пример картинок из использованного датасета. Несколько картинок с экспериментальными цветами. Таких было использовано мало

Порядок выполнения работы

Началось все со среды программирования. Изначально я хотела работать в Kaggle, как и советовали в лекции, чтобы не упираться в лимит работы с gpu в Google Colab. Регистрация прошла успешно, а вот библиотеки у меня на Kaggle не встали — буквально второй или третий шаг кода не работал ни в какую, с каким бы бубном я ни танцевала. Поэтому пришлось все-таки работать в Google Colab, в котором такой проблемы не возникло…

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

Исходный размер 1868x440

Создание папки/директории mypictures

После установки всех библиотек я приступила к пункту загрузки датасета. Вручную запихивать картинки не хотелось, поэтому я создала папку mypictures и запустила код, в котором указала, какие локальные файлы с компьютера нужно загрузить.

По итогу сбора и отбраковки неподходящих фотографий получилось 140 файлов. Я решила оставить такое количество, не добирая до 200, поскольку код и так грузился почему-то очень долго… Возможно, это проблема работы с Google Colab — в лекции упоминалось, что у него мощность предоставляемая чуть меньше, чем в Kaggle.

Исходный размер 1854x473

Предпросмотр картинок из загруженной в папку датабазы

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

Исходный размер 1864x422

Создание общей части промпта для генерации

Далее нужно было задать промпт, который будет использоваться для запуска генерации. Опять же, посмотрев на пример с собакой, я заменила предыдущий TOK на слово SKY, поскольку в моей генерации будет использовано небо.

Исходный размер 1848x656

Основная подготовка перед запуском

Далее же я создала аккаунт на Hugging Face, создала на нем write access token, скопировала его в код и приступила к пункту с обучением нейросети.

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

Исходный размер 1862x566

Изменение названия конечной папки

Дальше же оставалось только сохранить модель в уже созданную и названную ранее папку, и запустить саму генерацию.

Исходный размер 779x166

Ссылка на получившуюся нейросеть на сайте Hugging Face

Исходный размер 1867x604

Проверка генерации в Google Colab

Результат

Начать я решила с генерации пейзажей. Поэтому в промптах помимо общего начала «a photo of the SKY» присутствовали такие слова, как: river, forest, lake, landscape и далее.

0

Река, сгенерированная в Google Colab и на сайте Hugging Face

Мне очень понравилась первая сгенерированная на сайте Hugging Face река — в основном из-за использованных нейросетью цветов. Поэтому я попробовала сгенерировать на сайте еще несколько вариаций, и… Все они почему-то оказались зелеными. Причем ярко-зелеными, хотя ни в промпте, ни в базе скормленных фотографий таких цветов не присутствовало.

Еще несколько вариантов рек, сгенерированных на сайте Hugging Face

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

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

Обучение генеративной модели Stable Diffusion на фотографиях неба
Проект создан 10.04.2025