# Stable Diffusion 2

Stable Diffusion 2 là một mô hình _latent diffusion_ từ văn bản sang hình ảnh được xây dựng dựa trên công trình của [Stable Diffusion](https://stability.ai/blog/stable-diffusion-public-release) ban đầu, do Robin Rombach và Katherine Crowson từ [Stability AI](https://stability.ai/) và [LAION](https://laion.ai/) dẫn dắt.

*Bản phát hành Stable Diffusion 2.0 bao gồm các mô hình text-to-image mạnh mẽ được huấn luyện bằng một text encoder hoàn toàn mới (OpenCLIP), do LAION phát triển với sự hỗ trợ từ Stability AI, giúp cải thiện đáng kể chất lượng của các hình ảnh được tạo ra so với các bản phát hành V1 trước đó. Các mô hình text-to-image trong bản phát hành này có thể tạo ra hình ảnh với độ phân giải mặc định là cả 512x512 pixel và 768x768 pixel. Các mô hình này được huấn luyện trên một tập con mang tính thẩm mỹ của [LAION-5B dataset](https://laion.ai/blog/laion-5b/) do nhóm DeepFloyd tại Stability AI tạo ra, sau đó được lọc thêm để loại bỏ nội dung người lớn bằng [LAION’s NSFW filter](https://openreview.net/forum?id=M3Y74vmsMcY).*

Để biết thêm chi tiết về cách Stable Diffusion 2 hoạt động và sự khác biệt của nó so với Stable Diffusion gốc, vui lòng tham khảo [bài công bố chính thức](https://stability.ai/blog/stable-diffusion-v2-release).

Kiến trúc của Stable Diffusion 2 về cơ bản giống hệt với [mô hình Stable Diffusion](./text2img) gốc, vì vậy hãy xem tài liệu API của nó để biết cách sử dụng Stable Diffusion 2. Chúng tôi khuyến nghị sử dụng [DPMSolverMultistepScheduler](/docs/diffusers/v0.43.0/vi/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler) vì nó cho phép đánh đổi hợp lý giữa tốc độ và chất lượng, đồng thời có thể chạy với chỉ 20 bước.

Stable Diffusion 2 có sẵn cho các tác vụ như text-to-image, inpainting, super-resolution và depth-to-image:

| Nhiệm vụ                    | Kho lưu trữ                                                                                                    |
|-------------------------|---------------------------------------------------------------------------------------------------------------|
| text-to-image (512x512) | [stabilityai/stable-diffusion-2-base](https://huggingface.co/stabilityai/stable-diffusion-2-base)             |
| text-to-image (768x768) | [stabilityai/stable-diffusion-2](https://huggingface.co/stabilityai/stable-diffusion-2)                       |
| inpainting              | [stabilityai/stable-diffusion-2-inpainting](https://huggingface.co/stabilityai/stable-diffusion-2-inpainting) |
| super-resolution        | [stable-diffusion-x4-upscaler](https://huggingface.co/stabilityai/stable-diffusion-x4-upscaler)               |
| depth-to-image          | [stabilityai/stable-diffusion-2-depth](https://huggingface.co/stabilityai/stable-diffusion-2-depth)           |

Dưới đây là một số ví dụ về cách sử dụng Stable Diffusion 2 cho từng tác vụ:

> [!TIP]
> Hãy chắc chắn xem qua phần [Mẹo](overview#tips) 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ả!
>
> Nếu bạn quan tâm đến việc sử dụng một trong các checkpoint chính thức cho một tác vụ, hãy khám phá các tổ chức [CompVis](https://huggingface.co/CompVis) và [Stability AI](https://huggingface.co/stabilityai) trên Hub!

## Văn bản sang hình ảnh

```py
from diffusers import DiffusionPipeline, DPMSolverMultistepScheduler
import torch

repo_id = "stabilityai/stable-diffusion-2-base"
pipe = DiffusionPipeline.from_pretrained(repo_id, dtype=torch.float16, variant="fp16")

pipe.scheduler = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config)
pipe = pipe.to("cuda")  # or "mps", "xpu", "cpu"

prompt = "High quality photo of an astronaut riding a horse in space"
image = pipe(prompt, num_inference_steps=25).images[0]
image
```

## Inpainting

```py
import torch
from diffusers import DiffusionPipeline, DPMSolverMultistepScheduler
from diffusers.utils import load_image, make_image_grid

img_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo.png"
mask_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo_mask.png"

init_image = load_image(img_url).resize((512, 512))
mask_image = load_image(mask_url).resize((512, 512))

repo_id = "stabilityai/stable-diffusion-2-inpainting"
pipe = DiffusionPipeline.from_pretrained(repo_id, dtype=torch.float16, variant="fp16")

pipe.scheduler = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config)
pipe = pipe.to("cuda")  # or "mps", "xpu", "cpu"

prompt = "Face of a yellow cat, high resolution, sitting on a park bench"
image = pipe(prompt=prompt, image=init_image, mask_image=mask_image, num_inference_steps=25).images[0]
make_image_grid([init_image, mask_image, image], rows=1, cols=3)
```

## Phân giải siêu cao

```py
from diffusers import StableDiffusionUpscalePipeline
from diffusers.utils import load_image, make_image_grid
import torch

# load model and scheduler
model_id = "stabilityai/stable-diffusion-x4-upscaler"
pipeline = StableDiffusionUpscalePipeline.from_pretrained(model_id, dtype=torch.float16)
pipeline = pipeline.to("cuda")  # or "mps", "xpu", "cpu"

# let's download an  image
url = "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/sd2-upscale/low_res_cat.png"
low_res_img = load_image(url)
low_res_img = low_res_img.resize((128, 128))
prompt = "a white cat"
upscaled_image = pipeline(prompt=prompt, image=low_res_img).images[0]
make_image_grid([low_res_img.resize((512, 512)), upscaled_image.resize((512, 512))], rows=1, cols=2)
```

## Từ độ sâu sang hình ảnh

```py
import torch
from diffusers import StableDiffusionDepth2ImgPipeline
from diffusers.utils import load_image, make_image_grid

pipe = StableDiffusionDepth2ImgPipeline.from_pretrained(
    "stabilityai/stable-diffusion-2-depth",
    dtype=torch.float16,
).to("cuda")  # or "mps", "xpu", "cpu"

url = "http://images.cocodataset.org/val2017/000000039769.jpg"
init_image = load_image(url)
prompt = "two tigers"
negative_prompt = "bad, deformed, ugly, bad anotomy"
image = pipe(prompt=prompt, image=init_image, negative_prompt=negative_prompt, strength=0.7).images[0]
make_image_grid([init_image, image], rows=1, cols=2)
```

