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

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

Прошло время, и сегодня ИИ может помочь мне материализовать идеи, которые у меня в голове. Это не то же самое, и процесс даже отдаленно не приносит такого удовлетворения. Но это способ выразить свои мысли на бумаге.

Я был взволнован, когда OpenAI предоставил мне доступ к частной бета-программе DALL·E 2. Однако недостатком были ограничения того, что я мог с ним делать, сколько раз я мог его использовать, цена и идея, что я никаким образом не контролирую программное обеспечение.

Затем на вечеринку пришла Стабильная диффузия. Подобно DALL·E 2, Stable Diffusion — это система искусственного интеллекта с открытым исходным кодом, которая создает реалистичные изображения и рисунки на основе описания на естественном языке. Он объединяет концепции, атрибуты и стили для создания уникальных фотографий или вариаций существующих изображений. И хорошая новость заключается в том, что вы можете запустить его на своем ноутбуке уже сегодня.

Эта история показывает, как вы можете создавать потрясающие произведения искусства в своей системе менее чем за 10 минут, даже если у вас нет устройства с графическим процессором. Я проведу вас через процесс установки; все, что вам нужно, это иметь доступ к машине, на которой работает Python и установлен Git. В конце концов, вы сможете сообщить модели, что вы хотите нарисовать, на естественном языке, сидеть сложа руки и пожинать плоды.

Learning Rate — информационный бюллетень для тех, кому интересен мир ИИ и MLOps. В первую субботу каждого месяца вы будете получать от меня новости и мысли о последних новостях и статьях об искусственном интеллекте. Подписывайтесь здесь!

Что такое стабильная диффузия

Как мы уже говорили, стабильная диффузия — это модель скрытой диффузии (LDM), которая создает реалистичные изображения и рисунки на основе описания на естественном языке. Он был разработан Stability AI и LMU Munich при поддержке сообществ Eleuther AI и LAION.

Stable Diffusion черпает вдохновение в таких проектах, как DALL·E 2 от Open AI или Imagen от Google Brain, и был обучен LAION-Aesthetics, подмножеству LAION 5B, которое скоро будет выпущено. ».

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

Настройка вашей среды

Теперь, когда у нас есть некоторая предыстория проекта, давайте приступим к работе. Первым шагом этого процесса является настройка среды Python, в которой вы будете работать.

Stable Diffusion поставляется с инструкциями по созданию окружения Miniconda. Если вы знакомы с созданием сред conda с помощью файла environment.yaml, вы вполне можете его использовать. Однако я предпочитаю использовать простые виртуальные среды Python, созданные с помощью venv, и устанавливать пакеты с помощью pip.

Моя машина представляет собой систему Ubuntu 22.04 с Python 3.8.10. Для этого вам понадобится как минимум Python 3.8.5. Итак, обо всем по порядку, клонируем репозиторий:

git clone https://github.com/dpoulopoulos/stable-diffusion.git -b feature-dimpo-local-deployment

Обратите внимание, что это не оригинальный репозиторий Stable Diffusion. Это форк, который я создал, чтобы немного изменить код. Эти модификации позволяют запускать проект, даже если у вас нет доступа к графическому процессору. Исходный код проекта находится по адресу https://github.com/CompVis/stable-diffusion.

Перейдите в каталог проекта и создайте виртуальную среду Python:

cd stable-diffusion && python3 -m venv venv

Далее активируйте вашу виртуальную среду и установите нужную для проекта версию pip:

source venv/bin/activate && pip3 install --upgrade pip=20.3

Как мы уже говорили, Stable Diffusion поставляется со средой conda, которую вы можете использовать для установки зависимостей. Я не буду использовать это, поэтому мне нужно создать отдельный файл requirements.txt.

Если вы клонировали ветку, которую я предоставил на первом шаге, вам не нужно выполнять этот шаг. Файл requirements.txt уже присутствует в репозитории. Если нет, создайте его с помощью команды ниже:

cat << EOF > requirements.txt
numpy==1.19.2
--extra-index-url https://download.pytorch.org/whl/cpu
torch==1.11.0+cpu
torchvision==0.12.0+cpu
albumentations==0.4.3
diffusers
opencv-python==4.1.2.30
pudb==2019.2
invisible-watermark
imageio==2.9.0
imageio-ffmpeg==0.4.2
pytorch-lightning==1.4.2
omegaconf==2.1.1
test-tube>=0.7.5
streamlit>=0.73.1
einops==0.3.0
torch-fidelity==0.3.0
transformers==4.19.2
torchmetrics==0.6.0
kornia==0.6
-e git+https://github.com/CompVis/taming-transformers.git@master#egg=taming-transformers
-e git+https://github.com/openai/CLIP.git@main#egg=clip
EOF

Теперь я могу установить зависимости проекта в своей виртуальной среде:

pip3 install -r requirements.txt

Наконец, мне нужно установить саму библиотеку Stable Diffusion:

pip3 install -e .

Получение модели

Теперь, когда я настроил свою среду, мне нужно получить веса модели. Контрольные точки весов моделей размещены на Hugging Face, и для их загрузки вам нужна учетная запись. Итак, создайте его на их странице. Не забудьте после этого подтвердить свою электронную почту!

Следующим шагом будет загрузка модели. Перейдите по этому адресу: https://huggingface.co/CompVis/stable-diffusion-v-1-4-original и согласитесь поделиться своей контактной информацией:

Теперь скачайте модель. Там вы увидите два файла контрольных точек: sd-v1-4.ckpt и sd-v1-4-full-ema.ckpt. Термин ema означает экспоненциальное скользящее среднее и используется в качестве контрольной точки для возобновления обучения. Для наших целей мы хотим загрузить меньший sd-v1-4.ckpt для вывода, хотя есть способы использовать и ema. Впрочем, это не то, что здесь нужно обсуждать. Давайте не будем усложнять.

В зависимости от вашего интернет-соединения, загрузка модели займет примерно 5–10 минут. В конце концов, это ~ 4 ГБ. Когда этот процесс будет завершен, создайте папку stable-diffusion-v1 в доме вашего проекта, чтобы поместить его в:

mkdir models/ldm/stable-diffusion-v1

Переместите модель в папку stable-diffusion-v1 и переименуйте ее в model.ckpt:

mv /path/to/sd-v1-4.ckpt models/ldm/stable-diffusion-v1/model.ckpt

Запустите модель

На данный момент у вас все на месте. Чтобы создать свое первое потрясающее произведение искусства, выполните следующую команду:

python3 scripts/txt2img.py --prompt "An astronaut riding a horse, painted by Pablo Picasso." --plms --n_iter 5 --n_samples 1

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

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

Вот результат, который я получил:

Это довольно удивительно, вы согласны?

Нет графического процессора? Без проблем!

Если у вас нет графического процессора, приведенный выше скрипт не запустится. К сожалению, для запуска проекта требуется устройство с графическим процессором и CUDA.

Тем не менее, веселье не должно останавливаться на достигнутом. Репозиторий и ветка, которые я предоставил вам на первом этапе, также могут запускать Stable Diffusion на процессоре. Цена, которую вы платите, заключается в том, что это займет некоторое время. В зависимости от вашей системы это может занять более 30 минут. Но сколько бы вы ждали, если бы кто-то нарисовал ваш портрет?

Чтобы запустить его на процессоре, просто добавьте флаг --config к команде, которую вы выполнили ранее, и укажите другой файл конфигурации:

python3 scripts/txt2img.py --prompt "An astronaut riding a horse, painted by Pablo Picasso." --plms --n_iter 5 --n_samples 1 --config configs/stable-diffusion/v1-inference-cpu.yaml

Краткое содержание

Подобно DALL·E 2, Stable Diffusion — это система искусственного интеллекта с открытым исходным кодом, которая создает реалистичные изображения и рисунки на основе описания на естественном языке. Он объединяет концепции, атрибуты и стили для создания уникальных изображений или вариаций существующих изображений.

Эта история продемонстрировала, как вы можете создать невероятное искусство в своей системе менее чем за 10 минут, даже если у вас нет устройства с графическим процессором. Самое приятное то, что это программное обеспечение, которое вы можете контролировать и запускать каждый раз, когда хотите создать изображение, которое можно выразить словами. Просто вдумчиво относитесь к тому, что вы генерируете!

об авторе

Меня зовут Димитрис Пулопулос, я инженер по машинному обучению, работаю в компании Аррикто. Я разработал и внедрил ИИ и программные решения для крупных клиентов, таких как Европейская комиссия, Евростат, МВФ, Европейский центральный банк, ОЭСР и IKEA.

Если вы хотите прочитать больше сообщений о машинном обучении, глубоком обучении, науке о данных и DataOps, подпишитесь на меня в Medium, LinkedIn или @james2pl в Twitter.

Высказанные мнения являются исключительно моими собственными и не отражают точку зрения или мнение моего работодателя.