Diffusers documentation
Biến thể hình ảnh
Biến thể hình ảnh
Mô hình Stable Diffusion cũng có thể tạo ra các biến thể từ một hình ảnh đầu vào. Nó sử dụng một phiên bản tinh chỉnh của mô hình Stable Diffusion do Justin Pinkney từ Lambda phát triển.
Mã nguồn gốc có thể được tìm thấy tại LambdaLabsML/lambda-diffusers và các checkpoint chính thức bổ sung cho image variation có thể được tìm thấy tại lambdalabs/sd-image-variations-diffusers.
Hãy chắc chắn xem qua phần Mẹo của Stable Diffusion để tìm hiểu cách khám phá sự đánh đổi giữa tốc độ và chất lượng của scheduler, cũng như cách tái sử dụng các thành phần pipeline một cách hiệu quả!
StableDiffusionImageVariationPipeline
lớp diffusers.StableDiffusionImageVariationPipeline
< source >( vae: AutoencoderKLimage_encoder: CLIPVisionModelWithProjectionunet: UNet2DConditionModelscheduler: KarrasDiffusionSchedulerssafety_checker: StableDiffusionSafetyCheckerfeature_extractor: CLIPImageProcessorPilrequires_safety_checker: bool = True )
Tham số
- vae (AutoencoderKL) — Mô hình Variational Auto-Encoder (VAE) để mã hóa và giải mã hình ảnh từ và sang các biểu diễn ẩn.
- image_encoder (CLIPVisionModelWithProjection) — Bộ mã hóa ảnh CLIP được đóng băng (clip-vit-large-patch14).
- text_encoder (CLIPTextModel) — Bộ mã hóa văn bản đóng băng (clip-vit-large-patch14).
- tokenizer (CLIPTokenizer) —
Một
CLIPTokenizerđể tách token cho văn bản. - unet (UNet2DConditionModel) —
Một
UNet2DConditionModelđể khử nhiễu các latents ảnh đã mã hóa. - scheduler (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, LMSDiscreteScheduler, hoặc PNDMScheduler. - safety_checker (
StableDiffusionSafetyChecker) — Module phân loại ước lượng xem hình ảnh được tạo ra có thể bị coi là khiêu dâm hoặc gây hại hay không. Vui lòng tham khảo model card để biết thêm chi tiết về các tác hại tiềm ẩn của model. - feature_extractor (CLIPImageProcessor) —
Một
CLIPImageProcessorđể trích xuất đặc trưng từ các hình ảnh được tạo ra; được dùng làm đầu vào chosafety_checker.
Pipeline để tạo ra các biến thể hình ảnh từ một hình ảnh đầu vào sử dụng Stable Diffusion.
Mô hình này kế thừa từ DiffusionPipeline. Xem tài liệu của lớp cha để biết các phương thức chung được triển khai cho tất cả các pipeline (tải xuống, lưu, chạy trên một thiết bị cụ thể, v.v.).
__call__
< source >( image: typing.Union[PIL.Image.Image, list[PIL.Image.Image], torch.Tensor]height: int | None = Nonewidth: int | None = Nonenum_inference_steps: int = 50guidance_scale: float = 7.5num_images_per_prompt: int | None = 1eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecallback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = Nonecallback_steps: int = 1 ) → StableDiffusionPipelineOutput or tuple
Tham số
- image (
PIL.Image.Imagehoặclist[PIL.Image.Image]hoặctorch.Tensor) — Hình ảnh hoặc các hình ảnh để hướng dẫn việc tạo hình ảnh. Nếu bạn cung cấp một tensor, nó cần phải tương thích vớiCLIPImageProcessor. - height (
int, tùy 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, tùy chọn, mặc định làself.unet.config.sample_size * self.vae_scale_factor) — Chiều rộng của hình ảnh được tạo ra, tính bằng pixel. - num_inference_steps (
int, tùy chọn, 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 chi phí là suy luận chậm hơn. Tham số này được điều chỉnh bởistrength. - guidance_scale (
float, tùy chọn, mặc định là 7.5) — Giá trị guidance scale cao hơn khuyến khích mô hình tạo ra các hình ảnh gắn kết chặt chẽ vớipromptvăn bản, với cái giá là chất lượng hình ảnh thấp hơn. Guidance scale được kích hoạt khiguidance_scale > 1. - num_images_per_prompt (
int, tùy chọn, mặc định là 1) — Số lượng hình ảnh cần tạo cho mỗi prompt. - eta (
float, tùy chọn, mặc định là 0.0) — Tương ứng với tham số eta (η) trong bài báo DDIM. Chỉ áp dụng cho DDIMScheduler và bị bỏ qua ở các scheduler khác. - generator (
torch.Generatorhoặclist[torch.Generator], tùy chọn) — Mộttorch.Generatorđể làm cho quá trình sinh ra kết quả xác định. - latents (
torch.Tensor, tùy chọn) — Các latents nhiễu đã được tạo trướ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ể 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 bằng cách lấy mẫu sử dụnggeneratorngẫu nhiên được cung cấp. - 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 ra. Chọn giữaPIL.Imagehoặcnp.array. - return_dict (
bool, tùy chọn, mặc định làTrue) — Có nên trả về một StableDiffusionPipelineOutput thay vì một tuple thông thường hay không. - callback (
Callable, tùy chọn) — Một hàm được gọi mỗicallback_stepsbước trong quá trình suy luận. Hàm này được gọi với các đối số sau:callback(step: int, timestep: int, latents: torch.Tensor). - callback_steps (
int, tùy chọn, mặc định là 1) — Tần suất gọi hàmcallback. Nếu không được chỉ định, callback sẽ được gọi ở mỗi bước.
Trả về
StableDiffusionPipelineOutput hoặc tuple
Nếu return_dict là True, StableDiffusionPipelineOutput sẽ được trả về,
ngoài ra một tuple sẽ được trả về trong đó phần tử đầu tiên là một danh sách chứa các hình ảnh được tạo và phần tử
thứ hai là một danh sách các bool cho biết hình ảnh được tạo tương ứng có chứa nội dung
“không an toàn” (nsfw) hay không.
Hàm gọi call của pipeline để tạo nội dung.
Ví dụ:
from diffusers import StableDiffusionImageVariationPipeline
from PIL import Image
from io import BytesIO
import requests
pipe = StableDiffusionImageVariationPipeline.from_pretrained(
"lambdalabs/sd-image-variations-diffusers", revision="v2.0"
)
pipe = pipe.to("cuda")
url = "https://lh3.googleusercontent.com/y-iFOHfLTwkuQSUegpwDdgKmOjRSTvPxat63dQLB25xkTs4lhIbRUFeNBWZzYf370g=s1200"
response = requests.get(url)
image = Image.open(BytesIO(response.content)).convert("RGB")
out = pipe(image, num_images_per_prompt=3, guidance_scale=15)
out["images"][0].save("result.jpg")enable_attention_slicing
< source >( slice_size: str | int = 'auto' )
Tham số
- slice_size (
strhoặcint, tùy chọn, mặc định là"auto") — Khi là"auto", đầu vào cho các attention heads sẽ được chia đôi, do đó attention sẽ được tính trong hai bước. Nếu là"max", lượng bộ nhớ được tiết kiệm tối đa bằng cách chỉ chạy một slice tại một thời điểm. Nếu cung cấp một số, số lượng slice sẽ bằngattention_head_dim // slice_size. Trong trường hợp này,attention_head_dimphải là bội số củaslice_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ỏ.
> ⚠️ 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 hiệu quả về bộ nhớ nên bạn sẽ không cần bật > chức năng này. Nếu bật attention slicing cùng với SDPA hoặc xFormers, nó có thể gây ra sự giảm tốc độ nghiêm trọng!
Ví dụ:
>>> 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]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
< source >( attention_op: typing.Optional[typing.Callable] = None )
Tham số
- attention_op (
Callable, tùy chọn) — Ghi đè toán tử mặc địnhNoneđể sử dụng làm đối sốopcho hàmmemory_efficient_attention()của xFormers.
Bật chú ý tiết kiệm bộ nhớ từ 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.
> ⚠️ Khi cả memory efficient attention và sliced attention đều được bật, memory efficient attention sẽ có > ưu tiên.
Ví dụ:
>>> 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)Tắt chú ý tiết kiệm bộ nhớ từ xFormers.
StableDiffusionPipelineOutput
lớp diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput
< source >( images: list[PIL.Image.Image] | numpy.ndarraynsfw_content_detected: list[bool] | None )
Tham số
- images (
list[PIL.Image.Image]hoặcnp.ndarray) — danh sách các hình ảnh PIL đã khử nhiễu có độ dàibatch_sizehoặc mảng NumPy có hình dạng(batch_size, height, width, num_channels). - nsfw_content_detected (
list[bool]) — danh sách cho biết hình ảnh tương ứng có chứa nội dung “không an toàn” (nsfw) hay không, hoặcNonenếu không thể thực hiện kiểm tra an toàn.
Lớp đầu ra cho các pipeline Stable Diffusion.