Как использовать стабильную диффузию для создания реалистичных изображений из описания на естественном языке без использования графического процессора.
В детстве я всегда восхищался людьми, которые могли нарисовать все, что придет в голову. Я мог часами наблюдать за тем, как они придавали форму, казалось бы, произвольным линиям на бумаге. К сожалению, я не был благословлен этим даром.
Прошло время, и сегодня ИИ может помочь мне материализовать идеи, которые у меня в голове. Это не то же самое, и процесс даже отдаленно не приносит такого удовлетворения. Но это способ выразить свои мысли на бумаге.
Я был взволнован, когда 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.
Высказанные мнения являются исключительно моими собственными и не отражают точку зрения или мнение моего работодателя.