AIGC: модель графа Винсента Стабильная диффузия

1 Введение в стабильную диффузию

Stable Diffusion — это модель преобразования текста в изображение, разработанная совместно CompVis, Stability AI и LAION. Она обучается на большом количестве графических моделей 512x512 из подмножества LAION-5B. Нам нужно просто ввести фрагмент текста, и Stable Diffusion может быстро преобразовать его в изображение, мы также можем разместить изображения или видео и обработать их текстом.

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

Демонстрация стабильной диффузии: демонстрация

1.1 Состав стабильной диффузии

Stable Diffusion не является монолитной моделью, она состоит из нескольких компонентов и моделей.

  • Компонент понимания текста: компонент понимания текста, который преобразует текстовую информацию в цифровое представление для фиксации идей в тексте.
  • Генератор изображений: генератор изображений, генератор изображений включает в себя два этапа, создатель информации об изображении (создатель информации об изображении) и декодер изображения (декодер изображения).

Компонент создания информации об изображении выполняет несколько шагов для создания объектов, что является параметром размера шага в стабильном интерфейсе и библиотеке распространения и обычно по умолчанию равно 50 или 100. Создатели информации об изображении работают полностью в информационном пространстве изображения (скрытом пространстве), что быстрее, чем модели диффузии, работающие в пространстве пикселей.

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

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

  • Компонент понимания текста: Clip Text — это кодировщик текста. Принимая 77 токенов в качестве входных данных, на выходе получаем 77 векторов встраивания токенов, каждый вектор имеет 768 измерений.
  • Создатель информации об изображении: UNet+Scheduler, который шаг за шагом обрабатывает рассеянную информацию в скрытом пространстве. Принимает вектор встраивания текста и начальный многомерный массив шума в качестве входных данных и выводит массив обработанной информации.
  • Декодер изображения: **Автоматическое кодирование и декодирование с использованием массива обработанной информации для получения конечного изображения. Принимая на вход обрабатываемый информационный массив размерностью 4 × 64 × 64 4 \times 64 \times 64 4×64×64, выходной размер составляет 3 × 512 × 512 3 \times 512 \times 512 3×512×512 изображения.

1.2 Что такое диффузия

Выше мы описали функциональность компонента «создатель информации об изображении», который принимает на выходе вектор встраивания текста и начальный многомерный ввод, состоящий из шума, и выдает массив информации, которую декодер изображения использует для отрисовки конечного изображения. Распространение — это процесс, который происходит внутри розового компонента «Image Information Creator» на рисунке ниже.

 

 Распространение — это постепенный процесс, на каждом этапе которого добавляется более актуальная информация. Распространение происходит в несколько этапов, при этом каждый шаг воздействует на входной массив латентных значений для создания другого массива латентных значений, который лучше напоминает входной текст и всю визуальную информацию, полученную моделью из всех изображений в обученной модели. На приведенном ниже рисунке массив латентных данных, сгенерированный на каждом этапе, используется в качестве входных данных для декодера изображений и визуализируется, какая информация добавляется на каждом этапе. Диффузия на рисунке ниже повторялась 50 раз.По мере увеличения количества итераций изображение, декодированное массивом скрытых данных, становится все четче и четче.

1.3 Как работает диффузия 

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

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

1.4 Шумоподавление и рисование изображения

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

 

1.5 Добавить текстовую информацию в генератор изображений

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

 

2 Создайте рабочую среду

2.1 установка среды conda

Для подготовки среды conda см.: annoconda

2.2 Подготовка рабочей среды

git clone https://github.com/CompVis/stable-diffusion.git

cd stable-diffusion

conda env create -f environment.yaml

conda activate ldm

pip install diffusers==0.12.1

2.3 Загрузка модели

(1) Загрузите файл модели «sd-v1-4.ckpt».

Адрес модели: модель

Выполните следующую команду после завершения

mkdir -p models/ldm/stable-diffusion-v1/

mv sd-v1-4.ckpt model.ckpt

mv model.ckpt models/ldm/stable-diffusion-v1/

(2) Загрузите модель checkpoint_liberty_with_aug.pth

Адрес модели: модель

После завершения загрузки модель помещается в папку кэша.

mv checkpoint_liberty_with_aug.pth ~/.cache/torch/hub/checkpoints/

(3) Загрузите модель clip-vit-large-patch14.

Адрес модели: модель

Файлы моделей, которые необходимо загрузить, следующие:

 Создайте каталог хранения для модели

mkdir -p openai/clip-vit-large-patch14

После завершения загрузки переместите загруженный файл в указанный выше каталог.

(4) Загрузите модель safety_checker

Адрес модели: модель

Файлы моделей, которые необходимо загрузить, следующие:

Создайте каталог хранения для файлов модели

mkdir -p CompVis/stable-diffusion-safety-checker

После завершения загрузки переместите загруженный файл в указанный выше каталог.

Переместите preprocessor_config.json в (3) в каталог текущей модели:

mv openai/clip-vit-large-patch14/preprocessor_config.json CompVis/stable-diffusion-safety-checker/

3 Отображение эффекта операции

3.1 Запуск диаграммы Винсента

python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms 

Отображение эффекта бега

параметры txt2img.py

usage: txt2img.py [-h] [--prompt [PROMPT]] [--outdir [OUTDIR]] [--skip_grid] [--skip_save] [--ddim_steps DDIM_STEPS] [--plms] [--laion400m] [--fixed_code] [--ddim_eta DDIM_ETA]
                  [--n_iter N_ITER] [--H H] [--W W] [--C C] [--f F] [--n_samples N_SAMPLES] [--n_rows N_ROWS] [--scale SCALE] [--from-file FROM_FILE] [--config CONFIG] [--ckpt CKPT]
                  [--seed SEED] [--precision {full,autocast}]

optional arguments:
  -h, --help            show this help message and exit
  --prompt [PROMPT]     the prompt to render
  --outdir [OUTDIR]     dir to write results to
  --skip_grid           do not save a grid, only individual samples. Helpful when evaluating lots of samples
  --skip_save           do not save individual samples. For speed measurements.
  --ddim_steps DDIM_STEPS
                        number of ddim sampling steps
  --plms                use plms sampling
  --laion400m           uses the LAION400M model
  --fixed_code          if enabled, uses the same starting code across samples
  --ddim_eta DDIM_ETA   ddim eta (eta=0.0 corresponds to deterministic sampling
  --n_iter N_ITER       sample this often
  --H H                 image height, in pixel space
  --W W                 image width, in pixel space
  --C C                 latent channels
  --f F                 downsampling factor
  --n_samples N_SAMPLES
                        how many samples to produce for each given prompt. A.k.a. batch size
  --n_rows N_ROWS       rows in the grid (default: n_samples)
  --scale SCALE         unconditional guidance scale: eps = eps(x, empty) + scale * (eps(x, cond) - eps(x, empty))
  --from-file FROM_FILE
                        if specified, load prompts from this file
  --config CONFIG       path to config which constructs model
  --ckpt CKPT           path to checkpoint of model
  --seed SEED           the seed (for reproducible sampling)
  --precision {full,autocast}
                        evaluate at this precision

3.2 Запустить преобразование изображения

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

python scripts/img2img.py --prompt "A fantasy landscape, trending on artstation" --init-img assets/stable-samples/img2img/mountains-1.png --strength 0.8

4 решение проблемы

4.1 Проблема SAFE_WEIGHTS_NAME решена

При запуске txt2img возникает следующая ошибка:

(ldm) [root@localhost stable-diffusion]# python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms 
Traceback (most recent call last):
  File "scripts/txt2img.py", line 22, in <module>
    from diffusers.pipelines.stable_diffusion.safety_checker import StableDiffusionSafetyChecker
  File "/root/anaconda3/envs/ldm/lib/python3.8/site-packages/diffusers/__init__.py", line 29, in <module>
    from .pipelines import OnnxRuntimeModel
  File "/root/anaconda3/envs/ldm/lib/python3.8/site-packages/diffusers/pipelines/__init__.py", line 19, in <module>
    from .dance_diffusion import DanceDiffusionPipeline
  File "/root/anaconda3/envs/ldm/lib/python3.8/site-packages/diffusers/pipelines/dance_diffusion/__init__.py", line 1, in <module>
    from .pipeline_dance_diffusion import DanceDiffusionPipeline
  File "/root/anaconda3/envs/ldm/lib/python3.8/site-packages/diffusers/pipelines/dance_diffusion/pipeline_dance_diffusion.py", line 21, in <module>
    from ..pipeline_utils import AudioPipelineOutput, DiffusionPipeline
  File "/root/anaconda3/envs/ldm/lib/python3.8/site-packages/diffusers/pipelines/pipeline_utils.py", line 67, in <module>
    from transformers.utils import SAFE_WEIGHTS_NAME as TRANSFORMERS_SAFE_WEIGHTS_NAME
ImportError: cannot import name 'SAFE_WEIGHTS_NAME' from 'transformers.utils' (/root/anaconda3/envs/ldm/lib/python3.8/site-packages/transformers/utils/__init__.py)

Решается изменением версии компонентных диффузоров, команда такая:

pip install diffusers==0.12.1

4.2 Решения для невозможности подключения к Huggingface.co

 python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms 
Traceback (most recent call last):
  File "/root/anaconda3/envs/ldm/lib/python3.8/site-packages/transformers/feature_extraction_utils.py", line 403, in get_feature_extractor_dict
    resolved_feature_extractor_file = cached_path(
  File "/root/anaconda3/envs/ldm/lib/python3.8/site-packages/transformers/utils/hub.py", line 282, in cached_path
    output_path = get_from_cache(
  File "/root/anaconda3/envs/ldm/lib/python3.8/site-packages/transformers/utils/hub.py", line 545, in get_from_cache
    raise ValueError(
ValueError: Connection error, and we cannot find the requested files in the cached path. Please try again or make sure your Internet connection is on.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "scripts/txt2img.py", line 28, in <module>
    safety_feature_extractor = AutoFeatureExtractor.from_pretrained(safety_model_id)
  File "/root/anaconda3/envs/ldm/lib/python3.8/site-packages/transformers/models/auto/feature_extraction_auto.py", line 270, in from_pretrained
    config_dict, _ = FeatureExtractionMixin.get_feature_extractor_dict(pretrained_model_name_or_path, **kwargs)
  File "/root/anaconda3/envs/ldm/lib/python3.8/site-packages/transformers/feature_extraction_utils.py", line 436, in get_feature_extractor_dict
    raise EnvironmentError(
OSError: We couldn't connect to 'https://huggingface.co' to load this model, couldn't find it in the cached files and it looks like CompVis/stable-diffusion-safety-checker is not the path to a directory containing a preprocessor_config.json file.
Checkout your internet connection or see how to run the library in offline mode at 'https://huggingface.co/docs/transformers/installation#offline-mode'.

Решение:

Скачать модель локально, процесс описан в 2.3

Supongo que te gusta

Origin blog.csdn.net/lsb2002/article/details/131534772
Recomendado
Clasificación