Созданная проектировщиками и инженерами из Stability AI, CompVis и LAION, "Stable Diffusion" отбирает право на обладание титулом новой современной модели преобразования текста в изображение с открытым исходным кодом у Craiyon, ранее известного как DALL-E-Mini.

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

Давайте углубимся в детали и узнаем, что Stable Diffusion припасла для научного сообщества!

Представление Stable Diffusion

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

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

Процесс диффузии (иллюстрация автора)
Процесс диффузии (иллюстрация автора)

Диффузные модели состоят из двух этапов:

  • Прямая диффузия (Forward Diffusion) — маппирование данных с шумом путем постепенного внесения помех в исходную информацию. Формально это достигается простым стохастическим (случайным) процессом, который начинается с исходного образца и итеративно генерирует зашумленные экземпляры, используя простое гауссово ядро диффузии. Этот процесс используется только во время обучения, и при выводе не применяется.

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

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

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

Например, автокодер, используемый в Stable Diffusion, имеет коэффициент редукции (уменьшения)  8. Это означает, что изображение формы (3, 512, 512) становится (3, 64, 64) в латентном пространстве, что требует в 8 × 8 = 64 раза меньше памяти.

официальные примечания к релизу "Stable Diffusion"

Архитектура Stable Diffusion (изображение из статьи https://arxiv.org/abs/2112.10752)
Архитектура Stable Diffusion (изображение из статьи https://arxiv.org/abs/2112.10752)

Архитектура Stable Diffusion

Архитектура Stable Diffusion состоит из трех основных компонентов, два из которых предназначены для редукции образца в латентное пространство более низкой размерности и последующего денойзинга от случайного гауссовского шума, а один - для обработки текста.

1) Автоэнкодер: На входе модели — случайный шум с желаемым значением размера выходного сигнала. Сначала образец редуцируется в латентное пространство до меньшего размера. Для этого авторы использовали архитектуру VAE, состоящую из двух частей — кодера и декодера. Кодер используется во время обучения для конвертации образца в уменьшенное латентное представление и передает его в качестве входа в следующий блок. При выводе, прошедшие денойзинг сгенерированные образцы подвергаются обратной диффузии и трансформируются обратно в свои начальные размеры латентного пространства.

Архитектура VAE (изображение из статьи https://arxiv.org/abs/2112.10752)
Архитектура VAE (изображение из статьи https://arxiv.org/abs/2112.10752)

2) U-Net: Блок U-Net, состоящий из ResNet, получает зашумленный образец в латентном пространстве, сжимает его, а затем декодирует обратно с меньшим уровнем шума. Примерно вычисленный остаток шума на выходе U-Net используется для построения ожидаемого представления зашумленного образца. 

3) Кодировщик текста: Кодировщик текста отвечает за его обработку, преобразуя запрос (prompt) в место для встраивания. Подобно Imagen от Google, Stable Diffusion использует "замороженный" текстовый кодировщик CLIP ViT-L/14.

Технические подробности

Stable Diffusion v1 была предварительно обучена на изображениях 256x256, а затем отлажена на 512x512, все из подмножества базы данных LAION-5B. Для диффузионной модели использовался автоэнкодер с понижающим коэффициентом 8, UNet 860M и текстовый кодер CLIP ViT-L/14. Stable Diffusion достаточно легковесная и работает на GPU с 10 ГБ VRAM, и даже меньше если использовать точность float16 вместо float32 по умолчанию.

В настоящее время команда опубликовала следующие контрольные точки:

  • sd-v1-1.ckpt: 237 тыс. шагов при разрешении 256x256 на laion2B-en. 194 тыс. шагов при разрешении 512x512 на laion-high-resolution (170 млн. примеров из LAION-5B с разрешением >= 1024x1024).

  • sd-v1-2.ckpt: Продолжен с sd-v1-1.ckpt. 515 тыс. шагов при разрешении 512x512 на laion-aesthetics v2 5+ (сабсет laion2B-en с оценкой эстетики > 5.0, и дополнительно отфильтрованы изображения с оригинальным размером >= 512x512, и предполагаемой оценкой вотермарка < 0.5. Оценка вотермарка получена из метаданных LAION-5B, оценка эстетики - с помощью LAION-Aesthetics Predictor V2).

  • sd-v1-3.ckpt: Продолжено с sd-v1-2.ckpt. 195 тыс. шагов при разрешении 512x512 на "laion-aesthetics v2 5+" и 10% уменьшение обработки текста для улучшения выборки руководства без использования классификатора.

  • sd-v1-4.ckpt: Возобновлено с sd-v1-2.ckpt. 225 тыс. шагов при разрешении 512x512 на "laion-aesthetics v2 5+" и 10% уменьшение обработки текста для улучшения выборки руководства без использования классификатора.

Из официального GitHub-репозитория Stable Diffusion

Производительность модели

Для оценки качества изображений, созданных с помощью генеративных моделей, принято использовать метрику дискретное расстояние Фреше (FID). В двух словах, FID вычисляет величину отклонения между векторами признаков реальных и сгенерированных изображений. На бенчмарке COCO Imagen в настоящее время достиг наилучшего (наименьшего) показателя FID для zero-shot - 7,27, опередив DALL-E 2 с показателем FID 10,39.

 Лучшие результаты для моделей диффузии (изображение из статей с кодом https://paperswithcode.com/sota/text-to-image-generation-on-coco?tag_filter=246)
Лучшие результаты для моделей диффузии (изображение из статей с кодом https://paperswithcode.com/sota/text-to-image-generation-on-coco?tag_filter=246)

Команда Stable Diffusion не опубликовала никаких эталонных результатов для сравнения с другими моделями. Из оригинальной статьи Latent Diffusion (см. ниже), модель Latent Diffusion (LDM) достигла результата 12.63 FID, используя набор данных MS-COCO размером 56 × 256: с 250-ступенчатым DDIM.

Результаты Stable Diffusion (изображение из статьи https://arxiv.org/abs/2112.10752)
Результаты Stable Diffusion (изображение из статьи https://arxiv.org/abs/2112.10752)

Самое лучшее в моделях по преобразованию текста в изображение, это то, что мы можем легко оценить качество их работы. Давайте посмотрим, как Stable Diffusion работает по сравнению с проприетарной моделью SOTA, DALL-E 2.

Stable Diffusion в сравнении с DALL-E 2

Бостон-терьер с хвостом русалки, на дне океана, драматический, цифровой арт.

Изображения, полученные с помощью Stable Diffusion и DALL-E 2 (Изображение автора)
Изображения, полученные с помощью Stable Diffusion и DALL-E 2 (Изображение автора)

Бостон-терьер джедай, держащий темно-зеленый световой меч, фотореалистично

Изображения, полученные с помощью Stable Diffusion и DALL-E 2 (Изображение автора)
Изображения, полученные с помощью Stable Diffusion и DALL-E 2 (Изображение автора)

Я не могу не восхищаться результатами, которые дают эти модели, они просто поражают воображение. Будущее наступило!

Из результатов видно, что DALL-E-2 удается понять и создать изображения, которые больше соответствуют запросу, в то время как Stable Diffusion испытывает трудности. Например, собака стоит на рыбе вместо того, чтобы иметь хвост. Однако качество изображения, цвет, освещение и стиль впечатляют.

Stable Diffusion по сравнению с Craiyon (DALL-E Mini)

Но как хорошие специалисты по анализу данных, мы хотели бы сравнить яблоки с яблоками (т.е. эквивалентные вещи). Давайте сравним Stable Diffusion с опенсорсным проектом Craiyon.

Ботан-терьер в очках за компьютером пишет код в стиле аниме

Изображения, созданные с помощью Stable Diffusion и Craiyon (изображение автора)
Изображения, созданные с помощью Stable Diffusion и Craiyon (изображение автора)

Как мы сразу видим, Stable Diffusion создает гораздо более реалистичные изображения, в то время как Craiyon пытается выправить морду собаки.

Противоречивая сторона Stable Diffusion

За короткое время своего существования Stable Diffusion вызвала много споров. В отличие от DALL-E 2, Stable Diffusion имеет очень мало ограничений на контент, который она может генерировать. После ее выхода пользователи тестировали ограничения, генерируя фото людей по имени, порнографические рисунки и копии, подозрительно напоминающие работы художников, которые не давали согласия на использование своих материалов.

Со слов DALL-E 2 с небольшими изменениями текста ???? (Изображение автора)
Со слов DALL-E 2 с небольшими изменениями текста ???? (Изображение автора)

Все это вызвало бурные обсуждения в Twitter и Reddit, где люди призывали остановить проект из-за вопросов безопасности. На момент написания этой статьи в блоге, Twitter решил заблокировать аккаунт проекта, а модель, размещенная на HugginFace Space, была ограничена в отношении контента, который она может генерировать, под названием "Safety Classifier", который предназначен для удаления NSFW изображений.

Заключение

Stable Diffusion — один из самых интересных проектов OSDS за последнее время. Он обеспечивает самые современные результаты и значительное улучшение по всем параметрам в сравнении с предыдущими моделями OS для преобразования текста в изображение. Не терпится узнать, какие перспективы ожидают эту область, но при этом хочу выразить беспокойство о последствиях.

Ресурсы


Скоро состоится открытое занятие «Сверточные нейронные сети», на котором мы:

- Рассмотрим сверточную нейронную сеть;
- Рассмотрим свертку, деконволюцию, субдискретизацию;
- Dropout и BatchNorm для сверток. ]

Регистрация на мепроприятие по ссылке.

Комментарии (6)


  1. vassabi
    26.09.2022 15:25

    1) этот NSFW фильтр легко убирается из иходников (это же питон!)

    2) есть уже версии для ноутбучных видеокарт, там конечно нужно немного помудохаться чтобы их завести (но если вы подняли ванильную Stable Diffusion , то уж с модифицированной получится справиться) - она спокойно генерит 512х512 картинки используя всего 2-3 Гб видео памяти.

    3) у нее кроме "картинка из текста" есть еще "картинка из скетча" (когда в пейнте тремя цветами человек рисует кружки-овалы "тут дерево, а тут солнце" - а сетка "делает красиво"), и "дорисуй картинку по описанию" (указываем картинке место и даем текст "тут яблоко" и оно пытается дорисовать)


    1. ion2
      26.09.2022 19:14

      Туториал "Как нарисовать сову" стал реальностью?


      1. Filarius
        26.09.2022 20:14
        +2

        Ну почти. Я пробовал.


    1. Filarius
      26.09.2022 20:08

      WebUI https://github.com/AUTOMATIC1111/stable-diffusion-webui

      2) Еще не установка в один клик, но очень близко. Для "маленьких" видеокарт нужно один-два дополнительных аргументов командной строки. Утверждается что запускается на 2 Гб видеопамяти (хотя в идеале все же 7 Гб), просто будет несколько медленнее. Конкретно про проблему запуска на ноутбуке не знаю.

      3) режим "картинка-в-картинку". Исходник любой - хоть детские каракули, хоть фото. Inpainting - замена помеченной области рисунка. Outpainting (по принципу то же самое) - пририсовать снаружи рисунка.

      Также дополнительные плюшки, в том числе улучшение производительности и пользовательские плагины.


      1. mrise
        27.09.2022 11:33

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


  1. Mike_666
    27.09.2022 02:01

    Немного дополню:

    1) Stable Diffusion можно запускать и на cpu (хотя существенно медленнее) https://github.com/bes-dev/stable_diffusion.openvino

    2) Уже есть плагины под GIMP (https://github.com/blueturtleai/gimp-stable-diffusion) и Krita (https://github.com/w4ffl35/krita_stable_diffusion)

    3) Модель можно дообучить новым понятиям (https://cyberes.github.io/stable-diffusion-textual-inversion-models/) или специализировать её под определенную задачу (https://github.com/LambdaLabsML/examples/tree/main/stable-diffusion-finetuning, https://huggingface.co/hakurei/waifu-diffusion) и для этого не нужен огромный кластер как для обучений базовой модели

    4) Unstable Diffusion - (Проект по исследованию и тюнингу Stable Diffusion в области создания nsfw контента)

    В отличие от закрытых DALL-E 2 и Imagen - Stable Diffusion это фазовый переход в генеративном искусстве, после которого наш мир уже не будет прежним!