# Bria 3.2

Bria 3.2 — это модель преобразования текста в изображение нового поколения, готовая к коммерческому использованию. Всего 4 миллиарда параметров обеспечивают исключительное качество эстетики и рендеринга текста; по оценкам, результаты сопоставимы с ведущими моделями с открытым исходным кодом, а по сравнению с другими лицензированными моделями Bria 3.2 демонстрирует лучшие показатели. Помимо того, что модель построена исключительно на лицензированных данных, версия 3.2 предлагает несколько преимуществ для корпоративного и коммерческого использования:

- Эффективные вычисления — модель в 3 раза меньше аналогичных моделей на рынке (4 млрд параметров против 12 млрд параметров у других моделей с открытым исходным кодом)
- Согласованность архитектуры: та же архитектура, что и в 3.1 — идеально для пользователей, которые хотят обновиться без сбоев.
- Ускорение дообучения: дообучение на L40S и A100 стало в 2 раза быстрее.

Оригинальные контрольные точки модели Bria 3.2 можно найти [здесь](https://huggingface.co/briaai/BRIA-3.2). Репозиторий Bria 3.2 на GitHub доступен [здесь](https://github.com/Bria-AI/BRIA-3.2).

Если вы хотите узнать больше о платформе Bria и получить бесплатный доступ, посетите [bria.ai](https://bria.ai).

## Использование

_Модель доступна по запросу, поэтому перед её использованием с diffusers вам необходимо перейти на [страницу Bria 3.2 на Hugging Face](https://huggingface.co/briaai/BRIA-3.2), заполнить форму и принять условия доступа. После этого выполните вход в систему, чтобы подтвердить, что вы приняли условия._

Используйте команду ниже для входа:

```bash
hf auth login
```

## BriaPipeline[[diffusers.BriaPipeline]]

#### diffusers.BriaPipeline[[diffusers.BriaPipeline]]

```python
diffusers.BriaPipeline(transformer: BriaTransformer2DModel, scheduler: diffusers.schedulers.scheduling_flow_match_euler_discrete.FlowMatchEulerDiscreteScheduler | diffusers.schedulers.scheduling_utils.KarrasDiffusionSchedulers, vae: AutoencoderKL, text_encoder: T5EncoderModel, tokenizer: T5Tokenizer, image_encoder: CLIPVisionModelWithProjection = None, feature_extractor: CLIPImageProcessorPil = None)
```

[Источник](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/bria/pipeline_bria.py#L89)

**Параметры:**

transformer ([BriaTransformer2DModel](/docs/diffusers/v0.43.0/ru/api/models/bria_transformer#diffusers.BriaTransformer2DModel)) : архитектура условного Transformer (MMDiT) для удаления шума из закодированных латентов изображения.

scheduler ([FlowMatchEulerDiscreteScheduler](/docs/diffusers/v0.43.0/ru/api/schedulers/flow_match_euler_discrete#diffusers.FlowMatchEulerDiscreteScheduler)) : планировщик, используемый в связке с `transformer` для удаления шума из закодированных латентов изображения.

vae ([AutoencoderKL](/docs/diffusers/v0.43.0/ru/api/models/autoencoderkl#diffusers.AutoencoderKL)) : Модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.

text_encoder (`T5EncoderModel`) : Замороженный текстовый энкодер. Bria использует [T5](https://huggingface.co/docs/transformers/model_doc/t5#transformers.T5EncoderModel), а именно вариант [t5-v1_1-xxl](https://huggingface.co/google/t5-v1_1-xxl).

tokenizer (`T5TokenizerFast`) : Токенизатор класса [T5Tokenizer](https://huggingface.co/docs/transformers/model_doc/t5#transformers.T5Tokenizer).

Основан на FluxPipeline с несколькими изменениями:
- нет объединённых эмбеддингов
- Мы используем нулевую отсечку для промптов
- Встроенное представление руководства отсутствует, так как это не дистиллированная версия

#### __call__[[diffusers.BriaPipeline.__call__]]

```python
__call__(prompt: str | list[str] = None, height: int | None = None, width: int | None = None, num_inference_steps: int = 30, timesteps: list[int] = None, guidance_scale: float = 5, negative_prompt: str | list[str] | None = None, num_images_per_prompt: int | None = 1, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.FloatTensor] = None, prompt_embeds: typing.Optional[torch.FloatTensor] = None, negative_prompt_embeds: typing.Optional[torch.FloatTensor] = None, output_type: str | None = 'pil', return_dict: bool = True, attention_kwargs: dict[str, typing.Any] | None = None, callback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], max_sequence_length: int = 128, clip_value: None | float = None, normalize: bool = False)
```

[Источник](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/bria/pipeline_bria.py#L448)

**Параметры:**

prompt (`str` или `list[str]`, *необязательный*) : Промпт или промпты для управления генерацией изображения. Если не задан, необходимо передать `prompt_embeds` вместо него.

height (`int`, *optional*, по умолчанию self.unet.config.sample_size * self.vae_scale_factor) : Высота генерируемого изображения в пикселях. По умолчанию установлено значение 1024 для достижения наилучших результатов.

width (`int`, *optional*, по умолчанию self.unet.config.sample_size * self.vae_scale_factor) : Ширина генерируемого изображения в пикселях. По умолчанию установлено значение 1024 для достижения наилучших результатов.

num_inference_steps (`int`, *optional*, по умолчанию 50) : Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к изображению более высокого качества, но за счёт более медленного вывода.

timesteps (`list[int]`, *optional*) : Пользовательские шаги для процесса денойзинга с планировщиками, поддерживающими аргумент `timesteps` в их методе `set_timesteps`. Если не определено, будет использоваться поведение по умолчанию при передаче `num_inference_steps`. Должны быть в порядке убывания.

guidance_scale (`float`, *необязательный*, по умолчанию 5.0) --

**Возвращает:** `~pipelines.bria.BriaPipelineOutput` или `tuple`

`~pipelines.bria.BriaPipelineOutput`, если `return_dict` равно True, иначе `tuple`. При возврате кортежа первым элементом является список с сгенерированными изображениями.

Функция, вызываемая при обращении к конвейеру для генерации.

<<<<<<< HEAD Масштаб руководства, как определено в [Classifier-Free Diffusion Guidance](https://arxiv.org/abs/2207.12598). `guidance_scale` определяется как `w` из уравнения 2. в [Imagen Paper](https://arxiv.org/pdf/2205.11487.pdf). Масштаб руководства включается при установке `guidance_scale > 1`. Более высокий масштаб руководства способствует генерации изображений, тесно связанных с текстовым `prompt`, обычно за счёт снижения качества изображения. negative_prompt (`str` или `list[str]`, *необязательный*): ======= Масштаб руководства, как определено в [Classifier-Free Diffusion Guidance](https://huggingface.co/papers/2207.12598). `guidance_scale` определяется как `w` из уравнения 2. в [Imagen Paper](https://huggingface.co/papers/2205.11487). Масштаб руководства включается при установке `guidance_scale > 1`. Более высокий масштаб руководства способствует генерации изображений, тесно связанных с текстовым `prompt`, обычно за счёт снижения качества изображения. negative_prompt (`str` или `list[str]`, *необязательный*):
>>>>>>> main
Промпт или промпты, которые не используются для управления генерацией изображения. Если не задано, необходимо передать `negative_prompt_embeds`. Игнорируется, если не используется управление (т. е. игнорируется, если `guidance_scale` меньше `1`). num_images_per_prompt (`int`, *необязательный*, по умолчанию 1): Количество изображений для генерации на каждый промпт. generator (`torch.Generator` или `list[torch.Generator]`, *необязательный*): Один или список [генераторов torch](https://pytorch.org/docs/stable/generated/torch.Generator.html) для обеспечения детерминированности генерации. latents (`torch.FloatTensor`, *необязательный*: Предварительно сгенерированные шумные латенты, выбранные из гауссова распределения, которые используются в качестве входных данных для генерации изображения. Можно использовать для настройки одной и той же генерации с разными промптами. Если не предоставлено, тензор латентов будет сгенерирован путем выборки с использованием переданного случайного `generator`. prompt_embeds (`torch.FloatTensor`, *необязательный*): Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, *например* взвешивания промпта. Если не предоставлено, текстовые эмбеддинги будут сгенерированы из входного аргумента `prompt`. negative_prompt_embeds (`torch.FloatTensor`, *необязательный*): Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, *например* взвешивания промпта. Если не предоставлено, negative_prompt_embeds будут сгенерированы из входного аргумента `negative_prompt`. output_type (`str`, *необязательный*, по умолчанию `"pil"`): Формат вывода сгенерированного изображения. Выберите между [PIL](https://pillow.readthedocs.io/en/stable/): `PIL.Image.Image` или `np.array`. return_dict (`bool`, *необязательный*, по умолчанию `True`): Возвращать ли `~pipelines.bria.BriaPipelineOutput` вместо обычного кортежа. attention_kwargs (`dict`, *необязательный*): Словарь kwargs, который, если указан, передается в `AttentionProcessor`, определенный в `self.processor` в [diffusers.models.attention_processor](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py). 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`, по умолчанию 256): Максимальная длина последовательности для использования с `prompt`. clip_value (`float`, *необязательный*): Если задано, предсказанный шум обрезается до диапазона `[-clip_value, clip_value]` на каждом шаге денойзинга. normalize (`bool`, *необязательный*, по умолчанию `False`): Нормализовать ли предсказанный шум на каждом шаге денойзинга.

Примеры:
```py
>>> import torch
>>> from diffusers import BriaPipeline

>>> pipe = BriaPipeline.from_pretrained("briaai/BRIA-3.2", torch_dtype=torch.bfloat16)
>>> pipe.to("cuda")
# BRIA's T5 text encoder is sensitive to precision. We need to cast it to bfloat16 and keep the final layer in float32.

>>> pipe.text_encoder = pipe.text_encoder.to(dtype=torch.bfloat16)
>>> for block in pipe.text_encoder.encoder.block:
...     block.layer[-1].DenseReluDense.wo.to(dtype=torch.float32)
# BRIA's VAE is not supported in mixed precision, so we use float32.

>>> if pipe.vae.config.shift_factor == 0:
...     pipe.vae.to(dtype=torch.float32)

>>> prompt = "Photorealistic food photography of a stack of fluffy pancakes on a white plate, with maple syrup being poured over them. On top of the pancakes are the words 'BRIA 3.2' in bold, yellow, 3D letters. The background is dark and out of focus."
>>> image = pipe(prompt).images[0]
>>> image.save("bria.png")
```

#### encode_prompt[[diffusers.BriaPipeline.encode_prompt]]

```python
encode_prompt(prompt: str | list[str], device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, do_classifier_free_guidance: bool = True, negative_prompt: str | list[str] | None = None, prompt_embeds: typing.Optional[torch.FloatTensor] = None, negative_prompt_embeds: typing.Optional[torch.FloatTensor] = None, max_sequence_length: int = 128, lora_scale: float | None = None)
```

[Источник](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/bria/pipeline_bria.py#L146)

**Параметры:**

prompt (`str` или `list[str]`, *необязательный*) : промпт для кодирования

device : (`torch.device`): устройство torch

num_images_per_prompt (`int`) : количество изображений, которые должны быть сгенерированы для каждого промпта

do_classifier_free_guidance (`bool`) : использовать ли классификаторное свободное наведение (classifier free guidance)

negative_prompt (`str` или `list[str]`, *необязательный*) : Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передать `negative_prompt_embeds`. Игнорируется, если не используется направляющее влияние (то есть игнорируется, если `guidance_scale` меньше `1`).

prompt_embeds (`torch.FloatTensor`, *необязательный*) : Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, *например* для взвешивания промпта. Если не предоставлены, текстовые эмбеддинги будут сгенерированы из входного аргумента `prompt`.

negative_prompt_embeds (`torch.FloatTensor`, *необязательный*) : Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, *например* для взвешивания промпта. Если не предоставлены, negative_prompt_embeds будут сгенерированы из входного аргумента `negative_prompt`.

