Buckets:

mishig's picture
|
download
raw
56.5 kB
# T2I-Adapter
[T2I-Adapter: Learning Adapters to Dig out More Controllable Ability for Text-to-Image Diffusion Models](https://huggingface.co/papers/2302.08453) của Chong Mou, Xintao Wang, Liangbin Xie, Jian Zhang, Zhongang Qi, Ying Shan, Xiaohu Qie.
Sử dụng các mô hình được huấn luyện trước, chúng ta có thể cung cấp các hình ảnh điều khiển (ví dụ, bản đồ độ sâu) để điều khiển quá trình tạo hình ảnh từ văn bản của Stable Diffusion, giúp nó tuân theo cấu trúc của hình ảnh độ sâu và lấp đầy các chi tiết.
Tóm tắt của bài báo như sau:
*Năng lực sinh xuất sắc của các mô hình text-to-image (T2I) quy mô lớn đã chứng minh sức mạnh vượt trội trong việc học các cấu trúc phức tạp và ngữ nghĩa có ý nghĩa. Tuy nhiên, việc chỉ dựa vào các prompt văn bản không thể khai thác hết tri thức mà mô hình đã học được, đặc biệt khi cần kiểm soát linh hoạt và chính xác (ví dụ: màu sắc và cấu trúc). Trong bài báo này, chúng tôi hướng đến việc “khai thác” các khả năng mà các mô hình T2I đã học một cách ẩn, sau đó sử dụng chúng một cách tường minh để kiểm soát quá trình sinh xuất với mức độ chi tiết hơn. Cụ thể, chúng tôi đề xuất việc học các T2I-Adapter đơn giản và nhẹ nhàng để đối chiếu tri thức nội tại trong các mô hình T2I với các tín hiệu kiểm soát bên ngoài, trong khi giữ nguyên (đóng băng) các mô hình T2I lớn ban đầu. Bằng cách này, chúng tôi có thể huấn luyện nhiều adapter khác nhau theo các điều kiện khác nhau, đạt được các hiệu ứng kiểm soát và chỉnh sửa phong phú về màu sắc và cấu trúc của kết quả sinh ra. Hơn nữa, các T2I-Adapter được đề xuất có những đặc tính hấp dẫn mang giá trị thực tiễn, chẳng hạn như khả năng kết hợp (composability) và khả năng tổng quát hóa. Các thí nghiệm rộng rãi cho thấy T2I-Adapter của chúng tôi có chất lượng sinh xuất đầy hứa hẹn và phạm vi ứng dụng rộng rãi.*
Mô hình này được đóng góp bởi cộng tác viên cộng đồng [HimariO](https://github.com/HimariO) ❤️ .
## StableDiffusionAdapterPipeline[[diffusers.StableDiffusionAdapterPipeline]]
#### diffusers.StableDiffusionAdapterPipeline[[diffusers.StableDiffusionAdapterPipeline]]
```python
diffusers.StableDiffusionAdapterPipeline(vae: AutoencoderKL, text_encoder: CLIPTextModel, tokenizer: CLIPTokenizer, unet: UNet2DConditionModel, adapter: diffusers.models.adapter.T2IAdapter | diffusers.models.adapter.MultiAdapter | list[diffusers.models.adapter.T2IAdapter], scheduler: KarrasDiffusionSchedulers, safety_checker: StableDiffusionSafetyChecker, feature_extractor: CLIPImageProcessorPil, requires_safety_checker: bool = True)
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/t2i_adapter/pipeline_stable_diffusion_adapter.py#L191)
**Tham số:**
adapter (`T2IAdapter` hoặc `MultiAdapter` hoặc `list[T2IAdapter]`) : Cung cấp điều kiện bổ sung cho unet trong quá trình khử nhiễu. Nếu bạn đặt nhiều Adapter dưới dạng danh sách, đầu ra từ mỗi Adapter sẽ được cộng lại với nhau để tạo thành một điều kiện bổ sung kết hợp.
adapter_weights (`list[float]`, *optional*, mặc định là None) : danh sách các số float đại diện cho trọng số sẽ được nhân với đầu ra của mỗi adapter trước khi cộng chúng lại với nhau.
vae ([AutoencoderKL](/docs/diffusers/main/vi/api/models/autoencoderkl#diffusers.AutoencoderKL)) : Mô hình Variational Auto-Encoder (VAE) để mã hóa và giải mã hình ảnh sang và từ các biểu diễn ẩn.
text_encoder (`CLIPTextModel`) : Bộ mã hóa văn bản đóng băng. Stable Diffusion sử dụng phần văn bản của [CLIP](https://huggingface.co/docs/transformers/model_doc/clip#transformers.CLIPTextModel), cụ thể là biến thể [clip-vit-large-patch14](https://huggingface.co/openai/clip-vit-large-patch14).
tokenizer (`CLIPTokenizer`) : Tokenizer của lớp [CLIPTokenizer](https://huggingface.co/docs/transformers/v4.21.0/en/model_doc/clip#transformers.CLIPTokenizer).
unet ([UNet2DConditionModel](/docs/diffusers/main/vi/api/models/unet2d-cond#diffusers.UNet2DConditionModel)) : Kiến trúc U-Net có điều kiện để khử nhiễu các ẩn (latents) của ảnh đã mã hóa.
scheduler ([SchedulerMixin](/docs/diffusers/main/vi/api/schedulers/overview#diffusers.SchedulerMixin)) : Một scheduler được sử dụng kết hợp với `unet` để khử nhiễu các latents của ảnh đã mã hóa. Có thể là một trong [DDIMScheduler](/docs/diffusers/main/vi/api/schedulers/ddim#diffusers.DDIMScheduler), [LMSDiscreteScheduler](/docs/diffusers/main/vi/api/schedulers/lms_discrete#diffusers.LMSDiscreteScheduler), hoặc [PNDMScheduler](/docs/diffusers/main/vi/api/schedulers/pndm#diffusers.PNDMScheduler).
safety_checker (`StableDiffusionSafetyChecker`) : Module phân loại ước tính xem hình ảnh được tạo ra có thể bị coi là khiêu khích hoặc gây hại hay không. Vui lòng tham khảo [model card](https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5) để biết thêm chi tiết.
feature_extractor (`CLIPImageProcessor`) : Mô hình trích xuất đặc trưng từ các hình ảnh được tạo ra để sử dụng làm đầu vào cho `safety_checker`.
Pipeline để tạo ảnh từ văn bản sử dụng Stable Diffusion được tăng cường bằng T2I-Adapter https://huggingface.co/papers/2302.08453
Mô hình này kế thừa từ [DiffusionPipeline](/docs/diffusers/main/vi/api/pipelines/overview#diffusers.DiffusionPipeline). Xem tài liệu của lớp cha để biết các phương thức chung mà thư viện triển khai cho tất cả các pipeline (chẳng hạn như tải xuống hoặc lưu, chạy trên một thiết bị cụ thể, v.v.)
#### __call__[[diffusers.StableDiffusionAdapterPipeline.__call__]]
```python
__call__(prompt: str | list[str] = None, image: typing.Union[torch.Tensor, PIL.Image.Image, list[PIL.Image.Image]] = None, height: int | None = None, width: int | None = None, num_inference_steps: int = 50, timesteps: list[int] = None, sigmas: list[float] = None, guidance_scale: float = 7.5, negative_prompt: str | list[str] | None = None, num_images_per_prompt: int | None = 1, eta: float = 0.0, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, output_type: str | None = 'pil', return_dict: bool = True, callback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = None, callback_steps: int = 1, cross_attention_kwargs: dict[str, typing.Any] | None = None, adapter_conditioning_scale: float | list[float] = 1.0, clip_skip: int | None = None)
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/t2i_adapter/pipeline_stable_diffusion_adapter.py#L689)
**Tham số:**
prompt (`str` hoặc `list[str]`, *tùy chọn*) : Prompt hoặc các prompt để hướng dẫn việc tạo ảnh. Nếu không được định nghĩa, bạn phải truyền `prompt_embeds` thay thế.
image (`torch.Tensor`, `PIL.Image.Image`, `list[torch.Tensor]` hoặc `list[PIL.Image.Image]` hoặc `list[list[PIL.Image.Image]]`) : Điều kiện đầu vào của Adapter. Adapter sử dụng điều kiện đầu vào này để tạo ra sự dẫn hướng cho Unet. Nếu kiểu được chỉ định là `torch.Tensor`, nó sẽ được truyền nguyên vẹn cho Adapter. PIL.Image.Image` cũng có thể được chấp nhận như một hình ảnh. Hình ảnh điều khiển sẽ được tự động thay đổi kích thước để phù hợp với hình ảnh đầu ra.
height (`int`, *tuỳ chọn*, mặc định là self.unet.config.sample_size * self.vae_scale_factor) : Chiều cao của hình ảnh được tạo ra, tính bằng pixel.
width (`int`, *tuỳ chọn*, mặc định là self.unet.config.sample_size * self.vae_scale_factor) : Độ rộng tính bằng pixel của hình ảnh được tạo ra.
num_inference_steps (`int`, *optional*, mặc định là 50) : Số bước khử nhiễu. Số bước khử nhiễu nhiều hơn thường dẫn đến hình ảnh có chất lượng cao hơn, với cái giá là suy luận chậm hơn.
timesteps (`list[int]`, *optional*) : Các bước thời gian (timesteps) tùy chỉnh để sử dụng cho quá trình khử nhiễu với các trình lập lịch (scheduler) hỗ trợ tham số `timesteps` trong phương thức `set_timesteps` của chúng. Nếu không được định nghĩa, hành vi mặc định khi `num_inference_steps` được truyền vào sẽ được sử dụng. Phải được sắp xếp theo thứ tự giảm dần.
sigmas (`list[float]`, *optional*) : Các sigma tùy chỉnh để sử dụng cho quá trình khử nhiễu với các trình lập lịch hỗ trợ tham số `sigmas` trong phương thức `set_timesteps` của chúng. Nếu không được định nghĩa, hành vi mặc định khi `num_inference_steps` được truyền vào sẽ được sử dụng.
guidance_scale (`float`, *optional*, mặc định là 7.5) : Thang độ dẫn hướng như được định nghĩa trong [Classifier-Free Diffusion Guidance](https://huggingface.co/papers/2207.12598). `guidance_scale` được định nghĩa là `w` của phương trình 2. trong [Imagen Paper](https://huggingface.co/papers/2205.11487). Thang độ dẫn hướng được kích hoạt bằng cách đặt `guidance_scale > 1`. Thang độ dẫn hướng cao hơn khuyến khích tạo ra các hình ảnh gắn kết chặt chẽ với `prompt` văn bản, thường phải đánh đổi bằng chất lượng hình ảnh thấp hơn.
negative_prompt (`str` hoặc `list[str]`, *tùy chọn*) : Prompt hoặc các prompt không được dùng để hướng dẫn việc tạo ảnh. Nếu không được định nghĩa, bạn phải truyền `negative_prompt_embeds` thay vào đó. Nếu không được định nghĩa, bạn phải truyền `negative_prompt_embeds` thay vào đó. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếu `guidance_scale` nhỏ hơn `1`).
num_images_per_prompt (`int`, *tuỳ chọn*, mặc định là 1) : Số lượng hình ảnh cần tạo cho mỗi prompt.
eta (`float`, *optional*, mặc định là 0.0) : Tương ứng với tham số eta (η) trong bài báo DDIM: https://huggingface.co/papers/2010.02502. Chỉ áp dụng cho [schedulers.DDIMScheduler](/docs/diffusers/main/vi/api/schedulers/ddim#diffusers.DDIMScheduler), sẽ bị bỏ qua với các trình lập lịch khác.
generator (`torch.Generator` hoặc `list[torch.Generator]`, *tùy chọn*) : Một hoặc một danh sách [torch generator](https://pytorch.org/docs/stable/generated/torch.Generator.html) để đảm bảo quá trình sinh là tất định.
latents (`torch.Tensor`, *tùy chọn*) : Các latents nhiễu đã được tạo trước, được lấy mẫu từ phân phối Gaussian, dùng làm đầu vào cho việc tạo ảnh. Có thể được sử dụng để tinh chỉnh cùng một quá trình tạo với các prompt khác nhau. Nếu không được cung cấp, một tensor latents sẽ được tạo ra bằng cách lấy mẫu sử dụng `generator` ngẫu nhiên được cung cấp.
prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các vector nhúng văn bản đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, các vector nhúng văn bản sẽ được tạo từ đối số đầu vào `prompt`.
negative_prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các vector nhúng văn bản âm đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, negative_prompt_embeds sẽ được tạo từ đối số đầu vào `negative_prompt`.
output_type (`str`, *tùy chọn*, mặc định là `"pil"`) : Định dạng đầu ra của hình ảnh được tạo. Chọn giữa [PIL](https://pillow.readthedocs.io/en/stable/): `PIL.Image.Image` hoặc `np.array`.
return_dict (`bool`, *tùy chọn*, mặc định là `True`) : Có nên trả về một `~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput` thay vì một tuple thông thường hay không.
callback (`Callable`, *tùy chọn*) : Một hàm sẽ được gọi mỗi `callback_steps` bước trong quá trình suy luận. Hàm sẽ được gọi với các đối số sau: `callback(step: int, timestep: int, latents: torch.Tensor)`.
callback_steps (`int`, *optional*, mặc định là 1) : Tần suất mà hàm `callback` sẽ được gọi. Nếu không được chỉ định, callback sẽ được gọi ở mỗi bước.
cross_attention_kwargs (`dict`, *tùy chọn*) : Một từ điển kwargs mà nếu được chỉ định sẽ được truyền đến `AttnProcessor` như đã định nghĩa dưới `self.processor` trong [diffusers.models.attention_processor](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py).
adapter_conditioning_scale (`float` hoặc `list[float]`, *tuỳ chọn*, mặc định là 1.0) : Đầu ra của adapter được nhân với `adapter_conditioning_scale` trước khi được cộng vào phần dư trong unet gốc. Nếu nhiều adapter được chỉ định trong init, bạn có thể đặt thang đo tương ứng dưới dạng một danh sách.
clip_skip (`int`, *optional*) : Số lượng lớp cần bỏ qua từ CLIP khi tính toán các prompt embeddings. Giá trị 1 có nghĩa là đầu ra của lớp trước lớp cuối cùng sẽ được sử dụng để tính toán các prompt embeddings.
**Trả về:** `~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput` hoặc `tuple`
`~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput` if `return_dict` is True, otherwise a `tuple. When returning a tuple, the first element is a list with the generated images, and the second element is a list of `bool`s denoting whether the corresponding generated image likely represents "not-safe-for-work" (nsfw) content, according to the `safety_checker`.
Hàm được gọi khi gọi pipeline cho việc sinh.
Ví dụ:
```py
>>> from PIL import Image
>>> from diffusers.utils import load_image
>>> import torch
>>> from diffusers import StableDiffusionAdapterPipeline, T2IAdapter
>>> image = load_image(
... "https://huggingface.co/datasets/diffusers/docs-images/resolve/main/t2i-adapter/color_ref.png"
... )
>>> color_palette = image.resize((8, 8))
>>> color_palette = color_palette.resize((512, 512), resample=Image.Resampling.NEAREST)
>>> adapter = T2IAdapter.from_pretrained("TencentARC/t2iadapter_color_sd14v1", torch_dtype=torch.float16)
>>> pipe = StableDiffusionAdapterPipeline.from_pretrained(
... "CompVis/stable-diffusion-v1-4",
... adapter=adapter,
... torch_dtype=torch.float16,
... )
>>> pipe.to("cuda")
>>> out_image = pipe(
... "At night, glowing cubes in front of the beach",
... image=color_palette,
... ).images[0]
```
#### enable_attention_slicing[[diffusers.StableDiffusionAdapterPipeline.enable_attention_slicing]]
```python
enable_attention_slicing(slice_size: str | int = 'auto')
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/pipeline_utils.py#L2030)
**Tham số:**
slice_size (`str` hoặc `int`, *tuỳ chọn*, mặc định là `"auto"`) : Khi là `"auto"`, sẽ chia đôi đầu vào của các attention head, do đó attention sẽ được tính trong hai bước. Nếu là `"max"`, lượng bộ nhớ tối đa sẽ được tiết kiệm bằng cách chỉ chạy một lát một lúc. Nếu cung cấp một số, sẽ sử dụng nhiều lát bằng `attention_head_dim // slice_size`. Trong trường hợp này, `attention_head_dim` phải là bội số của `slice_size`.
Bật tính toán chú ý dạng lát cắt. Khi tùy chọn này được bật, module chú ý sẽ chia tensor đầu vào thành các lát cắt để tính toán chú ý qua nhiều bước. Với nhiều hơn một đầu chú ý, phép tính được thực hiện tuần tự trên từng đầu. Điều này hữu ích để tiết kiệm một phần bộ nhớ, đổi lại là sự giảm tốc độ nhỏ.
> [!WARNING] > ⚠️ Không bật attention slicing nếu bạn đã đang sử dụng `scaled_dot_product_attention` (SDPA)
từ PyTorch > 2.0 hoặc xFormers. Các phép tính attention này đã rất tiết kiệm bộ nhớ nên bạn không cần bật > chức năng này. Nếu bạn bật attention slicing với SDPA hoặc xFormers, nó có thể dẫn đến việc chậm đi đáng kể!
Ví dụ:
```py
>>> import torch
>>> from diffusers import StableDiffusionPipeline
>>> pipe = StableDiffusionPipeline.from_pretrained(
... "stable-diffusion-v1-5/stable-diffusion-v1-5",
... dtype=torch.float16,
... use_safetensors=True,
... )
>>> prompt = "a photo of an astronaut riding a horse on mars"
>>> pipe.enable_attention_slicing()
>>> image = pipe(prompt).images[0]
```
#### disable_attention_slicing[[diffusers.StableDiffusionAdapterPipeline.disable_attention_slicing]]
```python
disable_attention_slicing()
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/pipeline_utils.py#L2067)
Tắt tính toán chú ý dạng lát cắt. Nếu `enable_attention_slicing` đã được gọi trước đó, chú ý sẽ được tính toán trong một bước duy nhất.
#### enable_xformers_memory_efficient_attention[[diffusers.StableDiffusionAdapterPipeline.enable_xformers_memory_efficient_attention]]
```python
enable_xformers_memory_efficient_attention(attention_op: typing.Optional[typing.Callable] = None)
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/pipeline_utils.py#L1975)
**Tham số:**
attention_op (`Callable`, *tùy chọn*) : Ghi đè toán tử mặc định `None` để sử dụng làm đối số `op` cho hàm [`memory_efficient_attention()`](https://facebookresearch.github.io/xformers/components/ops.html#xformers.ops.memory_efficient_attention) của xFormers.
Bật chú ý tiết kiệm bộ nhớ từ [xFormers](https://facebookresearch.github.io/xformers/). Khi tùy chọn này được bật, bạn nên quan sát thấy mức sử dụng bộ nhớ GPU thấp hơn và có thể tăng tốc trong quá trình suy luận. Việc tăng tốc trong quá trình huấn luyện không được đảm bảo.
> [!WARNING] > ⚠️ Khi cả memory efficient attention và sliced attention đều được bật, memory efficient
attention có > ưu tiên.
Ví dụ:
```py
>>> import torch
>>> from diffusers import DiffusionPipeline
>>> from xformers.ops import MemoryEfficientAttentionFlashAttentionOp
>>> pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1", dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> pipe.enable_xformers_memory_efficient_attention(attention_op=MemoryEfficientAttentionFlashAttentionOp)
>>> # Workaround for not accepting attention shape using VAE for Flash Attention
>>> pipe.vae.enable_xformers_memory_efficient_attention(attention_op=None)
```
#### disable_xformers_memory_efficient_attention[[diffusers.StableDiffusionAdapterPipeline.disable_xformers_memory_efficient_attention]]
```python
disable_xformers_memory_efficient_attention()
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/pipeline_utils.py#L2006)
Tắt chú ý tiết kiệm bộ nhớ từ [xFormers](https://facebookresearch.github.io/xformers/).
#### encode_prompt[[diffusers.StableDiffusionAdapterPipeline.encode_prompt]]
```python
encode_prompt(prompt, device, num_images_per_prompt, do_classifier_free_guidance, negative_prompt = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, lora_scale: float | None = None, clip_skip: int | None = None)
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/t2i_adapter/pipeline_stable_diffusion_adapter.py#L311)
**Tham số:**
prompt (`str` hoặc `list[str]`, *tùy chọn*) : prompt cần được mã hóa
device : (`torch.device`): thiết bị torch
num_images_per_prompt (`int`) : số lượng hình ảnh cần được tạo cho mỗi prompt
do_classifier_free_guidance (`bool`) : có sử dụng classifier free guidance hay không
negative_prompt (`str` hoặc `list[str]`, *tùy chọn*) : Prompt hoặc các prompt không được dùng để hướng dẫn việc tạo ảnh. Nếu không được định nghĩa, bạn phải truyền `negative_prompt_embeds` thay thế. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếu `guidance_scale` nhỏ hơn `1`).
prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các vector nhúng văn bản đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, các vector nhúng văn bản sẽ được tạo từ đối số đầu vào `prompt`.
negative_prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các vector nhúng văn bản âm đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, negative_prompt_embeds sẽ được tạo từ đối số đầu vào `negative_prompt`.
lora_scale (`float`, *tuỳ chọn*) : Thang LoRA sẽ được áp dụng cho tất cả các lớp LoRA của text encoder nếu các lớp LoRA được nạp.
clip_skip (`int`, *optional*) : Số lượng lớp cần bỏ qua từ CLIP khi tính toán các prompt embeddings. Giá trị 1 có nghĩa là đầu ra của lớp trước lớp cuối cùng sẽ được sử dụng để tính toán các prompt embeddings.
Mã hóa prompt thành các trạng thái ẩn của text encoder.
#### get_guidance_scale_embedding[[diffusers.StableDiffusionAdapterPipeline.get_guidance_scale_embedding]]
```python
get_guidance_scale_embedding(w: Tensor, embedding_dim: int = 512, dtype: dtype = torch.float32)
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/t2i_adapter/pipeline_stable_diffusion_adapter.py#L648)
**Tham số:**
w (`torch.Tensor`) : Tạo các vector nhúng với thang độ dẫn hướng được chỉ định để sau đó làm phong phú các nhúng bước thời gian.
embedding_dim (`int`, *tuỳ chọn*, mặc định là 512) : Kích thước của các embedding cần tạo.
dtype (`torch.dtype`, *tùy chọn*, mặc định là `torch.float32`) : Kiểu dữ liệu của các embedding được tạo ra.
**Trả về:** `torch.Tensor`
Các vector nhúng có hình dạng `(len(w), embedding_dim)`.
Xem https://github.com/google-research/vdm/blob/dc27b98a554f65cdc654b800da5aa1846545d41b/model_vdm.py#L298
## StableDiffusionXLAdapterPipeline[[diffusers.StableDiffusionXLAdapterPipeline]]
#### diffusers.StableDiffusionXLAdapterPipeline[[diffusers.StableDiffusionXLAdapterPipeline]]
```python
diffusers.StableDiffusionXLAdapterPipeline(vae: AutoencoderKL, text_encoder: CLIPTextModel, text_encoder_2: CLIPTextModelWithProjection, tokenizer: CLIPTokenizer, tokenizer_2: CLIPTokenizer, unet: UNet2DConditionModel, adapter: diffusers.models.adapter.T2IAdapter | diffusers.models.adapter.MultiAdapter | list[diffusers.models.adapter.T2IAdapter], scheduler: KarrasDiffusionSchedulers, force_zeros_for_empty_prompt: bool = True, feature_extractor: CLIPImageProcessorPil = None, image_encoder: CLIPVisionModelWithProjection = None)
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/t2i_adapter/pipeline_stable_diffusion_xl_adapter.py#L213)
**Tham số:**
adapter (`T2IAdapter` hoặc `MultiAdapter` hoặc `list[T2IAdapter]`) : Cung cấp điều kiện bổ sung cho unet trong quá trình khử nhiễu. Nếu bạn đặt nhiều Adapter dưới dạng danh sách, đầu ra từ mỗi Adapter sẽ được cộng lại với nhau để tạo thành một điều kiện bổ sung kết hợp.
adapter_weights (`list[float]`, *optional*, mặc định là None) : danh sách các số float đại diện cho trọng số sẽ được nhân với đầu ra của mỗi adapter trước khi cộng chúng lại với nhau.
vae ([AutoencoderKL](/docs/diffusers/main/vi/api/models/autoencoderkl#diffusers.AutoencoderKL)) : Mô hình Variational Auto-Encoder (VAE) để mã hóa và giải mã hình ảnh sang và từ các biểu diễn ẩn.
text_encoder (`CLIPTextModel`) : Bộ mã hóa văn bản đóng băng. Stable Diffusion sử dụng phần văn bản của [CLIP](https://huggingface.co/docs/transformers/model_doc/clip#transformers.CLIPTextModel), cụ thể là biến thể [clip-vit-large-patch14](https://huggingface.co/openai/clip-vit-large-patch14).
tokenizer (`CLIPTokenizer`) : Tokenizer của lớp [CLIPTokenizer](https://huggingface.co/docs/transformers/v4.21.0/en/model_doc/clip#transformers.CLIPTokenizer).
unet ([UNet2DConditionModel](/docs/diffusers/main/vi/api/models/unet2d-cond#diffusers.UNet2DConditionModel)) : Kiến trúc U-Net có điều kiện để khử nhiễu các ẩn (latents) của ảnh đã mã hóa.
scheduler ([SchedulerMixin](/docs/diffusers/main/vi/api/schedulers/overview#diffusers.SchedulerMixin)) : Một scheduler được sử dụng kết hợp với `unet` để khử nhiễu các latents của ảnh đã mã hóa. Có thể là một trong [DDIMScheduler](/docs/diffusers/main/vi/api/schedulers/ddim#diffusers.DDIMScheduler), [LMSDiscreteScheduler](/docs/diffusers/main/vi/api/schedulers/lms_discrete#diffusers.LMSDiscreteScheduler), hoặc [PNDMScheduler](/docs/diffusers/main/vi/api/schedulers/pndm#diffusers.PNDMScheduler).
safety_checker (`StableDiffusionSafetyChecker`) : Module phân loại ước tính xem hình ảnh được tạo ra có thể bị coi là khiêu khích hoặc gây hại hay không. Vui lòng tham khảo [model card](https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5) để biết thêm chi tiết.
feature_extractor (`CLIPImageProcessor`) : Mô hình trích xuất đặc trưng từ các hình ảnh được tạo ra để sử dụng làm đầu vào cho `safety_checker`.
Pipeline để tạo ảnh từ văn bản sử dụng Stable Diffusion được tăng cường bằng T2I-Adapter https://huggingface.co/papers/2302.08453
Mô hình này kế thừa từ [DiffusionPipeline](/docs/diffusers/main/vi/api/pipelines/overview#diffusers.DiffusionPipeline). Xem tài liệu của lớp cha để biết các phương thức chung mà thư viện triển khai cho tất cả các pipeline (chẳng hạn như tải xuống hoặc lưu, chạy trên một thiết bị cụ thể, v.v.)
Pipeline cũng kế thừa các phương thức nạp sau:
- [load_textual_inversion()](/docs/diffusers/main/vi/api/loaders/textual_inversion#diffusers.loaders.TextualInversionLoaderMixin.load_textual_inversion) để nạp các embedding textual inversion
- [from_single_file()](/docs/diffusers/main/vi/api/loaders/single_file#diffusers.loaders.FromSingleFileMixin.from_single_file) để tải các tệp `.ckpt`
- [load_lora_weights()](/docs/diffusers/main/vi/api/loaders/lora#diffusers.loaders.StableDiffusionXLLoraLoaderMixin.load_lora_weights) để nạp trọng số LoRA
- [save_lora_weights()](/docs/diffusers/main/vi/api/loaders/lora#diffusers.loaders.StableDiffusionXLLoraLoaderMixin.save_lora_weights) để lưu trọng số LoRA
- [load_ip_adapter()](/docs/diffusers/main/vi/api/loaders/ip_adapter#diffusers.loaders.IPAdapterMixin.load_ip_adapter) để nạp IP Adapters
#### __call__[[diffusers.StableDiffusionXLAdapterPipeline.__call__]]
```python
__call__(prompt: str | list[str] = None, prompt_2: str | list[str] | None = None, image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, height: int | None = None, width: int | None = None, num_inference_steps: int = 50, timesteps: list[int] = None, sigmas: list[float] = None, denoising_end: float | None = None, guidance_scale: float = 5.0, negative_prompt: str | list[str] | None = None, negative_prompt_2: str | list[str] | None = None, num_images_per_prompt: int | None = 1, eta: float = 0.0, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, ip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = None, ip_adapter_image_embeds: list[torch.Tensor] | None = None, output_type: str | None = 'pil', return_dict: bool = True, callback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = None, callback_steps: int = 1, cross_attention_kwargs: dict[str, typing.Any] | None = None, guidance_rescale: float = 0.0, original_size: tuple[int, int] | None = None, crops_coords_top_left: tuple[int, int] = (0, 0), target_size: tuple[int, int] | None = None, negative_original_size: tuple[int, int] | None = None, negative_crops_coords_top_left: tuple[int, int] = (0, 0), negative_target_size: tuple[int, int] | None = None, adapter_conditioning_scale: float | list[float] = 1.0, adapter_conditioning_factor: float = 1.0, clip_skip: int | None = None)
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/t2i_adapter/pipeline_stable_diffusion_xl_adapter.py#L858)
**Tham số:**
prompt (`str` hoặc `list[str]`, *tùy chọn*) : Prompt hoặc các prompt để hướng dẫn việc tạo ảnh. Nếu không được định nghĩa, bạn phải truyền `prompt_embeds` thay thế.
prompt_2 (`str` hoặc `list[str]`, *tùy chọn*) : Prompt hoặc các prompt cần được gửi đến `tokenizer_2` và `text_encoder_2`. Nếu không được định nghĩa, `prompt` sẽ được sử dụng cho cả hai text-encoder
image (`torch.Tensor`, `PIL.Image.Image`, `list[torch.Tensor]` hoặc `list[PIL.Image.Image]` hoặc `list[list[PIL.Image.Image]]`) : Điều kiện đầu vào của Adapter. Adapter sử dụng điều kiện đầu vào này để tạo ra sự dẫn hướng cho Unet. Nếu kiểu được chỉ định là `torch.Tensor`, nó sẽ được truyền nguyên vẹn cho Adapter. PIL.Image.Image` cũng có thể được chấp nhận như một hình ảnh. Hình ảnh điều khiển sẽ được tự động thay đổi kích thước để phù hợp với hình ảnh đầu ra.
height (`int`, *tuỳ chọn*, mặc định là self.unet.config.sample_size * self.vae_scale_factor) : Chiều cao tính bằng pixel của hình ảnh được tạo ra. Bất kỳ giá trị nào dưới 512 pixel sẽ không hoạt động tốt với [stabilityai/stable-diffusion-xl-base-1.0](https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0) và các checkpoint không được tinh chỉnh cụ thể cho độ phân giải thấp.
width (`int`, *tuỳ chọn*, mặc định là self.unet.config.sample_size * self.vae_scale_factor) : Độ rộng tính bằng pixel của hình ảnh được tạo ra. Bất kỳ giá trị nào dưới 512 pixel sẽ không hoạt động tốt với [stabilityai/stable-diffusion-xl-base-1.0](https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0) và các checkpoint không được tinh chỉnh đặc biệt cho độ phân giải thấp.
num_inference_steps (`int`, *optional*, mặc định là 50) : Số bước khử nhiễu. Số bước khử nhiễu nhiều hơn thường dẫn đến hình ảnh có chất lượng cao hơn, với cái giá là suy luận chậm hơn.
timesteps (`list[int]`, *optional*) : Các bước thời gian (timesteps) tùy chỉnh để sử dụng cho quá trình khử nhiễu với các trình lập lịch (scheduler) hỗ trợ tham số `timesteps` trong phương thức `set_timesteps` của chúng. Nếu không được định nghĩa, hành vi mặc định khi `num_inference_steps` được truyền vào sẽ được sử dụng. Phải được sắp xếp theo thứ tự giảm dần.
sigmas (`list[float]`, *optional*) : Các sigma tùy chỉnh để sử dụng cho quá trình khử nhiễu với các trình lập lịch hỗ trợ tham số `sigmas` trong phương thức `set_timesteps` của chúng. Nếu không được định nghĩa, hành vi mặc định khi `num_inference_steps` được truyền vào sẽ được sử dụng.
denoising_end (`float`, *optional*) : Khi được chỉ định, xác định tỷ lệ (từ 0.0 đến 1.0) của toàn bộ quá trình khử nhiễu cần hoàn thành trước khi bị kết thúc sớm một cách có chủ đích. Kết quả là, mẫu được trả về vẫn sẽ giữ lại một lượng nhiễu đáng kể, được xác định bởi các bước thời gian rời rạc do trình lập lịch chọn. Tham số denoising_end lý tưởng nhất nên được sử dụng khi pipeline này là một phần của cấu hình đa pipeline "Mixture of Denoisers", như đã mô tả chi tiết trong [**Refining the Image Output**](https://huggingface.co/docs/diffusers/api/pipelines/stable_diffusion/stable_diffusion_xl#refining-the-image-output)
guidance_scale (`float`, *optional*, mặc định là 5.0) : Thang độ dẫn hướng như được định nghĩa trong [Classifier-Free Diffusion Guidance](https://huggingface.co/papers/2207.12598). `guidance_scale` được định nghĩa là `w` của phương trình 2. trong [Imagen Paper](https://huggingface.co/papers/2205.11487). Thang độ dẫn hướng được kích hoạt bằng cách đặt `guidance_scale > 1`. Thang độ dẫn hướng cao hơn khuyến khích tạo ra các hình ảnh gắn kết chặt chẽ với `prompt` văn bản, thường phải đánh đổi bằng chất lượng hình ảnh thấp hơn.
negative_prompt (`str` hoặc `list[str]`, *tùy chọn*) : Prompt hoặc các prompt không được dùng để hướng dẫn việc tạo ảnh. Nếu không được định nghĩa, bạn phải truyền `negative_prompt_embeds` thay thế. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếu `guidance_scale` nhỏ hơn `1`).
negative_prompt_2 (`str` hoặc `list[str]`, *tùy chọn*) : Prompt hoặc các prompt không dùng để hướng dẫn tạo ảnh, sẽ được gửi đến `tokenizer_2` và `text_encoder_2`. Nếu không được định nghĩa, `negative_prompt` sẽ được sử dụng cho cả hai text-encoder
num_images_per_prompt (`int`, *tuỳ chọn*, mặc định là 1) : Số lượng hình ảnh cần tạo cho mỗi prompt.
eta (`float`, *optional*, mặc định là 0.0) : Tương ứng với tham số eta (η) trong bài báo DDIM: https://huggingface.co/papers/2010.02502. Chỉ áp dụng cho [schedulers.DDIMScheduler](/docs/diffusers/main/vi/api/schedulers/ddim#diffusers.DDIMScheduler), sẽ bị bỏ qua với các trình lập lịch khác.
generator (`torch.Generator` hoặc `list[torch.Generator]`, *tùy chọn*) : Một hoặc một danh sách [torch generator](https://pytorch.org/docs/stable/generated/torch.Generator.html) để đảm bảo quá trình sinh là tất định.
latents (`torch.Tensor`, *tùy chọn*) : Các latents nhiễu đã được tạo trước, được lấy mẫu từ phân phối Gaussian, dùng làm đầu vào cho việc tạo ảnh. Có thể được sử dụng để tinh chỉnh cùng một quá trình tạo với các prompt khác nhau. Nếu không được cung cấp, một tensor latents sẽ được tạo ra bằng cách lấy mẫu sử dụng `generator` ngẫu nhiên được cung cấp.
prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các vector nhúng văn bản đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, các vector nhúng văn bản sẽ được tạo từ đối số đầu vào `prompt`.
negative_prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các vector nhúng văn bản âm đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, negative_prompt_embeds sẽ được tạo từ đối số đầu vào `negative_prompt`.
pooled_prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các embedding văn bản đã được pool sẵn. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, các embedding văn bản đã pool sẽ được tạo từ đối số đầu vào `prompt`.
negative_pooled_prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các embedding văn bản pooled âm đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, pooled negative_prompt_embeds sẽ được tạo từ đối số đầu vào `negative_prompt`.
ip_adapter_image : (`PipelineImageInput`, *tùy chọn*): Đầu vào hình ảnh tùy chọn để làm việc với IP Adapters.
ip_adapter_image_embeds (`list[torch.Tensor]`, *tùy chọn*) : Các embedding ảnh đã tạo trước cho IP-Adapter. Nó phải là một danh sách có độ dài bằng với số lượng IP-adapter. Mỗi phần tử phải là một tensor có hình dạng `(batch_size, num_images, emb_dim)`. Nó phải chứa embedding ảnh âm nếu `do_classifier_free_guidance` được đặt thành `True`. Nếu không được cung cấp, các embedding sẽ được tính toán từ đối số đầu vào `ip_adapter_image`.
output_type (`str`, *tùy chọn*, mặc định là `"pil"`) : Định dạng đầu ra của hình ảnh được tạo. Chọn giữa [PIL](https://pillow.readthedocs.io/en/stable/): `PIL.Image.Image` hoặc `np.array`.
return_dict (`bool`, *tùy chọn*, mặc định là `True`) : Có nên trả về một `~pipelines.stable_diffusion_xl.StableDiffusionAdapterPipelineOutput` thay vì một tuple thông thường hay không.
callback (`Callable`, *tùy chọn*) : Một hàm sẽ được gọi mỗi `callback_steps` bước trong quá trình suy luận. Hàm sẽ được gọi với các đối số sau: `callback(step: int, timestep: int, latents: torch.Tensor)`.
callback_steps (`int`, *optional*, mặc định là 1) : Tần suất mà hàm `callback` sẽ được gọi. Nếu không được chỉ định, callback sẽ được gọi ở mỗi bước.
cross_attention_kwargs (`dict`, *tùy chọn*) : Một từ điển kwargs mà nếu được chỉ định sẽ được truyền đến `AttentionProcessor` như đã định nghĩa dưới `self.processor` trong [diffusers.models.attention_processor](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py).
guidance_rescale (`float`, *tuỳ chọn*, mặc định là 0.0) : Hệ số rescale guidance được đề xuất bởi [Common Diffusion Noise Schedules and Sample Steps are Flawed](https://huggingface.co/papers/2305.08891) `guidance_scale` được định nghĩa là `φ` trong phương trình 16. của [Common Diffusion Noise Schedules and Sample Steps are Flawed](https://huggingface.co/papers/2305.08891). Hệ số rescale guidance nên khắc phục hiện tượng phơi sáng quá mức khi sử dụng zero terminal SNR.
original_size (`tuple[int]`, *optional*, mặc định là (1024, 1024)) : Nếu `original_size` không giống với `target_size`, hình ảnh sẽ có vẻ được giảm hoặc tăng mẫu. `original_size` mặc định là `(height, width)` nếu không được chỉ định. Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952).
crops_coords_top_left (`tuple[int]`, *optional*, mặc định là (0, 0)) : `crops_coords_top_left` có thể được dùng để tạo ra một hình ảnh trông như đã được "cắt" từ vị trí `crops_coords_top_left` trở xuống. Các hình ảnh đẹp, được căn giữa tốt thường đạt được bằng cách đặt `crops_coords_top_left` thành (0, 0). Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952).
target_size (`tuple[int]`, *optional*, mặc định là (1024, 1024)) : Trong hầu hết các trường hợp, `target_size` nên được đặt thành chiều cao và chiều rộng mong muốn của hình ảnh được tạo ra. Nếu không được chỉ định, giá trị mặc định sẽ là `(height, width)`. Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952). mục 2.2 của [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952).
negative_original_size (`tuple[int]`, *optional*, mặc định là (1024, 1024)) : Để điều kiện âm quá trình tạo dựa trên độ phân giải hình ảnh cụ thể. Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952). Để biết thêm thông tin, hãy tham khảo luồng vấn đề này: https://github.com/huggingface/diffusers/issues/4208.
negative_crops_coords_top_left (`tuple[int]`, *optional*, mặc định là (0, 0)) : Để điều kiện âm quá trình tạo dựa trên tọa độ cắt cụ thể. Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952). Để biết thêm thông tin, hãy tham khảo luồng vấn đề này: https://github.com/huggingface/diffusers/issues/4208.
negative_target_size (`tuple[int]`, *optional*, mặc định là (1024, 1024)) : Để điều kiện âm quá trình tạo dựa trên độ phân giải ảnh mục tiêu. Trong hầu hết các trường hợp, nó nên giống với `target_size`. Đây là một phần của micro-conditioning của SDXL như được giải thích trong mục 2.2 của [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952). Để biết thêm thông tin, hãy tham khảo luồng issue này: https://github.com/huggingface/diffusers/issues/4208.
adapter_conditioning_scale (`float` hoặc `list[float]`, *tuỳ chọn*, mặc định là 1.0) : Đầu ra của adapter được nhân với `adapter_conditioning_scale` trước khi được cộng vào phần dư trong unet gốc. Nếu nhiều adapter được chỉ định trong init, bạn có thể đặt thang đo tương ứng dưới dạng một danh sách.
adapter_conditioning_factor (`float`, *optional*, mặc định là 1.0) : Tỷ lệ các bước thời gian mà adapter nên được áp dụng. Nếu `adapter_conditioning_factor` là `0.0`, adapter sẽ không được áp dụng. Nếu `adapter_conditioning_factor` là `1.0`, adapter sẽ được áp dụng cho tất cả các bước thời gian. Nếu `adapter_conditioning_factor` là `0.5`, adapter sẽ được áp dụng cho một nửa số bước thời gian.
clip_skip (`int`, *optional*) : Số lượng lớp cần bỏ qua từ CLIP khi tính toán các prompt embeddings. Giá trị 1 có nghĩa là đầu ra của lớp trước lớp cuối cùng sẽ được sử dụng để tính toán các prompt embeddings.
**Trả về:** `~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput` hoặc `tuple`
`~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput` nếu `return_dict` là True, ngược lại là một `tuple`. Khi trả về tuple, phần tử đầu tiên là một danh sách chứa các hình ảnh đã tạo.
Hàm được gọi khi gọi pipeline cho việc sinh.
Ví dụ:
```py
>>> import torch
>>> from diffusers import T2IAdapter, StableDiffusionXLAdapterPipeline, DDPMScheduler
>>> from diffusers.utils import load_image
>>> sketch_image = load_image("https://huggingface.co/Adapter/t2iadapter/resolve/main/sketch.png").convert("L")
>>> model_id = "stabilityai/stable-diffusion-xl-base-1.0"
>>> adapter = T2IAdapter.from_pretrained(
... "Adapter/t2iadapter",
... subfolder="sketch_sdxl_1.0",
... torch_dtype=torch.float16,
... adapter_type="full_adapter_xl",
... )
>>> scheduler = DDPMScheduler.from_pretrained(model_id, subfolder="scheduler")
>>> pipe = StableDiffusionXLAdapterPipeline.from_pretrained(
... model_id, adapter=adapter, torch_dtype=torch.float16, variant="fp16", scheduler=scheduler
... ).to("cuda")
>>> generator = torch.manual_seed(42)
>>> sketch_image_out = pipe(
... prompt="a photo of a dog in real world, high quality",
... negative_prompt="extra digit, fewer digits, cropped, worst quality, low quality",
... image=sketch_image,
... generator=generator,
... guidance_scale=7.5,
... ).images[0]
```
#### enable_attention_slicing[[diffusers.StableDiffusionXLAdapterPipeline.enable_attention_slicing]]
```python
enable_attention_slicing(slice_size: str | int = 'auto')
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/pipeline_utils.py#L2030)
**Tham số:**
slice_size (`str` hoặc `int`, *tuỳ chọn*, mặc định là `"auto"`) : Khi là `"auto"`, sẽ chia đôi đầu vào của các attention head, do đó attention sẽ được tính trong hai bước. Nếu là `"max"`, lượng bộ nhớ tối đa sẽ được tiết kiệm bằng cách chỉ chạy một lát một lúc. Nếu cung cấp một số, sẽ sử dụng nhiều lát bằng `attention_head_dim // slice_size`. Trong trường hợp này, `attention_head_dim` phải là bội số của `slice_size`.
Bật tính toán chú ý dạng lát cắt. Khi tùy chọn này được bật, module chú ý sẽ chia tensor đầu vào thành các lát cắt để tính toán chú ý qua nhiều bước. Với nhiều hơn một đầu chú ý, phép tính được thực hiện tuần tự trên từng đầu. Điều này hữu ích để tiết kiệm một phần bộ nhớ, đổi lại là sự giảm tốc độ nhỏ.
> [!WARNING] > ⚠️ Không bật attention slicing nếu bạn đã đang sử dụng `scaled_dot_product_attention` (SDPA)
từ PyTorch > 2.0 hoặc xFormers. Các phép tính attention này đã rất tiết kiệm bộ nhớ nên bạn không cần bật > chức năng này. Nếu bạn bật attention slicing với SDPA hoặc xFormers, nó có thể dẫn đến việc chậm đi đáng kể!
Ví dụ:
```py
>>> import torch
>>> from diffusers import StableDiffusionPipeline
>>> pipe = StableDiffusionPipeline.from_pretrained(
... "stable-diffusion-v1-5/stable-diffusion-v1-5",
... dtype=torch.float16,
... use_safetensors=True,
... )
>>> prompt = "a photo of an astronaut riding a horse on mars"
>>> pipe.enable_attention_slicing()
>>> image = pipe(prompt).images[0]
```
#### disable_attention_slicing[[diffusers.StableDiffusionXLAdapterPipeline.disable_attention_slicing]]
```python
disable_attention_slicing()
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/pipeline_utils.py#L2067)
Tắt tính toán chú ý dạng lát cắt. Nếu `enable_attention_slicing` đã được gọi trước đó, chú ý sẽ được tính toán trong một bước duy nhất.
#### enable_xformers_memory_efficient_attention[[diffusers.StableDiffusionXLAdapterPipeline.enable_xformers_memory_efficient_attention]]
```python
enable_xformers_memory_efficient_attention(attention_op: typing.Optional[typing.Callable] = None)
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/pipeline_utils.py#L1975)
**Tham số:**
attention_op (`Callable`, *tùy chọn*) : Ghi đè toán tử mặc định `None` để sử dụng làm đối số `op` cho hàm [`memory_efficient_attention()`](https://facebookresearch.github.io/xformers/components/ops.html#xformers.ops.memory_efficient_attention) của xFormers.
Bật chú ý tiết kiệm bộ nhớ từ [xFormers](https://facebookresearch.github.io/xformers/). Khi tùy chọn này được bật, bạn nên quan sát thấy mức sử dụng bộ nhớ GPU thấp hơn và có thể tăng tốc trong quá trình suy luận. Việc tăng tốc trong quá trình huấn luyện không được đảm bảo.
> [!WARNING] > ⚠️ Khi cả memory efficient attention và sliced attention đều được bật, memory efficient
attention có > ưu tiên.
Ví dụ:
```py
>>> import torch
>>> from diffusers import DiffusionPipeline
>>> from xformers.ops import MemoryEfficientAttentionFlashAttentionOp
>>> pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1", dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> pipe.enable_xformers_memory_efficient_attention(attention_op=MemoryEfficientAttentionFlashAttentionOp)
>>> # Workaround for not accepting attention shape using VAE for Flash Attention
>>> pipe.vae.enable_xformers_memory_efficient_attention(attention_op=None)
```
#### disable_xformers_memory_efficient_attention[[diffusers.StableDiffusionXLAdapterPipeline.disable_xformers_memory_efficient_attention]]
```python
disable_xformers_memory_efficient_attention()
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/pipeline_utils.py#L2006)
Tắt chú ý tiết kiệm bộ nhớ từ [xFormers](https://facebookresearch.github.io/xformers/).
#### encode_prompt[[diffusers.StableDiffusionXLAdapterPipeline.encode_prompt]]
```python
encode_prompt(prompt: str, prompt_2: str | None = None, device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, do_classifier_free_guidance: bool = True, negative_prompt: str | None = None, negative_prompt_2: str | None = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, lora_scale: float | None = None, clip_skip: int | None = None)
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/t2i_adapter/pipeline_stable_diffusion_xl_adapter.py#L311)
**Tham số:**
prompt (`str` hoặc `list[str]`, *tùy chọn*) : prompt cần được mã hóa
prompt_2 (`str` hoặc `list[str]`, *tùy chọn*) : Prompt hoặc các prompt cần được gửi đến `tokenizer_2` và `text_encoder_2`. Nếu không được định nghĩa, `prompt` sẽ được sử dụng cho cả hai text-encoder
device : (`torch.device`): thiết bị torch
num_images_per_prompt (`int`) : số lượng hình ảnh cần được tạo cho mỗi prompt
do_classifier_free_guidance (`bool`) : có sử dụng classifier free guidance hay không
negative_prompt (`str` hoặc `list[str]`, *tùy chọn*) : Prompt hoặc các prompt không được dùng để hướng dẫn việc tạo ảnh. Nếu không được định nghĩa, bạn phải truyền `negative_prompt_embeds` thay thế. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếu `guidance_scale` nhỏ hơn `1`).
negative_prompt_2 (`str` hoặc `list[str]`, *tùy chọn*) : Prompt hoặc các prompt không dùng để hướng dẫn tạo ảnh, sẽ được gửi đến `tokenizer_2` và `text_encoder_2`. Nếu không được định nghĩa, `negative_prompt` sẽ được sử dụng cho cả hai text-encoder
prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các vector nhúng văn bản đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, các vector nhúng văn bản sẽ được tạo từ đối số đầu vào `prompt`.
negative_prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các vector nhúng văn bản âm đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, negative_prompt_embeds sẽ được tạo từ đối số đầu vào `negative_prompt`.
pooled_prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các embedding văn bản đã được pool sẵn. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, các embedding văn bản đã pool sẽ được tạo từ đối số đầu vào `prompt`.
negative_pooled_prompt_embeds (`torch.Tensor`, *tùy chọn*) : Các embedding văn bản pooled âm đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản, *vd.* trọng số prompt. Nếu không được cung cấp, pooled negative_prompt_embeds sẽ được tạo từ đối số đầu vào `negative_prompt`.
lora_scale (`float`, *tuỳ chọn*) : Một hệ số lora sẽ được áp dụng cho tất cả các lớp LoRA của text encoder nếu các lớp LoRA được nạp.
clip_skip (`int`, *optional*) : Số lượng lớp cần bỏ qua từ CLIP khi tính toán các prompt embeddings. Giá trị 1 có nghĩa là đầu ra của lớp trước lớp cuối cùng sẽ được sử dụng để tính toán các prompt embeddings.
Mã hóa prompt thành các trạng thái ẩn của text encoder.
#### get_guidance_scale_embedding[[diffusers.StableDiffusionXLAdapterPipeline.get_guidance_scale_embedding]]
```python
get_guidance_scale_embedding(w: Tensor, embedding_dim: int = 512, dtype: dtype = torch.float32)
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/t2i_adapter/pipeline_stable_diffusion_xl_adapter.py#L817)
**Tham số:**
w (`torch.Tensor`) : Tạo các vector nhúng với thang độ dẫn hướng được chỉ định để sau đó làm phong phú các nhúng bước thời gian.
embedding_dim (`int`, *tuỳ chọn*, mặc định là 512) : Kích thước của các embedding cần tạo.
dtype (`torch.dtype`, *tùy chọn*, mặc định là `torch.float32`) : Kiểu dữ liệu của các embedding được tạo ra.
**Trả về:** `torch.Tensor`
Các vector nhúng có hình dạng `(len(w), embedding_dim)`.
Xem https://github.com/google-research/vdm/blob/dc27b98a554f65cdc654b800da5aa1846545d41b/model_vdm.py#L298

Xet Storage Details

Size:
56.5 kB
·
Xet hash:
bde4bf20a30e904094e978750346bdccee1a380e1ad43e41dbb6192344a7b7e3

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