# Bria 3.2

Bria 3.2は、次世代の商用対応テキスト・トゥ・イメージモデルです。わずか40億パラメータながら、卓越した美観とテキストレンダリングを実現しており、評価では主要なオープンソースモデルと同等の結果を示し、他のライセンス付きモデルを上回る性能を発揮します。さらに、完全にライセンス付きデータで構築されていることに加え、エンタープライズおよび商用利用において以下の利点を提供します：

- Efficient Compute - 本モデルは、市場の同等モデル（他のオープンソースモデルの12Bパラメータに対し、4Bパラメータ）と比較して、サイズがX分の1に小型化されています。
- アーキテクチャの整合性: 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/main/src/diffusers/pipelines/bria/pipeline_bria.py#L89)

**パラメータ:**

transformer ([BriaTransformer2DModel](/docs/diffusers/main/ja/api/models/bria_transformer#diffusers.BriaTransformer2DModel)) : エンコードされた画像潜在変数をデノイズするための条件付き Transformer (MMDiT) アーキテクチャ。

scheduler ([FlowMatchEulerDiscreteScheduler](/docs/diffusers/main/ja/api/schedulers/flow_match_euler_discrete#diffusers.FlowMatchEulerDiscreteScheduler)) : `transformer` と組み合わせて、エンコードされた画像の潜在変数をデノイズするために使用するスケジューラー。

vae ([AutoencoderKL](/docs/diffusers/main/ja/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 = 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 = ['latents'], max_sequence_length: int = 128, clip_value: None | float = None, normalize: bool = False)
```

[ソース](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/bria/pipeline_bria.py#L448)

**パラメータ:**

prompt (`str` または `list[str]`、*省略可*) : 画像生成をガイドするためのプロンプトです。未定義の場合、代わりに `prompt_embeds` を渡す必要があります。

height (`int`、*任意*、デフォルトは self.unet.config.sample_size * self.vae_scale_factor) : 生成される画像のピクセル単位の縦幅。最適な結果を得るため、デフォルトでは 1024 に設定されています。

width (`int`、*任意*、デフォルトは self.unet.config.sample_size * self.vae_scale_factor) : 生成される画像の幅（ピクセル単位）。最適な結果を得るため、デフォルトでは 1024 に設定されています。

num_inference_steps (`int`、*任意*、デフォルト値は 50) : デノイジングのステップ数です。デノイジングのステップ数を増やすと、推論速度が遅くなる代わりに、通常はより高品質な画像が得られます。

timesteps (`list[int]`、*任意*) : `set_timesteps` メソッドで `timesteps` 引数をサポートするスケジューラーにおいて、デノイジングプロセスに使用するカスタムタイムステップ。`num_inference_steps` が渡された場合のデフォルトの動作が使用されます。降順で指定する必要があります。

guidance_scale (`float`、*任意*、デフォルト値は 5.0) --

**戻り値:** `~pipelines.bria.BriaPipelineOutput` または `tuple`

`return_dict` が True の場合は `~pipelines.bria.BriaPipelineOutput`、それ以外の場合は `tuple` を返します。tuple を返す場合、最初の要素は生成された画像のリストです。

生成用のパイプラインを呼び出したときに実行される関数。

<<<<<<< HEAD [Classifier-Free Diffusion Guidance](https://arxiv.org/abs/2207.12598) で定義されているガイダンススケール。`guidance_scale` は、[Imagen Paper](https://arxiv.org/pdf/2205.11487.pdf) の数式 2 の `w` として定義されています。`guidance_scale > 1` を設定することで、ガイダンススケールが有効になります。ガイダンススケールを高くすると、テキスト `prompt` と密接に関連する画像の生成が促されますが、通常は画像品質の低下を伴います。negative_prompt (`str` または `list[str]`、*任意*): ======= [Classifier-Free Diffusion Guidance](https://huggingface.co/papers/2207.12598) で定義されているガイダンススケール。`guidance_scale` は、[Imagen Paper](https://huggingface.co/papers/2205.11487) の数式 2 の `w` として定義されています。`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)（1つまたはリスト）。latents (`torch.FloatTensor`、*省略可能*): 画像生成の入力として使用する、ガウス分布からサンプリングされた事前生成されたノイズ付き潜在変数。異なるプロンプトで同じ生成を微調整するために使用できます。提供されない場合、指定されたランダム`generator`を使用してサンプリングを行い、潜在変数テンソルが生成されます。prompt_embeds (`torch.FloatTensor`、*省略可能*): 事前生成されたテキスト埋め込み。プロンプトの重み付けなど、*例えば*テキスト入力の微調整を簡単に実行できます。提供されない場合、`prompt`入力引数からテキスト埋め込みが生成されます。negative_prompt_embeds (`torch.FloatTensor`、*省略可能*): 事前生成されたネガティブなテキスト埋め込み。プロンプトの重み付けなど、*例えば*テキスト入力の微調整を簡単に実行できます。提供されない場合、`negative_prompt`入力引数からnegative_prompt_embedsが生成されます。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`、*省略可能*): 指定された場合、[diffusers.models.attention_processor](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py)の`self.processor`で定義された`AttentionProcessor`に渡されるkwargs辞書。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/main/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` 入力引数から negative_prompt_embeds が生成されます。

