Diffusers documentation
Các pipeline Stable Diffusion
Các pipeline Stable Diffusion
Stable Diffusion là mô hình khuếch tán tiềm ẩn (latent diffusion) từ văn bản sang hình ảnh do các nhà nghiên cứu và kỹ sư từ CompVis, Stability AI và LAION tạo ra. Khuếch tán tiềm ẩn áp dụng quá trình khuếch tán trên không gian tiềm ẩn có số chiều thấp hơn để giảm độ phức tạp về bộ nhớ và tính toán. Loại mô hình khuếch tán cụ thể này được đề xuất trong High-Resolution Image Synthesis with Latent Diffusion Models bởi Robin Rombach, Andreas Blattmann, Dominik Lorenz, Patrick Esser, Björn Ommer.
Stable Diffusion được huấn luyện trên các ảnh 512x512 từ một tập con của bộ dữ liệu LAION-5B. Mô hình này sử dụng text encoder CLIP ViT-L/14 đã đóng băng để điều kiện hóa mô hình dựa trên các text prompt. Với UNet 860M và text encoder 123M, mô hình tương đối nhẹ và có thể chạy trên các GPU dành cho người tiêu dùng.
Để biết thêm chi tiết về cách Stable Diffusion hoạt động và cách nó khác biệt so với mô hình latent diffusion cơ bản, hãy xem thông báo của Stability AI và bài viết trên blog của chúng tôi để có thêm thông tin kỹ thuật.
Bạn có thể tìm thấy mã nguồn gốc của Stable Diffusion v1.0 tại CompVis/stable-diffusion và Stable Diffusion v2.0 tại Stability-AI/stablediffusion cùng với các script gốc của chúng cho nhiều tác vụ khác nhau. Các checkpoint chính thức bổ sung cho các phiên bản và tác vụ khác nhau của Stable Diffusion có thể được tìm thấy trên các tổ chức CompVis và Stability AI trên Hub. Hãy khám phá các tổ chức này để tìm checkpoint phù hợp nhất cho trường hợp sử dụng của bạn!
Bảng dưới đây tóm tắt các pipeline Stable Diffusion khả dụng, các tác vụ được hỗ trợ và một demo tương tác:
| Pipeline | Các tác vụ được hỗ trợ | 🤗 Space |
|---|---|---|
| StableDiffusion | text-to-image | |
| StableDiffusionImg2Img | image-to-image | |
| StableDiffusionInpaint | inpainting | |
| StableDiffusionDepth2Img | depth-to-image | |
| StableDiffusionImageVariation | biến thể hình ảnh | |
| StableDiffusionPipelineSafe (không còn được hỗ trợ; không có trang tài liệu) | chuyển văn bản thành ảnh đã lọc | |
| StableDiffusion2 | tạo ảnh từ văn bản, inpainting, tạo ảnh từ độ sâu, siêu phân giải | |
| StableDiffusionXL | text-to-image, image-to-image | |
| StableDiffusionLatentUpscale | super-resolution | |
| StableDiffusionUpscale | super-resolution | |
| StableDiffusionLDM3D | tạo ảnh màu từ văn bản, tạo ảnh độ sâu từ văn bản, tạo ảnh toàn cảnh từ văn bản | |
| StableDiffusionUpscaleLDM3D | ldm3d siêu phân giải |
Mẹo
Để giúp bạn tận dụng tối đa các pipeline của Stable Diffusion, dưới đây là một số mẹo để cải thiện hiệu suất và khả năng sử dụng. Các mẹo này áp dụng cho tất cả các pipeline của Stable Diffusion.
Khám phá sự đánh đổi giữa tốc độ và chất lượng
StableDiffusionPipeline sử dụng PNDMScheduler theo mặc định, nhưng 🤗 Diffusers cung cấp nhiều scheduler khác (một số nhanh hơn hoặc cho chất lượng đầu ra tốt hơn) tương thích. Ví dụ, nếu bạn muốn sử dụng EulerDiscreteScheduler thay vì mặc định:
from diffusers import StableDiffusionPipeline, EulerDiscreteScheduler
pipeline = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4")
pipeline.scheduler = EulerDiscreteScheduler.from_config(pipeline.scheduler.config)
# or
euler_scheduler = EulerDiscreteScheduler.from_pretrained("CompVis/stable-diffusion-v1-4", subfolder="scheduler")
pipeline = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", scheduler=euler_scheduler)Tái sử dụng các thành phần pipeline để tiết kiệm bộ nhớ
Để tiết kiệm bộ nhớ và sử dụng cùng các thành phần cho nhiều pipeline khác nhau, hãy dùng phương thức .components để tránh nạp trọng số vào RAM nhiều hơn một lần.
from diffusers import (
StableDiffusionPipeline,
StableDiffusionImg2ImgPipeline,
StableDiffusionInpaintPipeline,
)
text2img = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4")
img2img = StableDiffusionImg2ImgPipeline(**text2img.components)
inpaint = StableDiffusionInpaintPipeline(**text2img.components)
# now you can use text2img(...), img2img(...), inpaint(...) just like the call methods of each respective pipelineTạo demo web bằng gradio
Các pipeline Stable Diffusion được hỗ trợ tự động trong Gradio, một thư viện giúp việc tạo các ứng dụng machine learning trên web đẹp mắt và thân thiện với người dùng trở nên dễ dàng. Trước tiên, hãy đảm bảo bạn đã cài đặt Gradio:
pip install -U gradio
Sau đó, hãy tạo một demo web xung quanh bất kỳ pipeline nào dựa trên Stable Diffusion. Ví dụ, bạn có thể tạo một pipeline tạo ảnh chỉ với một dòng mã bằng cách sử dụng hàm Interface.from_pipeline của Gradio:
from diffusers import StableDiffusionPipeline
import gradio as gr
pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4")
gr.Interface.from_pipeline(pipe).launch()mở ra một giao diện kéo-thả trực quan trong trình duyệt của bạn:

Tương tự, bạn có thể tạo một demo cho pipeline image-to-image với:
from diffusers import StableDiffusionImg2ImgPipeline
import gradio as gr
pipe = StableDiffusionImg2ImgPipeline.from_pretrained("stable-diffusion-v1-5/stable-diffusion-v1-5")
gr.Interface.from_pipeline(pipe).launch()Mặc định, bản demo web chạy trên một máy chủ cục bộ. Nếu bạn muốn chia sẻ với người khác, bạn có thể tạo một liên kết công khai tạm thời bằng cách đặt share=True trong launch(). Hoặc, bạn có thể lưu trữ demo của mình trên Hugging Face Spaceshttps://huggingface.co/spaces để có một liên kết vĩnh viễn.