Диффузионные модели: как ИИ генерирует картинки

Всем привет! Совсем недавно опубликовал первый пост про Компьютерную архитектуру (решил удалить его) в конце написал про то, что позже распишу про Диффузионные модели. Так как делать особо нечего, то решил сделать это сейчас. Тут уже не будет всяких непонятных технических терминов.

https://developer.nvidia.com/blog/improving-diffusion-models-as-an-alternative-to-gans-part-1/
https://developer.nvidia.com/blog/improving-diffusion-models-as-an-alternative-to-gans-part-1/

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

Идея диффузионных моделей

https://www.geeksforgeeks.org/artificial-intelligence/what-are-diffusion-models/
https://www.geeksforgeeks.org/artificial-intelligence/what-are-diffusion-models/

Если коротко, то у нас есть оригинальная картинка, например, рыжий котик. Эту оригинальную картинку мы постепенно уничтожаем, добавляем шум. Дальше уже интересней, теперь вместо картинки у нас месиво из шума и наша задача обучить модель, которая из этого шума сделает адекватную картинку котика.

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

Да, кстати, в ГПТ используется диффузионные модели, если вдруг не поняли.

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

https://ghost.oxen.ai/how-to-set-noise-timesteps-when-fine-tuning-diffusion-models-for-image-generation/
https://ghost.oxen.ai/how-to-set-noise-timesteps-when-fine-tuning-diffusion-models-for-image-generation/

Может возникнуть вопрос (представим, что модель и датасет у нас хорошие), а почему в результате появился именно кот, а не что-то еще?

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

Надеюсь принцип работы объяснил (код и математический принцип понятное дело тут я расписывать не буду - слишком сложный материал)

Мои работы

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

Промты: Milky Way, Black hole, Space station, Nebula in space
Промты: Milky Way, Black hole, Space station, Nebula in space

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

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

Выглядит уже убедительней, не правда ли?
Выглядит уже убедительней, не правда ли?
Еще пример
Еще пример

Все бы ничего, но модель после переобучилась (по простому, фигню начала выдавать)

Как вам?
Как вам?

Промт такой: Происходит ночной запуск корабля с Земли навстречу звездам. Больше похоже на краба мутанта из черепашек ниндзя, но не суть.

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

5
1
1
10 комментариев