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

Обучение генеративной нейросети | Новая жизнь друга детства

Идея проекта

Когда мне было 8 лет, мне подарили большую двухметровую голубую змею, мягкую игрушку. Я назвала его Кудав. С тех пор это моя любимая игрушка детства, и я решила, что его нужно увековечить в цифровом пространстве, чтобы он всегда был рядом. Для реализации этой идеи я решила использовать технологию обучения генеративной нейросети Stable Diffusion, чтобы она могла точно создавать различные изображения с Кудавом

Почему Кудав — уникальный и неповторимый объект для обучения нейросети

Исходный размер 3056x3056

фото Кудава

Несмотря на то, что Кудав выглядит как обычная голубая игрушечная змея, у него есть несколько особенностей. Во-первых, у него на спинке темно-синие пятнышки, во-вторых, однажды после стирки его язык внезапно раздвоился, и теперь он живет с двумя языками. В третьих, когда-то, опять же после стирки, папа повесил его не бельевые веревки сушиться, но наполнитель внутри Кудава сбился, разделив тело змеи на части. Теперь он может неестественно выкручиваться

Процесс обучения модели

Для обучения нейросети нужен датасет с изображениями Кудава. Я провела ему небольшую фотосессию, и затем скадрировала все изображения до формата 1:1 и уменьшила вручную их все до размеров 1024×1024 пикселей. При создании фото я старалась показать Кудава в разных позах, но при этом сохранить акцент на его неповторимой мордочке. В итоге в датасете было собрано 76 фотографий змейки

Исходный размер 1920x820

Примеры фото Кудава в датасете

Исходный размер 1920x930

часть собранного датасета

[ Шаг 1 ]

Далее я перешла в среду программирования Kaggle, и импортировала туда исходный ноутбук с кодом для обучения Stable Diffusion XL по технологии LoRA. Затем подключила ускоритель GPU P100 и подключила ноутбук к сети интернет. Следующим шагом я установила все необходимые библиотеки — bitsandbytes и diffusers, а также специальный скрипт для обучения модели

0

Подготовка к обучению модели

[ Шаг 2 ]

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

Исходный размер 1920x942

Создание директории

Исходный размер 1920x942

Работает!!!

[ Шаг 3 ]

Далее я генерирую промпты к картинкам, чтобы нейросеть могла прочитать, что находится на фото. Для этого загружаю модель BLIP и запускаю функцию caption_images, которая описывает каждую фотографию Кудава из датасета и создает к ним описания. Все записывается в переменную imgs_and_paths, где создается этот список изображений с подписями. Далее список собирается в файл, где к каждой подписи теперь добавляется префикс «a photo of KUDAV snake», который отвечает за то, чтобы модель впоследствии при генерации своих картинок ссылалась конкретно на Кудава. В конце удаляю эту модель из памяти, чтобы освободить место

0

Процесс создания промтов к фотографиям из датасета с помощью модели BLIP

Исходный размер 1920x942

Пример результата 3 шага

[ Шаг 4 ]

На этом этапе для начала нужно сконфигурировать скрипт accelerate, чтобы можно было в итоге сохранить модель на портал Hugging Face. Далее на этом портале я создала токен с правами записи и чтения, который ввела в ячейке кода в ноутбуке, и можно запускать обучение

Исходный размер 1920x942

Подключение к Hugging Face

[ Шаг 5 ]

Перед запуском обучения нужно установить библиотеку datasets, а затем настроить параметры в запуске команды accelerate: название датасета — kudav, директория с моделью — kudav_snake_LoRA, кодовый промт — a photo of KUDAV snake.

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

Второй раз я запустила обучение уже в разрешении 512, общим числом шагов также в 1000 и чекпоитами уже после каждого 125 шага, чтобы можно было посмотреть как обучается модель на разных этапах. Но в моем ноутбуке все постонно ломалось, так что я сделала очень много попыток обучить нейросеть.

В итоге у меня было разрешение 512 с количеством шагов 500 и обучение модели заняло около часа.

Исходный размер 1920x471

Установка библиотеки datasets

Исходный размер 1920x942

Параметры обучения модели

0

Первая (сорвавшаяся) попытка

Исходный размер 1920x942

Процесс обучения во время второй — n-ной попыток

Исходный размер 1920x942

Итоговые параметры

Исходный размер 1920x471

проверяем директорию с обученной моделью

0

загружаем модель на Hugging Face

Исходный размер 1920x942

загружаем нашу модель для генерации изображений

Результат

Обученная модель достаточно четко схватывает черты Кудава. Его мордочка, цвета, язык и тело можно явно распознать на изображениях.

В итоговых генерациях заметно, что модели не хватает 500 шагов, чтобы безошибочно улавливать черты Кудава. Однако применение негативного промта и более подробного описания все же позволяют нейросети понять запрос. У Кудава пропадают ненужные головы и листья становятся более похожими на листья

Исходный размер 1920x942

простая генерация

Исходный размер 1920x1071

более подробная генерация с применением негативного промта

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

Как только я прописывала негативный промт, изображения становились гораздо лучше и все ненужные артефакты пропадали, показывая точный портрет Кудава

Следовательно стоить сделать вывод, что получившейся итоговая модель хуже промежуточного неудавшегося варианта, и для обучения следует ставить 1000 шагов

Описание применения генеративной модели

Stable Diffusion XL — обучаемая в проекте модель, используется для генерации итоговых изображений

BLIP — для написания промтов к фотографиям из датасета

Ghat GPT (https://openai.com/chatgpt/overview/) — помощь в решении сложностей и исправлении непонятных ошибок

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

Обучение генеративной нейросети | Новая жизнь друга детства
Проект создан 10.04.2025
Мы используем файлы cookies для улучшения работы сайта и большего удобства его использования. Более подробную информац...
Показать больше