Buckets:

mishig's picture
|
download
raw
14.3 kB
# Stable Video Diffusion
Stable Video Diffusion была предложена в статье [Stable Video Diffusion: Scaling Latent Video Diffusion Models to Large Datasets](https://hf.co/papers/2311.15127) авторами Andreas Blattmann, Tim Dockhorn, Sumith Kulal, Daniel Mendelevitch, Maciej Kilian, Dominik Lorenz, Yam Levi, Zion English, Vikram Voleti, Adam Letts, Varun Jampani, Robin Rombach.
Аннотация из статьи:
*Мы представляем Stable Video Diffusion — латентную модель диффузии для видео, обеспечивающую генерацию видео высокого разрешения по тексту и изображению на уровне современных достижений. Недавно латентные диффузионные модели, обученные для синтеза 2D-изображений, были превращены в генеративные модели видео путем добавления временных слоев и дообучения на небольших наборах данных с высококачественным видео. Однако методы обучения, описанные в литературе, сильно различаются, и в области еще не выработан единый подход к формированию видеоданных. В данной статье мы выделяем и оцениваем три различных этапа успешного обучения видео-ЛДМ: предварительное обучение «текст-в-изображение», предварительное обучение на видео и дообучение на высококачественном видео. Кроме того, мы демонстрируем необходимость тщательно отобранного набора данных для предварительного обучения для генерации высококачественного видео и предлагаем систематический процесс формирования данных для обучения сильной базовой модели, включая стратегии подписывания и фильтрации. Затем мы исследуем влияние дообучения нашей базовой модели на высококачественных данных и обучаем модель «текст-в-видео», конкурентоспособную с закрытыми системами генерации видео. Мы также показываем, что наша базовая модель обеспечивает мощное представление движения для задач нижнего уровня, таких как генерация видео по изображению, и позволяет адаптироваться к модулям LoRA, специфичным для движения камеры. Наконец, мы демонстрируем, что наша модель предоставляет сильный многовидовой 3D-приор и может служить основой для дообучения многовидовой диффузионной модели, которая совместно генерирует несколько видов объектов в режиме прямого распространения, превосходя методы на основе изображений при значительно меньших вычислительных затратах. Мы публикуем код и веса модели по этой ссылке: https URL.*
> [!TIP]
> Ознакомьтесь с организацией [Stability AI](https://huggingface.co/stabilityai) на Hugging Face Hub, где доступны контрольные точки [base](https://huggingface.co/stabilityai/stable-video-diffusion-img2vid) и [extended frame](https://huggingface.co/stabilityai/stable-video-diffusion-img2vid-xt)!
Убедитесь, что у вас установлены следующие библиотеки.
```py
# Uncomment to install the necessary libraries in Colab
!pip install -q -U diffusers transformers accelerate
```
Существуют два варианта этой модели: [SVD](https://huggingface.co/stabilityai/stable-video-diffusion-img2vid) и [SVD-XT](https://huggingface.co/stabilityai/stable-video-diffusion-img2vid-xt). Чекпоинт SVD обучен генерировать 14 кадров, а чекпоинт SVD-XT дополнительно дообучен для генерации 25 кадров.
Для этого руководства вы будете использовать контрольную точку SVD-XT.
```python
import torch
from diffusers import StableVideoDiffusionPipeline
from diffusers.utils import load_image, export_to_video
pipe = StableVideoDiffusionPipeline.from_pretrained(
"stabilityai/stable-video-diffusion-img2vid-xt", dtype=torch.float16, variant="fp16"
)
pipe.enable_model_cpu_offload()
# Load the conditioning image
image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/svd/rocket.png")
image = image.resize((1024, 576))
generator = torch.manual_seed(42)
frames = pipe(image, decode_chunk_size=8, generator=generator).frames[0]
export_to_video(frames, "generated.mp4", fps=7)
```
"исходное изображение ракеты"
"видео, сгенерированное из исходного изображения"
## torch.compile
Вы можете получить ускорение на 20–25% за счёт незначительного увеличения потребления памяти, [скомпилировав](../../../optimization/fp16#torchcompile) UNet.
```diff
- pipe.enable_model_cpu_offload()
+ pipe.to("cuda") # or "mps", "xpu", "cpu"
+ pipe.unet = torch.compile(pipe.unet, mode="reduce-overhead", fullgraph=True)
```
## Сокращение использования памяти
Генерация видео требует значительных объёмов памяти, поскольку по сути вы генерируете `num_frames` кадров одновременно, что аналогично генерации изображений по тексту с большим размером батча. Для снижения требований к памяти существует несколько вариантов, которые жертвуют скоростью инференса ради уменьшения потребления памяти:
- включить выгрузку модели: каждый компонент конвейера выгружается на CPU, когда в нём больше нет необходимости.
- включить послойное разбиение (chunking) для полносвязных слоёв: полносвязный слой выполняется в цикле вместо одного прохода с очень большим размером батча.
- reduce `decode_chunk_size`: VAE декодирует кадры по частям, а не все сразу. Установка `decode_chunk_size=1` декодирует по одному кадру за раз и использует минимальное количество памяти (мы рекомендуем подбирать это значение в зависимости от объёма памяти вашей GPU), но в видео может наблюдаться мерцание.
```diff
- pipe.enable_model_cpu_offload()
- frames = pipe(image, decode_chunk_size=8, generator=generator).frames[0]
+ pipe.enable_model_cpu_offload()
+ pipe.unet.enable_forward_chunking()
+ frames = pipe(image, decode_chunk_size=2, generator=generator, num_frames=25).frames[0]
```
Использование всех этих приёмов вместе должно снизить требования к памяти до менее чем 8 ГБ VRAM.
## Микроусловие
Stable Diffusion Video также принимает микровоздействие (micro-conditioning) в дополнение к изображению-условию, что позволяет более точно управлять генерируемым видео:
- `fps`: количество кадров в секунде в сгенерированном видео.
- `motion_bucket_id`: идентификатор корзины движения, используемый для генерируемого видео. Этот параметр позволяет управлять степенью движения в видео. Увеличение значения идентификатора корзины движения приводит к увеличению динамики в генерируемом видео.
- `noise_aug_strength`: количество шума, добавляемого к изображению-условию. Чем выше значение, тем меньше сгенерированное видео напоминает исходное изображение. Увеличение этого значения также усиливает движение в видео.
Например, чтобы сгенерировать видео с большей динамикой, используйте параметры микроусловий `motion_bucket_id` и `noise_aug_strength`:
```python
import torch
from diffusers import StableVideoDiffusionPipeline
from diffusers.utils import load_image, export_to_video
pipe = StableVideoDiffusionPipeline.from_pretrained(
"stabilityai/stable-video-diffusion-img2vid-xt", dtype=torch.float16, variant="fp16"
)
pipe.enable_model_cpu_offload()
# Load the conditioning image
image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/svd/rocket.png")
image = image.resize((1024, 576))
generator = torch.manual_seed(42)
frames = pipe(image, decode_chunk_size=8, generator=generator, motion_bucket_id=180, noise_aug_strength=0.1).frames[0]
export_to_video(frames, "generated.mp4", fps=7)
```
![](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/svd/output_rocket_with_conditions.gif)
## StableVideoDiffusionPipeline[[diffusers.StableVideoDiffusionPipeline]]
#### diffusers.StableVideoDiffusionPipeline[[diffusers.StableVideoDiffusionPipeline]]
```python
diffusers.StableVideoDiffusionPipeline(vae: AutoencoderKLTemporalDecoder, image_encoder: CLIPVisionModelWithProjection, unet: UNetSpatioTemporalConditionModel, scheduler: EulerDiscreteScheduler, feature_extractor: CLIPImageProcessorPil)
```
[Источник](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/stable_video_diffusion/pipeline_stable_video_diffusion.py#L147)
**Параметры:**
vae (`AutoencoderKLTemporalDecoder`) : вариационная автокодирующая модель (VAE) для кодирования изображений в латентные представления и декодирования из них.
image_encoder ([CLIPVisionModelWithProjection](https://huggingface.co/docs/transformers/v5.22.2/en/model_doc/clip#transformers.CLIPVisionModelWithProjection)) : замороженный CLIP-кодировщик изображений ([laion/CLIP-ViT-H-14-laion2B-s32B-b79K](https://huggingface.co/laion/CLIP-ViT-H-14-laion2B-s32B-b79K)).
unet (`UNetSpatioTemporalConditionModel`) : `UNetSpatioTemporalConditionModel` для удаления шума из закодированных латентов изображения.
scheduler ([EulerDiscreteScheduler](/docs/diffusers/v0.43.0/ru/api/schedulers/euler#diffusers.EulerDiscreteScheduler)) : планировщик, используемый в связке с `unet` для удаления шума из закодированных латентов изображения.
feature_extractor ([CLIPImageProcessor](https://huggingface.co/docs/transformers/v5.22.2/en/model_doc/clip#transformers.CLIPImageProcessor)) : `CLIPImageProcessor` для извлечения признаков из сгенерированных изображений.
Pipeline для генерации видео из входного изображения с использованием Stable Video Diffusion.
Эта модель наследуется от [DiffusionPipeline](/docs/diffusers/v0.43.0/ru/api/pipelines/overview#diffusers.DiffusionPipeline). Общую документацию по методам, реализованным для всех пайплайнов (загрузка, сохранение, запуск на конкретном устройстве и т. д.), см. в документации родительского класса.
## StableVideoDiffusionPipelineOutput[[diffusers.pipelines.stable_video_diffusion.StableVideoDiffusionPipelineOutput]]
#### diffusers.pipelines.stable_video_diffusion.StableVideoDiffusionPipelineOutput[[diffusers.pipelines.stable_video_diffusion.StableVideoDiffusionPipelineOutput]]
```python
diffusers.pipelines.stable_video_diffusion.StableVideoDiffusionPipelineOutput(frames: typing.Union[list[list[PIL.Image.Image]], numpy.ndarray, torch.Tensor])
```
[Источник](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/stable_video_diffusion/pipeline_stable_video_diffusion.py#L134)
**Параметры:**
frames (`[list[list[PIL.Image.Image]]`, `np.ndarray`, `torch.Tensor`]) : список денойзированных изображений PIL длиной `batch_size` или массив numpy или тензор torch с формой `(batch_size, num_frames, height, width, num_channels)`.
Класс вывода для конвейера Stable Video Diffusion.

Xet Storage Details

Size:
14.3 kB
·
Xet hash:
088a53a36037d6af6400024ac2a2e4aabdc9234124936999d7899402f0cb8a58

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.