Diffusers documentation
VisualCloze
VisualCloze
VisualCloze: A Universal Image Generation Framework via Visual In-Context Learning — это инновационный универсальный фреймворк генерации изображений на основе обучения в контексте, который предлагает следующие ключевые возможности:
- Поддержка различных задач в предметной области
- Обобщение на невиденные задачи с помощью обучения в контексте
- Объедините несколько задач в один шаг и генерируйте как целевое изображение, так и промежуточные результаты
- Поддержка обратного вывода условий из целевых изображений
Обзор
Аннотация из статьи:
Недавний прогресс в области диффузионных моделей значительно продвигает различные задачи генерации изображений. Однако текущий основной подход по-прежнему сосредоточен на создании моделей, специфичных для конкретной задачи, которые обладают ограниченной эффективностью при поддержке широкого спектра различных потребностей. Хотя универсальные модели пытаются преодолеть это ограничение, они сталкиваются с критическими вызовами, включая обобщаемые инструкции для задач, адекватные распределения задач и единый архитектурный дизайн. Для решения этих проблем мы предлагаем VisualCloze — универсальную фреймворк генерации изображений, которая поддерживает широкий спектр задач внутри домена, обобщение на невидимые ранее задачи, объединение нескольких невидимых ранее задач и обратную генерацию. В отличие от существующих методов, которые полагаются на языковые инструкции для задач, что приводит к неоднозначности задач и слабому обобщению, мы интегрируем визуальное обучение в контексте, позволяя моделям определять задачи по визуальным демонстрациям. Между тем, внутренняя разреженность визуальных распределений задач затрудняет обучение переносимым знаниям между задачами. В этой связи мы представляем Graph200K — графовый структурированный датасет, который устанавливает различные взаимосвязанные задачи, повышая плотность задач и переносимые знания. Кроме того, мы обнаружили, что наша унифицированная формулировка генерации изображений разделяет согласованную цель с заполнением изображений, что позволяет нам использовать сильные генеративные априори предобученных моделей заполнения без изменения архитектур. Код, датасет и модели доступны по адресу https://visualcloze.github.io.
Вывод
Загрузка модели
VisualCloze — это двухэтапный каскадный конвейер, содержащий VisualClozeGenerationPipeline и VisualClozeUpsamplingPipeline.
- В
VisualClozeGenerationPipelineкаждое изображение уменьшается в разрешении перед объединением изображений в сетку, что позволяет избежать чрезмерно высокого разрешения. В VisualCloze представлены две модели, подходящие для diffusers, а именно VisualClozePipeline-384 и VisualClozePipeline-512, которые уменьшают изображения до разрешений 384 и 512 соответственно. VisualClozeUpsamplingPipelineиспользует SDEdit для синтеза изображений высокого разрешения.
VisualClozePipeline объединяет оба этапа, обеспечивая удобное сквозное сэмплирование, при этом позволяя пользователям использовать каждый пайплайн независимо по мере необходимости.
Спецификации входных данных
Промпты для задач и контента
- Задача: требуется описать намерение задачи генерации
- Content prompt: Необязательное описание или подпись целевого изображения
- Если контентный промпт не требуется, передайте
None - Для пакетного вывода передайте
List[str|None]
Формат входных изображений
- Формат:
List[List[Image|None]] - Структура:
- Все строки, кроме последней, представляют примеры в контексте
- Последняя строка представляет текущий запрос (целевое изображение установлено в
None)
- Для пакетного вывода передайте
List[List[List[Image|None]]]
Управление разрешением
- Поведение по умолчанию:
- Начальная генерация на первом этапе: область
- Увеличение разрешения на втором этапе: коэффициент 3x
- Пользовательское разрешение: настраивается с помощью параметров
upsampling_heightиupsampling_width
Примеры
Для комплексных примеров, охватывающих широкий спектр задач, обратитесь к онлайн-демо и репозиторию на GitHub. Ниже приведены простые примеры для трёх случаев: преобразование маски в изображение, обнаружение границ и генерация по заданному объекту.
Пример для mask2image
import torch
from diffusers import VisualClozePipeline
from diffusers.utils import load_image
pipe = VisualClozePipeline.from_pretrained("VisualCloze/VisualClozePipeline-384", resolution=384, dtype=torch.bfloat16)
pipe.to("cuda") # or "mps", "xpu", "cpu"
# Load in-context images (make sure the paths are correct and accessible)
image_paths = [
# in-context examples
[
load_image('https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/visualcloze/visualcloze_mask2image_incontext-example-1_mask.jpg'),
load_image('https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/visualcloze/visualcloze_mask2image_incontext-example-1_image.jpg'),
],
# query with the target image
[
load_image('https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/visualcloze/visualcloze_mask2image_query_mask.jpg'),
None, # No image needed for the target image
],
]
# Task and content prompt
task_prompt = "In each row, a logical task is demonstrated to achieve [IMAGE2] an aesthetically pleasing photograph based on [IMAGE1] sam 2-generated masks with rich color coding."
content_prompt = """Majestic photo of a golden eagle perched on a rocky outcrop in a mountainous landscape.
The eagle is positioned in the right foreground, facing left, with its sharp beak and keen eyes prominently visible.
Its plumage is a mix of dark brown and golden hues, with intricate feather details.
The background features a soft-focus view of snow-capped mountains under a cloudy sky, creating a serene and grandiose atmosphere.
The foreground includes rugged rocks and patches of green moss. Photorealistic, medium depth of field,
soft natural lighting, cool color palette, high contrast, sharp focus on the eagle, blurred background,
tranquil, majestic, wildlife photography."""
# Run the pipeline
image_result = pipe(
task_prompt=task_prompt,
content_prompt=content_prompt,
image=image_paths,
upsampling_width=1344,
upsampling_height=768,
upsampling_strength=0.4,
guidance_scale=30,
num_inference_steps=30,
max_sequence_length=512,
generator=torch.Generator("cpu").manual_seed(0)
).images[0][0]
# Save the resulting image
image_result.save("visualcloze.png")Пример для обнаружения границ
import torch
from diffusers import VisualClozePipeline
from diffusers.utils import load_image
pipe = VisualClozePipeline.from_pretrained("VisualCloze/VisualClozePipeline-384", resolution=384, dtype=torch.bfloat16)
pipe.to("cuda") # or "mps", "xpu", "cpu"
# Load in-context images (make sure the paths are correct and accessible)
image_paths = [
# in-context examples
[
load_image('https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/visualcloze/visualcloze_edgedetection_incontext-example-1_image.jpg'),
load_image('https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/visualcloze/visualcloze_edgedetection_incontext-example-1_edge.jpg'),
],
[
load_image('https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/visualcloze/visualcloze_edgedetection_incontext-example-2_image.jpg'),
load_image('https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/visualcloze/visualcloze_edgedetection_incontext-example-2_edge.jpg'),
],
# query with the target image
[
load_image('https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/visualcloze/visualcloze_edgedetection_query_image.jpg'),
None, # No image needed for the target image
],
]
# Task and content prompt
task_prompt = "Each row illustrates a pathway from [IMAGE1] a sharp and beautifully composed photograph to [IMAGE2] edge map with natural well-connected outlines using a clear logical task."
content_prompt = ""
# Run the pipeline
image_result = pipe(
task_prompt=task_prompt,
content_prompt=content_prompt,
image=image_paths,
upsampling_width=864,
upsampling_height=1152,
upsampling_strength=0.4,
guidance_scale=30,
num_inference_steps=30,
max_sequence_length=512,
generator=torch.Generator("cpu").manual_seed(0)
).images[0][0]
# Save the resulting image
image_result.save("visualcloze.png")Пример генерации, управляемой объектом
import torch
from diffusers import VisualClozePipeline
from diffusers.utils import load_image
pipe = VisualClozePipeline.from_pretrained("VisualCloze/VisualClozePipeline-384", resolution=384, dtype=torch.bfloat16)
pipe.to("cuda") # or "mps", "xpu", "cpu"
# Load in-context images (make sure the paths are correct and accessible)
image_paths = [
# in-context examples
[
load_image('https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/visualcloze/visualcloze_subjectdriven_incontext-example-1_reference.jpg'),
load_image('https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/visualcloze/visualcloze_subjectdriven_incontext-example-1_depth.jpg'),
load_image('https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/visualcloze/visualcloze_subjectdriven_incontext-example-1_image.jpg'),
],
[
load_image('https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/visualcloze/visualcloze_subjectdriven_incontext-example-2_reference.jpg'),
load_image('https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/visualcloze/visualcloze_subjectdriven_incontext-example-2_depth.jpg'),
load_image('https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/visualcloze/visualcloze_subjectdriven_incontext-example-2_image.jpg'),
],
# query with the target image
[
load_image('https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/visualcloze/visualcloze_subjectdriven_query_reference.jpg'),
load_image('https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/visualcloze/visualcloze_subjectdriven_query_depth.jpg'),
None, # No image needed for the target image
],
]
# Task and content prompt
task_prompt = """Each row describes a process that begins with [IMAGE1] an image containing the key object,
[IMAGE2] depth map revealing gray-toned spatial layers and results in
[IMAGE3] an image with artistic qualitya high-quality image with exceptional detail."""
content_prompt = """A vintage porcelain collector's item. Beneath a blossoming cherry tree in early spring,
this treasure is photographed up close, with soft pink petals drifting through the air and vibrant blossoms framing the scene."""
# Run the pipeline
image_result = pipe(
task_prompt=task_prompt,
content_prompt=content_prompt,
image=image_paths,
upsampling_width=1024,
upsampling_height=1024,
upsampling_strength=0.2,
guidance_scale=30,
num_inference_steps=30,
max_sequence_length=512,
generator=torch.Generator("cpu").manual_seed(0)
).images[0][0]
# Save the resulting image
image_result.save("visualcloze.png")Используйте каждый конвейер независимо
import torch
from diffusers import VisualClozeGenerationPipeline, FluxFillPipeline as VisualClozeUpsamplingPipeline
from diffusers.utils import load_image
from PIL import Image
pipe = VisualClozeGenerationPipeline.from_pretrained(
"VisualCloze/VisualClozePipeline-384", resolution=384, dtype=torch.bfloat16
)
pipe.to("cuda") # or "mps", "xpu", "cpu"
image_paths = [
# in-context examples
[
load_image(
"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/visualcloze/visualcloze_mask2image_incontext-example-1_mask.jpg"
),
load_image(
"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/visualcloze/visualcloze_mask2image_incontext-example-1_image.jpg"
),
],
# query with the target image
[
load_image(
"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/visualcloze/visualcloze_mask2image_query_mask.jpg"
),
None, # No image needed for the target image
],
]
task_prompt = "In each row, a logical task is demonstrated to achieve [IMAGE2] an aesthetically pleasing photograph based on [IMAGE1] sam 2-generated masks with rich color coding."
content_prompt = "Majestic photo of a golden eagle perched on a rocky outcrop in a mountainous landscape. The eagle is positioned in the right foreground, facing left, with its sharp beak and keen eyes prominently visible. Its plumage is a mix of dark brown and golden hues, with intricate feather details. The background features a soft-focus view of snow-capped mountains under a cloudy sky, creating a serene and grandiose atmosphere. The foreground includes rugged rocks and patches of green moss. Photorealistic, medium depth of field, soft natural lighting, cool color palette, high contrast, sharp focus on the eagle, blurred background, tranquil, majestic, wildlife photography."
# Stage 1: Generate initial image
image = pipe(
task_prompt=task_prompt,
content_prompt=content_prompt,
image=image_paths,
guidance_scale=30,
num_inference_steps=30,
max_sequence_length=512,
generator=torch.Generator("cpu").manual_seed(0),
).images[0][0]
# Stage 2 (optional): Upsample the generated image
pipe_upsample = VisualClozeUpsamplingPipeline.from_pipe(pipe)
pipe_upsample.to("cuda")
mask_image = Image.new("RGB", image.size, (255, 255, 255))
image = pipe_upsample(
image=image,
mask_image=mask_image,
prompt=content_prompt,
width=1344,
height=768,
strength=0.4,
guidance_scale=30,
num_inference_steps=30,
max_sequence_length=512,
generator=torch.Generator("cpu").manual_seed(0),
).images[0]
image.save("visualcloze.png")VisualClozePipeline
класс diffusers.VisualClozePipeline
< source >( scheduler: FlowMatchEulerDiscreteSchedulervae: AutoencoderKLtext_encoder: CLIPTextModeltokenizer: CLIPTokenizertext_encoder_2: T5EncoderModeltokenizer_2: T5Tokenizertransformer: FluxTransformer2DModelresolution: int = 384 )
Параметры
- transformer (FluxTransformer2DModel) — Архитектура условного Transformer (MMDiT) для удаления шума из закодированных латентов изображения.
- scheduler (FlowMatchEulerDiscreteScheduler) —
планировщик, используемый в связке с
transformerдля удаления шума из закодированных латентов изображения. - vae (AutoencoderKL) — Модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.
- text_encoder (
CLIPTextModel) — CLIP, а именно вариант clip-vit-large-patch14. - text_encoder_2 (
T5EncoderModel) — T5, а именно вариант google/t5-v1_1-xxl. - tokenizer (
CLIPTokenizer) — токенизатор класса CLIPTokenizer. - tokenizer_2 (
T5TokenizerFast) — Второй токенизатор класса T5TokenizerFast. - resolution (
int, необязательный, по умолчанию 384) — Разрешение каждого изображения при объединении изображений из запроса и контекстных примеров.
Пайплайн VisualCloze для генерации изображений с визуальным контекстом. Ссылка: https://github.com/lzyhha/VisualCloze/tree/main. Этот пайплайн предназначен для генерации изображений на основе визуальных примеров в контексте.
__call__
< source >( task_prompt: str | list[str] = Nonecontent_prompt: str | list[str] = Noneimage: typing.Optional[torch.FloatTensor] = Noneupsampling_height: int | None = Noneupsampling_width: int | None = Nonenum_inference_steps: int = 50sigmas: list[float] | None = Noneguidance_scale: float = 30.0num_images_per_prompt: int | None = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.FloatTensor] = Noneprompt_embeds: typing.Optional[torch.FloatTensor] = Nonepooled_prompt_embeds: typing.Optional[torch.FloatTensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Truejoint_attention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']max_sequence_length: int = 512upsampling_strength: float = 1.0 ) → ~pipelines.flux.FluxPipelineOutput or tuple
Параметры
- task_prompt (
strилиlist[str], необязательный) — Промпт или промпты для определения намерения задачи. - content_prompt (
strилиlist[str], необязательный) — Промпт или промпты, определяющие содержание или подпись целевого изображения, которое будет сгенерировано. - image (
torch.Tensor,PIL.Image.Image,np.ndarray,list[torch.Tensor],list[PIL.Image.Image]илиlist[np.ndarray]) —Image, массив numpy или тензор, представляющие пакет изображений, который будет использоваться в качестве начальной точки. Для массивов numpy и тензоров pytorch ожидаемый диапазон значений составляет[0, 1]. Если это тензор или список тензоров, ожидаемая форма должна быть(B, C, H, W)или(C, H, W). Если это массив numpy или список массивов, ожидаемая форма должна быть(B, H, W, C)или(H, W, C). - upsampling_height (
int, необязательный, по умолчанию self.unet.config.sample_size * self.vae_scale_factor) — Высота в пикселях сгенерированного изображения (т. е. выходного изображения) после апскейлинга с помощью SDEdit. По умолчанию изображение масштабируется в три раза, а базовое разрешение определяется параметром resolution пайплайна. Если задан только один из параметровupsampling_heightилиupsampling_width, значение другого будет установлено автоматически на основе соотношения сторон. - upsampling_width (
int, необязательный, по умолчанию self.unet.config.sample_size * self.vae_scale_factor) — Ширина в пикселях сгенерированного изображения (т. е. выходного изображения) после апскейлинга с помощью SDEdit. По умолчанию изображение масштабируется в три раза, а базовое разрешение определяется параметром разрешения конвейера. Если указан только один из параметровupsampling_heightилиupsampling_width, значение другого будет установлено автоматически на основе соотношения сторон. - num_inference_steps (
int, необязательный, по умолчанию 50) — Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к изображению более высокого качества, но за счёт более медленного вывода. - sigmas (
list[float], необязательный) — Пользовательские сигмы для процесса удаления шума в планировщиках, поддерживающих аргументsigmasв их методеset_timesteps. Если не задано, будет использоваться поведение по умолчанию при передачеnum_inference_steps. - guidance_scale (
float, необязательный, по умолчанию 30.0) — Масштаб руководства, определенный в Classifier-Free Diffusion Guidance.guidance_scaleопределяется какwиз уравнения 2 статьи Imagen Paper. Масштаб руководства включается при установкеguidance_scale > 1. Более высокий масштаб руководства способствует генерации изображений, тесно связанных с текстомprompt, обычно за счет снижения качества изображения. - num_images_per_prompt (
int, необязательный, по умолчанию 1) — Количество изображений, генерируемых для каждого промпта. - generator (
torch.Generatorилиlist[torch.Generator], необязательный) — Один или список генераторов torch для обеспечения детерминированности генерации. - latents (
torch.FloatTensor, необязательный) — Предварительно сгенерированные зашумлённые латенты, выбранные из гауссова распределения, которые используются в качестве входных данных для генерации изображений. Позволяет корректировать один и тот же процесс генерации с помощью различных промптов. Если не заданы, тензор латентов будет сгенерирован путём выборки с использованием переданного случайногоgenerator. - prompt_embeds (
torch.FloatTensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не передано, текстовые эмбеддинги будут сгенерированы из входного аргументаprompt. - pooled_prompt_embeds (
torch.FloatTensor, необязательный) — Предварительно сгенерированные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлено, пул-эмбеддинги текста будут сгенерированы из входного аргументаprompt. - output_type (
str, необязательный, по умолчанию"pil") — Формат вывода сгенерированного изображения. Выберите один из вариантов: PIL:PIL.Image.Imageилиnp.array. - return_dict (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли возвращать~pipelines.flux.FluxPipelineOutputвместо обычного кортежа. - joint_attention_kwargs (
dict, необязательный) — Словарь kwargs, который при указании передается вAttentionProcessor, определенный вself.processorв модуле diffusers.models.attention_processor. - callback_on_step_end (
Callable, необязательный) — Функция, вызываемая в конце каждого шага денойзинга во время инференса. Функция вызывается со следующими аргументами:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict).callback_kwargsбудет содержать список всех тензоров, как указано вcallback_on_step_end_tensor_inputs. - callback_on_step_end_tensor_inputs (
list, необязательный) — Список тензорных входных данных для функцииcallback_on_step_end. Тензоры, указанные в списке, будут переданы в качестве аргументаcallback_kwargs. Вы сможете включать только переменные, перечисленные в атрибуте._callback_tensor_inputsвашего класса пайплайна. - max_sequence_length (
int, по умолчанию 512) — максимальная длина последовательности, используемая сprompt. - upsampling_strength (
float, необязательный, по умолчанию 1.0) — Определяет степень трансформации эталонногоimageизображения при апскейлинге результатов. Значение должно быть в диапазоне от 0 до- Сгенерированное изображение используется как отправная точка, и чем выше значение
upsampling_strength, тем больше шума добавляется. Количество шагов денойзинга зависит от количества шума, добавленного изначально. Когдаupsampling_strengthравно 1, добавляется максимальное количество шума, и процесс денойзинга выполняется в течение полного количества итераций, указанного вnum_inference_steps. Значение 0 пропускает этап апсемплинга и выводит результаты в разрешенииself.resolution.
- Сгенерированное изображение используется как отправная точка, и чем выше значение
Возвращает
~pipelines.flux.FluxPipelineOutput или tuple
~pipelines.flux.FluxPipelineOutput, если return_dict
равно True, иначе tuple. При возврате кортежа первым элементом является список с сгенерированными
изображениями.
Функция, вызываемая при обращении к конвейеру VisualCloze для генерации.
Примеры:
>>> import torch
>>> from diffusers import VisualClozePipeline
>>> from diffusers.utils import load_image
>>> image_paths = [
... # in-context examples
... [
... load_image(
... "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/visualcloze/visualcloze_mask2image_incontext-example-1_mask.jpg"
... ),
... load_image(
... "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/visualcloze/visualcloze_mask2image_incontext-example-1_image.jpg"
... ),
... ],
... # query with the target image
... [
... load_image(
... "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/visualcloze/visualcloze_mask2image_query_mask.jpg"
... ),
... None, # No image needed for the target image
... ],
... ]
>>> task_prompt = "In each row, a logical task is demonstrated to achieve [IMAGE2] an aesthetically pleasing photograph based on [IMAGE1] sam 2-generated masks with rich color coding."
>>> content_prompt = "Majestic photo of a golden eagle perched on a rocky outcrop in a mountainous landscape. The eagle is positioned in the right foreground, facing left, with its sharp beak and keen eyes prominently visible. Its plumage is a mix of dark brown and golden hues, with intricate feather details. The background features a soft-focus view of snow-capped mountains under a cloudy sky, creating a serene and grandiose atmosphere. The foreground includes rugged rocks and patches of green moss. Photorealistic, medium depth of field, soft natural lighting, cool color palette, high contrast, sharp focus on the eagle, blurred background, tranquil, majestic, wildlife photography."
>>> pipe = VisualClozePipeline.from_pretrained(
... "VisualCloze/VisualClozePipeline-384", resolution=384, torch_dtype=torch.bfloat16
... )
>>> pipe.to("cuda")
>>> image = pipe(
... task_prompt=task_prompt,
... content_prompt=content_prompt,
... image=image_paths,
... upsampling_width=1344,
... upsampling_height=768,
... upsampling_strength=0.4,
... guidance_scale=30,
... num_inference_steps=30,
... max_sequence_length=512,
... generator=torch.Generator("cpu").manual_seed(0),
... ).images[0][0]
>>> image.save("visualcloze.png")VisualClozeGenerationPipeline
класс diffusers.VisualClozeGenerationPipeline
< source >( scheduler: FlowMatchEulerDiscreteSchedulervae: AutoencoderKLtext_encoder: CLIPTextModeltokenizer: CLIPTokenizertext_encoder_2: T5EncoderModeltokenizer_2: T5Tokenizertransformer: FluxTransformer2DModelresolution: int = 384 )
Параметры
- transformer (FluxTransformer2DModel) — Архитектура условного Transformer (MMDiT) для удаления шума из закодированных латентов изображения.
- scheduler (FlowMatchEulerDiscreteScheduler) —
планировщик, используемый в связке с
transformerдля удаления шума из закодированных латентов изображения. - vae (AutoencoderKL) — Модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.
- text_encoder (
CLIPTextModel) — CLIP, а именно вариант clip-vit-large-patch14. - text_encoder_2 (
T5EncoderModel) — T5, а именно вариант google/t5-v1_1-xxl. - tokenizer (
CLIPTokenizer) — токенизатор класса CLIPTokenizer. - tokenizer_2 (
T5TokenizerFast) — Второй токенизатор класса T5TokenizerFast. - resolution (
int, необязательный, по умолчанию 384) — Разрешение каждого изображения при объединении изображений из запроса и контекстных примеров.
Пайплайн VisualCloze для генерации изображений с визуальным контекстом. Ссылка: https://github.com/lzyhha/VisualCloze/tree/main Этот пайплайн предназначен для генерации изображений на основе визуальных примеров в контексте.
__call__
< source >( task_prompt: str | list[str] = Nonecontent_prompt: str | list[str] = Noneimage: typing.Optional[torch.FloatTensor] = Nonenum_inference_steps: int = 50sigmas: list[float] | None = Noneguidance_scale: float = 30.0num_images_per_prompt: int | None = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.FloatTensor] = Noneprompt_embeds: typing.Optional[torch.FloatTensor] = Nonepooled_prompt_embeds: typing.Optional[torch.FloatTensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Truejoint_attention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']max_sequence_length: int = 512 ) → ~pipelines.flux.FluxPipelineOutput or tuple
Параметры
- task_prompt (
strилиlist[str], необязательный) — Промпт или промпты для определения намерения задачи. - content_prompt (
strилиlist[str], необязательный) — Промпт или промпты, определяющие содержание или подпись целевого изображения, которое будет сгенерировано. - image (
torch.Tensor,PIL.Image.Image,np.ndarray,list[torch.Tensor],list[PIL.Image.Image]илиlist[np.ndarray]) —Image, массив numpy или тензор, представляющие пакет изображений, который будет использоваться в качестве начальной точки. Для массивов numpy и тензоров pytorch ожидаемый диапазон значений составляет[0, 1]. Если это тензор или список тензоров, ожидаемая форма должна быть(B, C, H, W)или(C, H, W). Если это массив numpy или список массивов, ожидаемая форма должна быть(B, H, W, C)или(H, W, C). - num_inference_steps (
int, необязательный, по умолчанию 50) — Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к изображению более высокого качества, но за счёт более медленного вывода. - sigmas (
list[float], необязательный) — Пользовательские сигмы для процесса удаления шума в планировщиках, поддерживающих аргументsigmasв их методеset_timesteps. Если не задано, будет использоваться поведение по умолчанию при передачеnum_inference_steps. - guidance_scale (
float, необязательный, по умолчанию 30.0) — Масштаб руководства, определенный в Classifier-Free Diffusion Guidance.guidance_scaleопределяется какwиз уравнения 2 статьи Imagen Paper. Масштаб руководства включается при установкеguidance_scale > 1. Более высокий масштаб руководства способствует генерации изображений, тесно связанных с текстомprompt, обычно за счет снижения качества изображения. - num_images_per_prompt (
int, необязательный, по умолчанию 1) — Количество изображений, генерируемых для каждого промпта. - generator (
torch.Generatorилиlist[torch.Generator], необязательный) — Один или список генераторов torch для обеспечения детерминированности генерации. - latents (
torch.FloatTensor, необязательный) — Предварительно сгенерированные зашумлённые латенты, выбранные из гауссова распределения, которые используются в качестве входных данных для генерации изображений. Позволяет корректировать один и тот же процесс генерации с помощью различных промптов. Если не заданы, тензор латентов будет сгенерирован путём выборки с использованием переданного случайногоgenerator. - prompt_embeds (
torch.FloatTensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не передано, текстовые эмбеддинги будут сгенерированы из входного аргументаprompt. - pooled_prompt_embeds (
torch.FloatTensor, необязательный) — Предварительно сгенерированные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлено, пул-эмбеддинги текста будут сгенерированы из входного аргументаprompt. - output_type (
str, необязательный, по умолчанию"pil") — Формат вывода сгенерированного изображения. Выберите один из вариантов:"pil"(PIL:PIL.Image.Image),"np"(np.array) или"pt"(torch.Tensor). - return_dict (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли возвращать~pipelines.flux.FluxPipelineOutputвместо обычного кортежа. - joint_attention_kwargs (
dict, необязательный) — Словарь kwargs, который при указании передается вAttentionProcessor, определенный вself.processorв модуле diffusers.models.attention_processor. - callback_on_step_end (
Callable, необязательный) — Функция, вызываемая в конце каждого шага денойзинга во время инференса. Функция вызывается со следующими аргументами:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict).callback_kwargsбудет содержать список всех тензоров, как указано вcallback_on_step_end_tensor_inputs. - callback_on_step_end_tensor_inputs (
list, необязательный) — Список тензорных входных данных для функцииcallback_on_step_end. Тензоры, указанные в списке, будут переданы в качестве аргументаcallback_kwargs. Вы сможете включать только переменные, перечисленные в атрибуте._callback_tensor_inputsвашего класса пайплайна. - max_sequence_length (
int, по умолчанию 512) — максимальная длина последовательности, используемая сprompt.
Возвращает
~pipelines.flux.FluxPipelineOutput или tuple
~pipelines.flux.FluxPipelineOutput, если return_dict
равно True, иначе tuple. При возврате кортежа первым элементом является список с сгенерированными
изображениями.
Функция, вызываемая при обращении к конвейеру VisualCloze для генерации.
Примеры:
>>> import torch
>>> from diffusers import VisualClozeGenerationPipeline, FluxFillPipeline as VisualClozeUpsamplingPipeline
>>> from diffusers.utils import load_image
>>> from PIL import Image
>>> image_paths = [
... # in-context examples
... [
... load_image(
... "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/visualcloze/visualcloze_mask2image_incontext-example-1_mask.jpg"
... ),
... load_image(
... "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/visualcloze/visualcloze_mask2image_incontext-example-1_image.jpg"
... ),
... ],
... # query with the target image
... [
... load_image(
... "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/visualcloze/visualcloze_mask2image_query_mask.jpg"
... ),
... None, # No image needed for the target image
... ],
... ]
>>> task_prompt = "In each row, a logical task is demonstrated to achieve [IMAGE2] an aesthetically pleasing photograph based on [IMAGE1] sam 2-generated masks with rich color coding."
>>> content_prompt = "Majestic photo of a golden eagle perched on a rocky outcrop in a mountainous landscape. The eagle is positioned in the right foreground, facing left, with its sharp beak and keen eyes prominently visible. Its plumage is a mix of dark brown and golden hues, with intricate feather details. The background features a soft-focus view of snow-capped mountains under a cloudy sky, creating a serene and grandiose atmosphere. The foreground includes rugged rocks and patches of green moss. Photorealistic, medium depth of field, soft natural lighting, cool color palette, high contrast, sharp focus on the eagle, blurred background, tranquil, majestic, wildlife photography."
>>> pipe = VisualClozeGenerationPipeline.from_pretrained(
... "VisualCloze/VisualClozePipeline-384", resolution=384, torch_dtype=torch.bfloat16
... )
>>> pipe.to("cuda")
>>> image = pipe(
... task_prompt=task_prompt,
... content_prompt=content_prompt,
... image=image_paths,
... guidance_scale=30,
... num_inference_steps=30,
... max_sequence_length=512,
... generator=torch.Generator("cpu").manual_seed(0),
... ).images[0][0]
>>> # optional, upsampling the generated image
>>> pipe_upsample = VisualClozeUpsamplingPipeline.from_pipe(pipe)
>>> pipe_upsample.to("cuda")
>>> mask_image = Image.new("RGB", image.size, (255, 255, 255))
>>> image = pipe_upsample(
... image=image,
... mask_image=mask_image,
... prompt=content_prompt,
... width=1344,
... height=768,
... strength=0.4,
... guidance_scale=30,
... num_inference_steps=30,
... max_sequence_length=512,
... generator=torch.Generator("cpu").manual_seed(0),
... ).images[0]
>>> image.save("visualcloze.png")encode_prompt
< source >( layout_prompt: str | list[str]task_prompt: str | list[str]content_prompt: str | list[str]device: typing.Optional[torch.device] = Nonenum_images_per_prompt: int = 1prompt_embeds: typing.Optional[torch.FloatTensor] = Nonepooled_prompt_embeds: typing.Optional[torch.FloatTensor] = Nonemax_sequence_length: int = 512lora_scale: float | None = None )
Параметры
- layout_prompt (
strилиlist[str], необязательный) — Промпт или промпты для определения количества примеров в контексте и количества изображений, задействованных в задаче. - task_prompt (
strилиlist[str], необязательный) — Промпт или промпты для определения намерения задачи. - content_prompt (
strилиlist[str], необязательный) — Промпт или промпты, определяющие содержание или подпись целевого изображения, которое будет сгенерировано. - device — (
torch.device): устройство torch - num_images_per_prompt (
int) — количество изображений, которые должны быть сгенерированы для каждого промпта - prompt_embeds (
torch.FloatTensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не передано, текстовые эмбеддинги будут сгенерированы из входного аргументаprompt. - pooled_prompt_embeds (
torch.FloatTensor, необязательный) — Предварительно сгенерированные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлено, пул-эмбеддинги текста будут сгенерированы из входного аргументаprompt. - lora_scale (
float, необязательный) — Масштаб LoRA, который будет применён ко всем слоям LoRA текстового кодировщика, если слои LoRA загружены.