
Идея проекта
Обучение нейросети определенному стилю — задача, требующая узнаваемого авторского подчерка, полного характерных особенностей, канонов, соблюдение которых (пусть и не в полной мере, что является основной проблемой при обучении генеративной нейросети) позволяет говорить об удачном итоге обучения. Важным условием для выполнения задания было внимательное отношение к авторскому праву — использование собственных работ, уважительное к нему отношение (задокументированное согласие автора) или использование произведений, ставших общественным достоянием.
Мой выбор пал на работы И. Я. Билибина — яркие, узнаваемые (и к тому же являющиеся общественным достоянием), знакомые большинству россиян «с школьной скамьи» и обладающие уникальным, легко воспроизводимым стилем, они стали отличной основой датасета.
Идейно же мне было интересно «поместить художника в современную среду», попросить автора 20-го века, знаменитого благодаря изображению былинной, древнерусской и сказочной действительности, переложить действительность века 21-го на холст с сохранением всех особенностей стиля. В процессе работы я поняла, что хочу не просто повторять сюжеты «городских/уличных сказок» и генерировать стилизованные изображения знакомых всем героев (большого) города, но сделать их «новыми сказками», поместить «прошлое в настоящее».
Так родились несколько архетипов, внешний вид которых изменялся вместе с промптами: скейтер-трикстер, курьер-купец, летописец-граффитист, страж-полицейский уличный (музыкант-) гусляр и знакомый каждому студенту изготовитель «сказочного эликсира» — бариста.
Описание процесса обучения

Процесс обучения нейросети воспроизведению заданного визуального стиля включает несколько этапов: подготовка и систематизация датасета изображений, создание текстовых описаний на его основе, обучение модели с использованием библиотек и генерация визуальных результатов. Каждый этап имеет свои технические сложности, решаемые с помощью специализированных инструментов.
В проекте применялись: Stable Diffusion (обучение генеративной модели), Google Colab (среда выполнения), Hugging Face (токен и размещение модели), ChatGPT (создание и проверка кода), Adobe Illustrator (постобработка элементов кода).
Создание датасета с (фрагментами) иллюстраций И. Я. Билибина происходило «вручную». Таким же методом был изменен и формат всех изображений — изначальный датасет, составленный не из фрагментов, а из целых иллюстраций, не был достаточно подробным и точным для обучения нейросети, примеры чего я предоставила ниже.
Впрочем, строка, изменяющая размер кадров, осталась — для большей точности и единообразия получаемого датасета.
Изначальный неотредактированный датасет, фрагменты.
Отредактированный датасет, фрагменты.
Следующим действием является подключение модели BLIP, создает текстовые описания к каждому изображению автоматически. После к каждому из них добавляется общий стиль. Все результаты сохраняются в файл metadata.jsonl — так каждая картинка получает свой индивидуальный промпт-описание для дальнейшего обучения.
Непосредственная генерация изображений (код и результатирующая серия изображений)
После генерации подписей BLIP выгружался из GPU-памяти для освобождения VRAM под последующее обучение LoRA. Команда accelerate config default создавала стандартную конфигурацию библиотеки Accelerate, управляющей процессом обучения. Hugging Face использовался для авторизации и обеспечения свободного доступа третьих лиц к модели, а также для её загрузки и публикации в собственном репозитории.
По завершении обучения я проверила сохранность всех LoRA-весов и создала репозиторий на Hugging Face с тем же именем, что и каталог проекта; автоматически добавилась model card с описанием обучения. Все файлы модели (кроме временных чекпоинтов) были загружены, после чего я подключила VAE для корректного декодирования изображений и интегрировала обученную LoRA в пайплайн Stable Diffusion XL, подготовив модель к тестовой генерации.
(1) Скейтер-трикстер


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


Более удачные генерации на основе отредактированного датасета. Но промпт был слишком подробным, видно большое количество артефактов и неточностей.
Промпты для генераций скейтбордистов (реальные промпты, представленные в блокноте с кодом, упрощены для большей наглядности запроса):
(1) «MODERN BILIBIN style painting, urban skater,»
(2) «painting in MODERN BILIBIN style, urban skater as a modern folk hero,»
(3) «MODERN BILIBIN style illustration, full-body young male skater, standing sideways on skateboard, feet on board, wearing ancient Russian clothing: long tunic, belt, trousers, boots,»
Стоит отметить, что именно в этот момент я поняла, что при дальнейших генерациях необходимо описывать именно древнерусского героя в современных условиях, «нащупала» идею проекта.
Финальная генерация скейтера, финальный стиль проекта найден.
(2) Курьер-купец
Промпты для генераций курьера. Я не считаю эти генерации удачными, скорее всего, это связано с тем, что курьер с характерным рюкзаком (который каждый раз был прописан в промпте) — особенность российской действительности, «не знакомая нейросети».
(1) «MODERN BILIBIN style illustration, night urban courier on bicycle,»
(2) «MODERN BILIBIN style illustration, urban courier riding a horse,»


(3) Летописец-граффитист


Генерации граффитиста на основе промпта «современный человек в былинных условиях». Много неточностей и ошибок.
Промпты для генераций граффитиста:
(1) «MODERN BILIBIN style illustration, urban graffiti artist,»
(2) «MODERN BILIBIN style illustration, urban graffiti artist in action, spraying paint on wall,»
(3) «MODERN BILIBIN style illustration, full-body young male graffiti artist, standing side view, right arm extended, holding cylindrical spray paint can with nozzle, wearing ancient Russian clothing: long linen tunic, belt, trousers, boots,»
Финальная генерация граффитиста. «Человек в былинном костюме в новых условиях».
(4) Страж-полицейский
Промпты для генераций полицейского.
Пожалуй, это стало самым сложным испытанием для генеративной нейросети — найти что-то среднее между богатырем и полицейским было трудно и для меня. Решение поместить нового человека в старые условия не увенчалось успехом полностью, но меня радует то, как верно даже для задачи, не стыкующейся с основной направленностью работ Билибина, было найдено верное композиционное и цветовое решение.
(1) «MODERN BILIBIN style illustration, full-body police officer,»
(2) «MODERN BILIBIN style illustration, full-body modern police officer, wearing dark navy tactical uniform, reflective stripes on jacket and pants,»


(5) Уличный гусляр-музыкант


Более ранние генерации, аналогичны с граффитистом по логике развития.
Промпты для генераций уличного музыканта:
(1 и 2) «MODERN BILIBIN style, full-body street musician, sitting on crate,»
(3) «MODERN BILIBIN style illustration, full-body musician, seated frontal pose,»
Финальная генерация. К моему сожалению, объяснить нейросети, что такое гусли, я так и не смогла.
(6) Сказочный эликсир: бариста


Промпты для генераций бариста.
Я считаю, что этот персонаж стал наиболее узнаваемым и при этом «историческим, былинным». Отчасти потому, что я поняла технику написания промптов — отчасти потому, что генеративная нейросеть обучилась.
Сравнивая первые и последние генерации, невозможно не отметить большую точность, более точное совпадение с ожиданиями от промпта и «вхарактерность», чем в первых опытах.
(1) «MODERN BILIBIN style illustration, full-body young male barista,»
(2) «MODERN BILIBIN style illustration, full-body young male barista, standing behind coffee cart, holding cup in hand,»
(3) «MODERN BILIBIN style illustration, full-body young male barista, standing behind modern espresso machine and coffee grinder, holding cup,»
(7) Таксист-перевозчик
Впрочем, последний опыт — не всегда самый удачный. Так, решив, что нейросеть достаточно обучена, я предложила ей смоделировать то, примеры чего отсутствуют в моем датасете — крупную современную технику. К сожалению, машина 21-го века не удалась ей, но более ранние примеры автопрома — более чем, что добавило генерациям больший шарм, хотя и сделало их менее точными.
Промпты для таксиста:
(1) «MODERN BILIBIN style illustration, full-body young male taxi driver, sitting inside modern taxi, hands on steering wheel,»
(2) «MODERN BILIBIN style illustration, full-body young male taxi driver,»

