# Tạo có kiểm soát

Việc kiểm soát các đầu ra do các mô hình khuếch tán tạo ra đã được cộng đồng theo đuổi từ lâu và hiện là một chủ đề nghiên cứu đang được quan tâm. Trong nhiều mô hình khuếch tán phổ biến, những thay đổi nhỏ trong đầu vào, bao gồm cả hình ảnh và câu lệnh văn bản, có thể làm thay đổi đáng kể đầu ra. Trong một thế giới lý tưởng, chúng ta muốn có khả năng kiểm soát cách ngữ nghĩa được bảo toàn và thay đổi.

Hầu hết các ví dụ về việc bảo toàn ngữ nghĩa đều quy về khả năng ánh xạ chính xác một thay đổi trong đầu vào sang một thay đổi trong đầu ra. Cụ thể, việc thêm một tính từ cho chủ thể trong prompt sẽ giữ nguyên toàn bộ hình ảnh, chỉ thay đổi chủ thể đã được chỉnh sửa. Hoặc, việc tạo biến thể hình ảnh của một chủ thể cụ thể sẽ giữ nguyên tư thế của chủ thể đó.

Ngoài ra, còn có những đặc tính của hình ảnh được tạo ra mà chúng ta muốn tác động đến, vượt ra ngoài việc bảo toàn ngữ nghĩa. Cụ thể, nhìn chung, chúng ta muốn đầu ra của mình có chất lượng tốt, tuân theo một phong cách cụ thể, hoặc mang tính chân thực.

Chúng tôi sẽ tài liệu hóa một số kỹ thuật mà `diffusers` hỗ trợ để kiểm soát quá trình tạo của các mô hình khuếch tán. Phần lớn là nghiên cứu tiên phong và có thể khá tinh tế. Nếu cần làm rõ điều gì hoặc bạn có đề xuất, đừng ngần ngại mở một [GitHub Discussion](https://github.com/huggingface/diffusers/discussions) hoặc một [GitHub issue](https://github.com/huggingface/diffusers/issues).

Chúng tôi cung cấp giải thích ở mức cao về cách kiểm soát quá trình sinh, cùng với một đoạn trích về các chi tiết kỹ thuật. Để có giải thích chi tiết hơn về các khía cạnh kỹ thuật, các bài báo gốc được liên kết từ các pipeline luôn là nguồn tài liệu tốt nhất.

Tùy thuộc vào trường hợp sử dụng, người dùng nên chọn kỹ thuật phù hợp. Trong nhiều trường hợp, các kỹ thuật này có thể được kết hợp. Ví dụ, có thể kết hợp Textual Inversion với SEGA để cung cấp thêm sự dẫn dắt ngữ nghĩa cho các đầu ra được tạo bằng Textual Inversion.

Trừ khi có ghi chú khác, đây là các kỹ thuật hoạt động với các mô hình hiện có và không yêu cầu trọng số riêng.

1. [InstructPix2Pix](#instructpix2pix)
2. [Tham gia và Kích thích](#attend-and-excite)
3. [Hướng dẫn ngữ nghĩa](#semantic-guidance-sega)
4. [Hướng dẫn về Self-attention](#self-attention-guidance-sag)
5. [Depth2Image](#depth2image)
6. [MultiDiffusion Panorama](#multidiffusion-panorama)
7. [DreamBooth](#dreambooth)
8. [Textual Inversion](#textual-inversion)
9. [ControlNet](#controlnet)
10. [Trọng số Prompt](#prompt-weighting)
11. [Custom Diffusion](#custom-diffusion)
12. [DiffEdit](#diffedit)
13. [T2I-Adapter](#t2i-adapter)
14. [FABRIC](#fabric)

Để tiện lợi, chúng tôi cung cấp một bảng để chỉ ra phương pháp nào chỉ dùng cho suy luận và phương pháp nào yêu cầu tinh chỉnh/đào tạo.

|                     **Phương pháp**                      | **Chỉ suy luận** | **Yêu cầu huấn luyện / tinh chỉnh** |                                          **Bình luận**                                           |
| :-------------------------------------------------: | :----------------: | :-------------------------------------: | :---------------------------------------------------------------------------------------------: |
|        [InstructPix2Pix](#instructpix2pix)        |         ✅         |                   ❌                    | Có thể được tinh chỉnh thêm để đạt hiệu suất tốt hơn trên các hướng dẫn chỉnh sửa cụ thể. |
|       [Tham gia và Kích thích](#attend-and-excite)       |         ✅         |                   ❌                    |                                                                                                 |
|       [Hướng dẫn ngữ nghĩa](#semantic-guidance-sega)       |         ✅         |                   ❌                    |                                                                                                 |
| [Hướng dẫn về Self-attention](#self-attention-guidance-sag) |         ✅         |                   ❌                    |                                                                                                 |
|             [Depth2Image](#depth2image)             |         ✅         |                   ❌                    |                                                                                                 |
| [MultiDiffusion Panorama](#multidiffusion-panorama) |         ✅         |                   ❌                    |                                                                                                 |
|              [DreamBooth](#dreambooth)              |         ❌         |                   ✅                    |                                                                                                 |
|       [Textual Inversion](#textual-inversion)       |         ❌         |                   ✅                    |                                                                                                 |
|              [ControlNet](#controlnet)              |         ✅         |                   ❌                    |             Một ControlNet có thể được huấn luyện/điều chỉnh tinh trên một điều kiện tùy chỉnh.             |
|        [Trọng số Prompt](#prompt-weighting)        |         ✅         |                   ❌                    |                                                                                                 |
|        [Custom Diffusion](#custom-diffusion)        |         ❌         |                   ✅                    |                                                                                                 |
|                [DiffEdit](#diffedit)                |         ✅         |                   ❌                    |                                                                                                 |
|             [T2I-Adapter](#t2i-adapter)             |         ✅         |                   ❌                    |                                                                                                 |
|                [Fabric](#fabric)                    |         ✅         |                   ❌                    |                                                                                                 |
## InstructPix2Pix

[Bài báo](https://huggingface.co/papers/2211.09800)

[InstructPix2Pix](../api/pipelines/pix2pix) được tinh chỉnh từ Stable Diffusion để hỗ trợ chỉnh sửa ảnh đầu vào. Nó nhận một ảnh và một prompt mô tả thao tác chỉnh sửa làm đầu vào, và trả về ảnh đã được chỉnh sửa. InstructPix2Pix được huấn luyện rõ ràng để hoạt động tốt với các prompt kiểu [InstructGPT](https://openai.com/blog/instruction-following/).

## Tham gia và Kích hoạt

[Bài báo](https://huggingface.co/papers/2301.13826)

Attend and Excite cho phép các chủ thể trong prompt được thể hiện trung thực trong hình ảnh cuối cùng.

Một tập hợp các chỉ số token được đưa vào làm đầu vào, tương ứng với các chủ thể trong prompt cần phải xuất hiện trong hình ảnh. Trong quá trình khử nhiễu, mỗi chỉ số token được đảm bảo có ngưỡng chú ý tối thiểu cho ít nhất một patch của hình ảnh. Các latent trung gian được tối ưu hóa lặp đi lặp lại trong quá trình khử nhiễu để tăng cường sự chú ý của token chủ thể bị bỏ qua nhiều nhất cho đến khi ngưỡng chú ý được vượt qua cho tất cả các token chủ thể.

Tương tự như Pix2Pix Zero, Attend and Excite cũng bao gồm một vòng lặp tối ưu hóa nhỏ (giữ nguyên các trọng số đã huấn luyện trước) trong pipeline của nó và có thể yêu cầu nhiều bộ nhớ hơn so với [StableDiffusionPipeline](../api/pipelines/stable_diffusion/text2img) thông thường.

## Hướng dẫn ngữ nghĩa (SEGA)

[Bài báo](https://huggingface.co/papers/2301.12247)

SEGA cho phép áp dụng hoặc loại bỏ một hoặc nhiều khái niệm khỏi một hình ảnh. Cường độ của khái niệm cũng có thể được kiểm soát. Ví dụ, khái niệm nụ cười có thể được sử dụng để tăng hoặc giảm dần nụ cười trên một chân dung.

Tương tự như cách classifier free guidance cung cấp sự dẫn dắt thông qua các đầu vào prompt rỗng, SEGA cung cấp sự dẫn dắt trên các prompt khái niệm. Nhiều prompt khái niệm này có thể được áp dụng đồng thời. Mỗi prompt khái niệm có thể thêm hoặc xóa khái niệm của nó tùy thuộc vào việc sự dẫn dắt được áp dụng theo hướng dương hay âm.

Khác với Pix2Pix Zero hoặc Attend and Excite, SEGA tương tác trực tiếp với quá trình khuếch tán thay vì thực hiện bất kỳ tối ưu hóa dựa trên gradient nào.

## Hướng dẫn tự chú ý (SAG)

[Bài báo](https://huggingface.co/papers/2210.00939)

Hướng dẫn Self-attention cải thiện chất lượng tổng thể của hình ảnh.

SAG cung cấp hướng dẫn từ các dự đoán không điều kiện trên các chi tiết tần số cao đến các hình ảnh được điều kiện hoàn toàn. Các chi tiết tần số cao được trích xuất từ các bản đồ tự chú ý (self-attention) của UNet.

## Depth2Image

[Dự án](https://huggingface.co/stabilityai/stable-diffusion-2-depth)

[Depth2Image](../api/pipelines/stable_diffusion/depth2img) được tinh chỉnh từ Stable Diffusion để bảo toàn tốt hơn ngữ nghĩa cho việc biến đổi hình ảnh có điều hướng bằng văn bản.

Nó điều kiện dựa trên ước lượng độ sâu đơn mục của hình ảnh gốc.

## MultiDiffusion Panorama

[Bài báo](https://huggingface.co/papers/2302.08113)

MultiDiffusion Panorama xác định một quy trình tạo mới trên một mô hình khuếch tán đã được huấn luyện trước. Quy trình này kết hợp nhiều phương pháp tạo khuếch tán có thể áp dụng ngay để tạo ra các hình ảnh chất lượng cao và đa dạng. Kết quả tuân theo các điều khiển do người dùng cung cấp, chẳng hạn như tỷ lệ khung hình mong muốn (ví dụ: panorama) và các tín hiệu dẫn hướng không gian, từ các mặt nạ phân đoạn chặt chẽ đến các hộp bao. MultiDiffusion Panorama cho phép bạn tạo ra các hình ảnh chất lượng cao ở bất kỳ tỷ lệ khung hình nào (ví dụ: panorama).

## Tinh chỉnh các mô hình của riêng bạn

Ngoài các mô hình được huấn luyện trước, Diffusers còn có các script huấn luyện để tinh chỉnh mô hình trên dữ liệu do người dùng cung cấp.

## DreamBooth

[Dự án](https://dreambooth.github.io/)

[DreamBooth](../training/dreambooth) tinh chỉnh mô hình để dạy nó về một chủ thể mới. Ví dụ, một vài bức ảnh của một người có thể được sử dụng để tạo ra các hình ảnh của người đó theo những phong cách khác nhau.

## Textual Inversion

[Bài báo](https://huggingface.co/papers/2208.01618)

[Textual Inversion](../training/text_inversion) tinh chỉnh mô hình để dạy nó về một khái niệm mới. Ví dụ, một vài bức ảnh về một phong cách nghệ thuật có thể được sử dụng để tạo ra các hình ảnh theo phong cách đó.

## ControlNet

[Bài báo](https://huggingface.co/papers/2302.05543)

[ControlNet](../api/pipelines/controlnet) là một mạng phụ trợ thêm một điều kiện bổ sung. Có 8 ControlNet được huấn luyện trước theo chuẩn, được huấn luyện trên các điều kiện khác nhau như phát hiện cạnh, phác thảo, bản đồ độ sâu và phân đoạn ngữ nghĩa.

## Trọng số Prompt

[Trọng số hóa prompt](../using-diffusers/weighted_prompts) là một kỹ thuật đơn giản, đặt trọng số chú ý cao hơn cho một số phần nhất định của đầu vào văn bản.

## Custom Diffusion

[Bài báo](https://huggingface.co/papers/2212.04488)

[Custom Diffusion](../training/custom_diffusion) chỉ tinh chỉnh các bản đồ cross-attention của một mô hình khuếch tán từ văn bản sang ảnh đã được huấn luyện trước. Nó cũng cho phép thực hiện thêm Textual Inversion. Về thiết kế, nó hỗ trợ huấn luyện đa khái niệm. Giống như DreamBooth và Textual Inversion, Custom Diffusion cũng được sử dụng để dạy một mô hình khuếch tán từ văn bản sang ảnh đã được huấn luyện trước về các khái niệm mới nhằm tạo ra các đầu ra liên quan đến khái niệm (các khái niệm) quan tâm.

## DiffEdit

[Bài báo](https://huggingface.co/papers/2210.11427)

DiffEdit cho phép chỉnh sửa ngữ nghĩa các hình ảnh đầu vào cùng với các prompt đầu vào, đồng thời giữ nguyên hình ảnh đầu vào gốc nhiều nhất có thể.

## T2I-Adapter

[Bài báo](https://huggingface.co/papers/2302.08453)

[T2I-Adapter](../api/pipelines/stable_diffusion/adapter) là một mạng phụ trợ thêm một điều kiện bổ sung. Có 8 adapter được huấn luyện trước theo các điều kiện khác nhau như phát hiện cạnh, phác thảo, bản đồ độ sâu và phân đoạn ngữ nghĩa.

## Fabric

[Bài báo](https://huggingface.co/papers/2307.10159)

[Fabric](https://github.com/huggingface/diffusers/tree/442017ccc877279bcf24fbe92f92d3d0def191b6/examples/community#stable-diffusion-fabric-pipeline) là một phương pháp không cần huấn luyện, có thể áp dụng cho nhiều mô hình khuếch tán phổ biến, tận dụng lớp tự chú ý (self-attention) có mặt trong các kiến trúc được sử dụng rộng rãi nhất để điều kiện hóa quá trình khuếch tán dựa trên một tập hợp các hình ảnh phản hồi.

