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

фото Кудава
Несмотря на то, что Кудав выглядит как обычная голубая игрушечная змея, у него есть несколько особенностей. Во-первых, у него на спинке темно-синие пятнышки, во-вторых, однажды после стирки его язык внезапно раздвоился, и теперь он живет с двумя языками. В третьих, когда-то, опять же после стирки, папа повесил его не бельевые веревки сушиться, но наполнитель внутри Кудава сбился, разделив тело змеи на части. Теперь он может неестественно выкручиваться
Процесс обучения модели
Для обучения нейросети нужен датасет с изображениями Кудава. Я провела ему небольшую фотосессию, и затем скадрировала все изображения до формата 1:1 и уменьшила вручную их все до размеров 1024×1024 пикселей. При создании фото я старалась показать Кудава в разных позах, но при этом сохранить акцент на его неповторимой мордочке. В итоге в датасете было собрано 76 фотографий змейки
Примеры фото Кудава в датасете
часть собранного датасета
[ Шаг 1 ]
Далее я перешла в среду программирования Kaggle, и импортировала туда исходный ноутбук с кодом для обучения Stable Diffusion XL по технологии LoRA. Затем подключила ускоритель GPU P100 и подключила ноутбук к сети интернет. Следующим шагом я установила все необходимые библиотеки — bitsandbytes и diffusers, а также специальный скрипт для обучения модели
Подготовка к обучению модели
[ Шаг 2 ]
На этом этапе я, во-первых, загружаю собранный датасет с Кудавом в Kaggle и проверяю, все ли правильно загружено. Во-вторых, я создаю директорию и копирую туда все файлы из датасета, и снова же перепроверяю, что все правильно работает
Создание директории
Работает!!!
[ Шаг 3 ]
Далее я генерирую промпты к картинкам, чтобы нейросеть могла прочитать, что находится на фото. Для этого загружаю модель BLIP и запускаю функцию caption_images, которая описывает каждую фотографию Кудава из датасета и создает к ним описания. Все записывается в переменную imgs_and_paths, где создается этот список изображений с подписями. Далее список собирается в файл, где к каждой подписи теперь добавляется префикс «a photo of KUDAV snake», который отвечает за то, чтобы модель впоследствии при генерации своих картинок ссылалась конкретно на Кудава. В конце удаляю эту модель из памяти, чтобы освободить место
Процесс создания промтов к фотографиям из датасета с помощью модели BLIP
Пример результата 3 шага
[ Шаг 4 ]
На этом этапе для начала нужно сконфигурировать скрипт accelerate, чтобы можно было в итоге сохранить модель на портал Hugging Face. Далее на этом портале я создала токен с правами записи и чтения, который ввела в ячейке кода в ноутбуке, и можно запускать обучение
Подключение к Hugging Face
[ Шаг 5 ]
Перед запуском обучения нужно установить библиотеку datasets, а затем настроить параметры в запуске команды accelerate: название датасета — kudav, директория с моделью — kudav_snake_LoRA, кодовый промт — a photo of KUDAV snake.
В первом варианте обучения я поставила разрешение 1024, как мои фото, с максимальным количеством шагов обучения — 1000 и чекпоинтом на 512 шаге. Всего процесс обучения должен был занимать около 7 часов, однако, к моему сожалению, после 5 часов работы модели случился сбой, и мне пришлось начинать обучение заново.
Второй раз я запустила обучение уже в разрешении 512, общим числом шагов также в 1000 и чекпоитами уже после каждого 125 шага, чтобы можно было посмотреть как обучается модель на разных этапах. Но в моем ноутбуке все постонно ломалось, так что я сделала очень много попыток обучить нейросеть.
В итоге у меня было разрешение 512 с количеством шагов 500 и обучение модели заняло около часа.
Установка библиотеки datasets
Параметры обучения модели
Первая (сорвавшаяся) попытка
Процесс обучения во время второй — n-ной попыток
Итоговые параметры
проверяем директорию с обученной моделью
загружаем модель на Hugging Face
загружаем нашу модель для генерации изображений
Результат














