Инструкция по установке и использованию нейросети Stable-Diffusion на собственном железе
Зачем и термины
Чтобы поиграться с генерацией картинок необязательно ставить всё на своё железо, можно ипользовать публичные сервисы.
Midjourney про который можно почитать тут.
Stable-Diffusion, про который идет речь. Также ее можно попробовать тут.
ruDALL-E, dall-e mini
В общем, выбор обширен.
Ставить локально стоит если не хочется чтобы ваши запросы были видны остальным, если хочется играться без фильтров и цензуры. Или чтобы не было лимитов на количество запросов.
Основной термин в использовании сетей - промт (prompt), т.е. фраза которую мы задаем сети для генерации изображения. Чем качественнее построен промт, тем качественнее получится картинка.
Что нужно иметь в наличии
1. Не менее 25 Gb свободного места, репозиторий с моделями весит около 13Gb, плюс CUDA и библиотеки тоже занимают место.
2. Видеокарту от NVidia с памятью от 10 Gb (из официальной документации - the model is relatively lightweight and runs on a GPU with at least 10GB VRAM)
Т.е. 3080/3080Ti/3090/3090Ti подойдут, 3070 уже не годится, нужно проверять, по комментариям и на 2070 запускается. Также подойдут всякие профессиональные RTX5000 и выше, Tesla, A100.
Хотя можно и 3070 попробовать, есть информация что достаточно 6,9Gb видеопамяти
3. Операционную систему Windows/Ubunta, инструкция будет под Windows, но под никсы всё должно быть аналогичным.
Установка
1. Скачать установить Anaconda
2. Скачать и установить CUDA, я проверял на версии 11.3
2.1 Возможно потребуется скачать cuDNN, для этого придется создать учетную запись NVIDIA. После чего можно зайти и скачать архив. Содержимое архива нужно поместить в папку с установленной CUDA (C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.3)
3. Скачать модель, ссылка sd-v1-4.ckpt
4. Скачать репозиторий
На странице есть кнопка Code, нажать на нее, Download ZIP, скачанное распаковать. Проследить чтобы в пути к каталогу не было русских букв. Ну или через git склонировать. Кому что ближе.
5. Скопировать файл скачанный на пункте 3 в папку stable-diffusion\models\ldm\stable-diffusion-v1, после чего переименовать его в model.ckpt
6. Открыть командную строку, перейти в каталог stable-diffusion и следовать инструкции на странице
https://github.com/CompVis/stable-diffusion
А именно прописать команды:
conda env create -f environment.yaml
conda activate ldm
conda install pytorch torchvision -c pytorch
pip install transformers==4.19.2 diffusers invisible-watermark
pip install -e .
Использование
ВНИМАНИЕ! Текст писать на английском.
Для создания по тексту, пишем в командной строке
python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plmsДля создания по тексту на основе имеющейся картинки (картинка должны быть небольшой, около 512x512 пикселей)
python scripts/img2img.py --prompt "A fantasy landscape, trending on artstation" --init-img <path-to-img.jpg> --strength 0.8
По завершении развлечений писать в командной строке
deactivate
Для генерации в следующий раз, после перезапуска командной строки, сначала запускать команду
conda activate ldm
Дополнительные материалы
Гайды по созданию промтов
Список художников чьи стили понимает сеть
Сборщик промтов, позволяет набрать детализированное описание, настроить параметры вроде той же camera distance, текстур, пост-процессинга, цветовой гаммы, освещения и так далее, выбрать стиль художника, размер картинки и много чего еще
Поисковик промтов
Пара примеров
Пробуем в лоб задать какой нибудь запрос
python scripts/txt2img.py --prompt "harvard lovecraft's nightmares" --plms
Результат не впечатляет. Теперь идем в сборщик запросов и пробуем улучшить.
python scripts/txt2img.py --prompt "!dream harvard lovecraft's nightmares, insanely detailed and intricate, hypermaximalist, elegant, ornate, hyper realistic, super detailed" --plms
Стало значительно приятнее. Добавим просьбу выполнить в стиле художника Takashi Murakami
python scripts/txt2img.py --prompt "!dream harvard lovecraft's nightmares, by Takashi Murakami, insanely detailed and intricate, hypermaximalist, elegant, ornate, hyper realistic, super detailed" --plms
И так далее. Кроме самого текста запроса можно двигаться в пространстве нейросети задавая параметр --seed, он влияет на инициализацию генератора случайных чисел, и с каждым новым параметром результат будет иной. Например, точно такой же запрос как на предыдущем шаге, но с заданным сидом
python scripts/txt2img.py --prompt "!dream harvard lovecraft's nightmares, by Takashi Murakami, insanely detailed and intricate, hypermaximalist, elegant, ornate, hyper realistic, super detailed" --plms --seed 6443543543
Еще один пример, я создал шедевр в paint'e, но хочу немного его прокачать, вот это я нарисовал
Теперь даю нейросети задачу создать изображение на основе моего творчества и фразы
python scripts/img2img.py --prompt "hipster bus, insanely detailed and intricate, hypermaximalist, elegant, ornate, hyper realistic, super detailed" --init-img D:/1.png --strength 0.8
Кстати, последний параметр, strength, по сути говорит насколько сильно будет конечное изображение близко к начальному. Чем меньше параметр, тем больше похожести. Другими словами это сила применения фразы для генерации к нашему начальному изображению.
Итак, применив команду я получил следующее
Enjoy