Original size 1140x1600

Привет, потомки // Обучение генеративной нейросети

PROTECT STATUS: not protected
27

Идея проекта

post

Когда-то, когда я была совсем маленькой и даже не знала, что такое НИУ ВШЭ, я училась в художественной школе. Темный, теплый и маленький кабинет истории искусств, зимняя стужа за окном, а в свете проектора — наскальная живопись (все подобные произведения являются общественным достоянием, что позволяет использовать их для обучения нейросети без волнений об авторских правах), восхищаться мощью, витальностью и одновременной наивностью которой я не перестаю по сей день. И вот я учусь во ВШЭ, думаю об этих древних артефактах и спасаюсь от тревоги из-за предстоящей сессии, смотря на то, как эти сильные и вольные животные бегут по стенам пещер.

Как хорошо было бы сейчас быть одной из этих существ! А как хорошо было тем свободным художникам без дедлайнов и спешки!

В своем проекте я размышляю над тем, что было бы, если бы все эти безымянные авторы жили с нами в одно время? Как бы они изображали современных животных?

big
Original size 3479x625

Dataset // примеры наскальной живописи (от пещеры Ласко до быков из Альтамиры)

Описание процесса обучения

С технической точки зрения процесс обучения нейросети воспроизведению необходимого визуального паттерна (стиля) можно разделить на несколько этапов:

(1) Создание и подготовка датасета изображений; (2) Генерация текстового датасета (подписей) на основе визуальной базы данных; (3) Непосредственное обучение с учетом заблаговременно установленных библиотек; (4) Воспроизведение нейросетью полученных инструкций, результат обучения.

Каждый из этапов обладает своими преодолимыми (в разной степени) сложностями. Также каждый этап предполагает свой инструмент для работы, в проекте использовались такие ПО, как:

1. Stable Diffusion (обучение генеративной нейросети); 2. Google Colab (среда выполнения); 3. Hugging Face (получение токена для обучения нейросети, дальнейшая загрузка полученной модели на сайт); 4. Chat GPT (создание сложных элементов кода, проверка и консультирование); 5. Adobe Illustrator (постобработка результатов (коллажирование), графическая обработка скриншотов кода).

(1) Создание и подготовка датасета изображений

Создание датасета с изображениями наскальной живописи происходило «вручную» — к моему удивлению в Kaggle не было найдено подходящих мне датасетов. Стоит отметить, что формат всех фотографий был изменен до квадрата также не при помощи кода (хотя изменение разрешения до 512×512 было произведено именно при помощи кода), так как я не была до конца уверена в том, что генеративная нейросеть «вырежет» верные части изображений.

Также необходимо отметить, что большинство моих проблем было связано с установкой diffusers — именно поэтому я дополнила код необходимой для меня строчки проверки факта верной установки всех необходимых компонентов.

0

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

Original size 1920x1080

Подготовка датасета, генерация метаданных для LoRA.

Original size 1920x1080

Проверка датасета, вывод изображений (иллюстрирование).

(2) Генерация текстового датасета

На данном этапе я подключаю модель BLIP, которая автоматически создает текстовые описания к каждому изображению, к которым после добавляется общий стиль. Все результаты сохраняются в файл metadata.jsonl — так каждая картинка получает свой индивидуальный промпт для обучения.

Original size 1920x1080

Генерация подписей, загрузка BLIP-модели, собрание промптов описания в JSONL-файл (metadata.jsonl).

(3) Обучение генеративной нейросети (код) (4) Результирующая серия изображений

Original size 1920x1080

После генерации подписей было необходимо выгружаешь BLIP из GPU-памяти для того, чтобы освободить VRAM для последующего обучения LoRA.

Команда «accelerate config default» создаёт стандартную конфигурацию библиотеки Accelerate, которая управляет самим процессом обучения. «Hugging Face» — авторизация в дополнительной среде для последующего свободного доступа третьих лиц к моей модели, моей загрузки и публикации модели в собственном репозитории.

Original size 1920x1080

Первый блок непосредственного обучения генеративной нейросети.

После завершения обучения я проверила, что все LoRA-веса успешно сохранились, и создала репозиторий на Hugging Face с тем же именем, что и мой каталог, куда автоматически добавился model card с описанием обучения. После я загрузила все файлы модели (кроме временных чекпоинтов) и получила ссылку на готовый репозиторий.

Далее я подключила VAE для корректного декодирования изображений и загрузила обученную LoRA в пайплайн Stable Diffusion XL, подготовив его к тестовой генерации.

0

Второй и третий блоки непосредственного обучения генеративной нейросети.

Заявленной целью проекта является «визуализация современных животных руками безымянных авторов наскальной живописи». В качестве видов, не знакомых древнейшим людям, но простых для узнавания современным человеком были выбраны 10 животных: кошка, собака, лошадь, корова, слон, пингвин, панда, дельфин, павлин, коала.

Выбор является случайным, но явно идет «на усложнение» обучения модели: более узнаваемые (и намеренно не представленные в датасете!) кошка и собака, корова и лошадь (очень схожие с быками и дикими древними лошадями) сменяются на экзотических представителей (павлин, дельфин).

(4.1) Генерации про запросам о кошках

Original size 1024x1024

Первая генерация кошки.

Промпты для генераций котов (реальные промпты, представленные в блокноте с кодом, упрощены для большей наглядности запроса. Я старалась давать генеративной нейросети как можно более подробный запрос, так как знала, что мой датасет недостаточно велик):

(1) «prehistoric cave painting of a cat on a rough stone wall, drawn with ochre and charcoal pigments, primitive shapes, ancient lighting, CAVEPAINT style»

(2) «prehistoric cave painting of a black cat beside a human, painted with ochre and black pigments on stone wall, simple silhouettes, torchlight glow, CAVEPAINT style»

(3) «prehistoric cave painting of a black cat and human standing side by side, drawn in simple silhouettes with ochre, red and black pigments on textured stone wall, CAVEPAINT style»

(4) «prehistoric cave painting of a human and black cat facing each other on gray stone wall, thick black outlines, red and white pigment fills, flat symbolic style, CAVEPAINT aesthetic»

0

Вторая, третья и четвертая генерации.

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

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

(1) «prehistoric cave painting of a Sphynx cat face on gray stone wall, thick black outlines, white pigment fill, minimal detail, handprints and smudges, CAVEPAINT style»

(2) «prehistoric cave painting of a Sphynx cat face on gray stone wall, the face is light-colored with subtle shading for wrinkles, minimal detail, thick black outlines, white pigment fill, handprints and smudges, CAVEPAINT style»

Первая и вторая генерация конкретной современной породы (сфинкса), следствие усложнения промпта.

(4.2) Генерации про запросам о собаках

Original size 1024x1024

Первая генерация по запросу «собака».

Собака — первый друг человека, поэтому последующие генерации посвящены именно её изображениям. Проблемы с изображением одного животного продолжают наблюдаться, но появляются первые люди!

(1) «prehistoric cave painting of a human hunter and dog on gray stone wall, thick black outlines, red pigment fill, side by side, torchlight shadows, CAVEPAINT style»

(2) «prehistoric cave painting of a human hunter and dog on gray stone wall, simple stick-figures with thick black outlines and red pigment, minimal detail, CAVEPAINT style»

(3) «prehistoric cave painting of a human hunter and Dalmatian dog on gray stone wall, thick black outlines, red pigment fill, dog has white body with black spots, minimal detail, CAVEPAINT style»

Интересно, что в последнем промпте я хотела указать на необходимость изобразить конкретную породу, но это оказалось слишком сложным.

Генерации собак и сцен охоты.

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

(1) «prehistoric cave painting of a human hunter and Dalmatian dog on gray stone wall, simple stick-figures with thick black outlines, red pigment fill, dog has white body with black spots, minimal detail, CAVEPAINT style»

(2) «prehistoric cave painting of a Dalmatian dog face on gray stone wall, black and white spots, simple stick-figure, thick black outlines, white pigment fill, minimal detail, CAVEPAINT style»

Первая и вторая генерации конкретной породы (далматин), следствие уточнения запроса.

(4.3) Генерация про запросу о лошадях

Генерация изображений последующих трёх животных (лошади, коровы и слона) была наиболее удачной, не требовала множества попыток для получения удовлетворительного результата. Предполагаю, что это связано с фактом наличия схожих животных (диких лошадей, мамонтов) в исходном датасете.

Запрос для генерации лошади: «prehistoric cave painting of a horse with rider on gray stone wall, simple stick-figures with thick black outlines, ochre, red and white pigment fill, handprints and smudges, minimal detail, CAVEPAINT style»

Я не переставала надеяться на то, что генеративная нейросеть научится совмещать людей и животных, создаст кадры их взаимодействия. На данном этапе дела обстоят лучше — не звери принимают черты людей, а наоборот (лошадиные головы всадников).

Original size 1024x1024

Генерация по запросу «лошадь».

(4.4) Генерации про запросам о коровах

(1) «prehistoric cave painting of a cow and two children drinking milk on gray stone wall, simple stick-figures with thick black outlines, red and white pigment fill, side by side, minimal detail, handprints and smudges, CAVEPAINT style»

(2) «prehistoric cave painting of a modern black-and-white spotted cow on gray stone wall, simple stick-figure, thick black outlines, white pigment fill with black spots, minimal detail, handprints and smudges, CAVEPAINT style»

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

Генерации коров в стиле наскальной живописи.

(4.5) Генерации про запросам о слонах

(1) «prehistoric cave painting of an elephant on gray stone wall, simple stick-figure with thick black outlines, gray pigment fill, minimal detail, handprints and smudges, central composition, CAVEPAINT style»

(2) «prehistoric cave painting of two human hunters and one elephant on gray stone wall, simple stick-figures with thick black outlines, elephant gray, humans red, side by side, minimal detail, handprints and smudges, CAVEPAINT style»

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

«Наскальные» слоны.

(4.6) Генерации про запросам о пингвинах

Финальный этап генерации предполагал создание изображений «диковинных», не знакомых пещерному человеку (с европейской точки зрения).

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

(1) «prehistoric cave painting of one or more penguins on gray stone wall, simple stick-figures with thick black outlines, black bodies and white bellies, minimal detail, handprints and smudges, central composition, CAVEPAINT style»

(2) «prehistoric cave painting of a single penguin on gray stone wall, simple stick-figure with thick black outlines, black body and clearly defined white belly, minimal detail, handprints and smudges, central composition, CAVEPAINT style»

Отмечу, что я часто пыталась генерировать дополнительные отпечатки рук поверх животных, что не всегда удавалось (скорее всего из-за сложности и «многоуровневости» запроса).

Итоги генераций пингвинов.

(4.7) Генерации про запросам о пандах

0

Изменение генераций изображений панд в следствие усложнения и уточнения промпта.

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

(1) «prehistoric cave painting of a single panda on gray stone wall, simple stick-figure inspired by Altamira bulls, thick black outlines, black body with white belly and face patches, minimal detail, handprints and smudges, central composition, CAVEPAINT style»

(2) «prehistoric cave painting of a giant panda on gray stone wall, simple stick-figure inspired by Altamira bulls, thick black outlines, black body with white belly and face patches, minimal detail, handprints and smudges, central composition, CAVEPAINT style»

(3) «prehistoric cave painting of a single giant panda only on gray stone wall, simple stick-figure inspired by Altamira bulls, thick black outlines, black body with white belly and face patches, minimal detail, handprints and smudges, central composition, CAVEPAINT style»

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

(4) «prehistoric cave painting of a single giant panda on gray stone wall, stick-figure style inspired by Altamira bulls, thick black outlines, black body with white belly and face patches, central composition, handprints and smudges, CAVEPAINT style»

Original size 1024x1024

Финальная генерация наскального изображения панды.

(4.8) Генерации про запросам о дельфинах

Генерации дельфинов. На втором изображении была попытка также указать в промпте море, но отчасти оно слилось с другими дельфинами.

(1) «prehistoric cave painting of a group of dolphins on gray stone wall, stick-figures with thick black outlines, blue-gray bodies with lighter bellies, dynamic composition, handprints and smudges, CAVEPAINT style»

(2) «prehistoric cave painting of a single dolphin jumping on gray stone wall, stick-figure with thick black outlines, blue-gray body with lighter belly, central composition, handprints and smudges, playful mood, CAVEPAINT style»

(3) «prehistoric cave painting of a human figure in red and a dolphin in blue-gray on gray stone wall, simple stick-figures with thick black outlines, central composition, schematic style, handprints and smudges, CAVEPAINT style»

Появились сюжеты и пловцы (люди)! Но теперь и их, и дельфинов много. Генерация окружения (моря) крайне спорна, впрочем, это делает её несколько ближе к наскальной, а не к современной живописи.

Original size 1024x1024

Генерация пловцов и дельфинов.

(4.9) Генерации про запросам о павлинах

Самым сложным, пожалуй, заданием для генеративной нейросети было изображение павлина — конкретной птицы, не имеющей быстро считываемого силуэта (если не изображать хвост). Проблемы с генерацией одного/множества вернулись, зато были учтены отпечатки ладоней и быстро созданы узнаваемые силуэты.

(1) «prehistoric cave painting of a single peacock on gray stone wall, stick-figure with thick black outlines, brown body with warm ochre, red and white tail feathers, central composition, handprints and smudges, CAVEPAINT style»

(2) «prehistoric cave painting of a group of peacocks on gray stone wall, stick-figures with thick black outlines, brown bodies with warm ochre, red and white tail feathers, dynamic composition, handprints and smudges, CAVEPAINT style»

(4.10) Генерации про запросам о коалах

(1) «prehistoric cave painting of a human holding a koala on gray stone wall, stick-figures with thick black outlines, human red, koala brown with lighter belly, central composition, handprints and smudges, CAVEPAINT style»

(2) «prehistoric cave painting of three koalas on tree branches on gray stone wall, stick-figures with thick black outlines, brown bodies with lighter bellies, dynamic composition, handprints and smudges, CAVEPAINT style»

Самым странным животным стала коала, но генеративная нейросеть сразу угадала её узнаваемые черты, что было для меня удивительным. Из-за общей условности стиля стоит принять, что четкое выполнение запроса не может существовать. Но это радует меня, потому что витальная, фигуративная и очень условная манера была воспроизведена — как современным людям приходится угадывать сюжеты пещерной живописи, так и мне необходимо подмечать детали в моих генерациях (например, слияние людей и коал на первой генерации).

Генерация по запросу «коалы», попытка создания окружающей среды изображенных животных.

Привет, потомки // Обучение генеративной нейросети
27
We use cookies to improve the operation of the website and to enhance its usability. More detailed information on the use of cookies can be fo...
Show more