Buckets:

mishig's picture
|
download
raw
19 kB
# Trình lập lịch
🤗 Diffusers cung cấp nhiều hàm scheduler cho quá trình khuếch tán. Scheduler nhận đầu ra của mô hình (mẫu mà quá trình khuếch tán đang lặp lại) và một bước thời gian (timestep) để trả về một mẫu đã khử nhiễu. Timestep rất quan trọng vì nó xác định vị trí của bước hiện tại trong quá trình khuếch tán; dữ liệu được tạo ra bằng cách lặp tiến về phía trước *n* timestep và suy diễn (inference) được thực hiện bằng cách lan truyền ngược lại qua các timestep. Dựa vào timestep, một scheduler có thể là *discrete*, khi đó timestep là một `int`, hoặc *continuous*, khi đó timestep là một `float`.
Tùy thuộc vào ngữ cảnh, một scheduler định nghĩa cách thêm nhiễu lặp đi lặp lại vào một hình ảnh hoặc cách cập nhật một mẫu dựa trên đầu ra của mô hình:
- trong quá trình *training*, một scheduler sẽ thêm nhiễu (có các thuật toán khác nhau về cách thêm nhiễu) vào một mẫu để huấn luyện mô hình diffusion
- trong quá trình *inference*, một scheduler xác định cách cập nhật một mẫu dựa trên đầu ra của mô hình được huấn luyện trước
Nhiều scheduler được triển khai từ thư viện [k-diffusion](https://github.com/crowsonkb/k-diffusion) của [Katherine Crowson](https://github.com/crowsonkb/), và chúng cũng được sử dụng rộng rãi trong A1111. Để giúp bạn ánh xạ các scheduler từ k-diffusion và A1111 sang các scheduler trong 🤗 Diffusers, hãy xem bảng dưới đây:
| A1111/k-diffusion | 🤗 Diffusers | Cách sử dụng |
|---------------------|-------------------------------------|---------------------------------------------------------------------------------------------------------------|
| DPM++ 2M | [DPMSolverMultistepScheduler](/docs/diffusers/main/vi/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler) | |
| DPM++ 2M Karras | [DPMSolverMultistepScheduler](/docs/diffusers/main/vi/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler) | khởi tạo với `use_karras_sigmas=True` |
| DPM++ 2M SDE | [DPMSolverMultistepScheduler](/docs/diffusers/main/vi/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler) | khởi tạo với `algorithm_type="sde-dpmsolver++"` |
| DPM++ 2M SDE Karras | [DPMSolverMultistepScheduler](/docs/diffusers/main/vi/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler) | khởi tạo với `use_karras_sigmas=True` và `algorithm_type="sde-dpmsolver++"` |
| DPM++ 2S a | N/A | rất giống với `DPMSolverSinglestepScheduler` |
| DPM++ 2S a Karras | N/A | rất giống với `DPMSolverSinglestepScheduler(use_karras_sigmas=True, ...)` |
| DPM++ SDE | [DPMSolverSinglestepScheduler](/docs/diffusers/main/vi/api/schedulers/singlestep_dpm_solver#diffusers.DPMSolverSinglestepScheduler) | |
| DPM++ SDE Karras | [DPMSolverSinglestepScheduler](/docs/diffusers/main/vi/api/schedulers/singlestep_dpm_solver#diffusers.DPMSolverSinglestepScheduler) | khởi tạo với `use_karras_sigmas=True` |
| DPM2 | [KDPM2DiscreteScheduler](/docs/diffusers/main/vi/api/schedulers/dpm_discrete#diffusers.KDPM2DiscreteScheduler) | |
| DPM2 Karras | [KDPM2DiscreteScheduler](/docs/diffusers/main/vi/api/schedulers/dpm_discrete#diffusers.KDPM2DiscreteScheduler) | khởi tạo với `use_karras_sigmas=True` |
| DPM2 a | [KDPM2AncestralDiscreteScheduler](/docs/diffusers/main/vi/api/schedulers/dpm_discrete_ancestral#diffusers.KDPM2AncestralDiscreteScheduler) | |
| DPM2 a Karras | [KDPM2AncestralDiscreteScheduler](/docs/diffusers/main/vi/api/schedulers/dpm_discrete_ancestral#diffusers.KDPM2AncestralDiscreteScheduler) | khởi tạo với `use_karras_sigmas=True` |
| DPM thích ứng | N/A | |
| DPM nhanh | N/A | |
| Euler | [EulerDiscreteScheduler](/docs/diffusers/main/vi/api/schedulers/euler#diffusers.EulerDiscreteScheduler) | |
| Euler a | [EulerAncestralDiscreteScheduler](/docs/diffusers/main/vi/api/schedulers/euler_ancestral#diffusers.EulerAncestralDiscreteScheduler) | |
| Heun | [HeunDiscreteScheduler](/docs/diffusers/main/vi/api/schedulers/heun#diffusers.HeunDiscreteScheduler) | |
| LMS | [LMSDiscreteScheduler](/docs/diffusers/main/vi/api/schedulers/lms_discrete#diffusers.LMSDiscreteScheduler) | |
| LMS Karras | [LMSDiscreteScheduler](/docs/diffusers/main/vi/api/schedulers/lms_discrete#diffusers.LMSDiscreteScheduler) | khởi tạo với `use_karras_sigmas=True` |
| N/A | [DEISMultistepScheduler](/docs/diffusers/main/vi/api/schedulers/deis#diffusers.DEISMultistepScheduler) | |
| N/A | [UniPCMultistepScheduler](/docs/diffusers/main/vi/api/schedulers/unipc#diffusers.UniPCMultistepScheduler) | |
## Lịch trình nhiễu và các loại lịch trình
| A1111/k-diffusion | 🤗 Diffusers |
|--------------------------|----------------------------------------------------------------------------|
| Karras | khởi tạo với `use_karras_sigmas=True` |
| sgm_uniform | khởi tạo với `timestep_spacing="trailing"` |
| đơn giản | khởi tạo với `timestep_spacing="trailing"` |
| exponential | khởi tạo với `timestep_spacing="linspace"`, `use_exponential_sigmas=True` |
| beta | khởi tạo với `timestep_spacing="linspace"`, `use_beta_sigmas=True` |
Tất cả các trình lập lịch đều được xây dựng từ lớp cơ sở [SchedulerMixin](/docs/diffusers/main/vi/api/schedulers/overview#diffusers.SchedulerMixin), trong đó triển khai các tiện ích cấp thấp được chia sẻ bởi tất cả các trình lập lịch.
## SchedulerMixin[[diffusers.SchedulerMixin]]
#### diffusers.SchedulerMixin[[diffusers.SchedulerMixin]]
```python
diffusers.SchedulerMixin()
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_utils.py#L79)
Lớp cơ sở cho tất cả các trình lập lịch.
[SchedulerMixin](/docs/diffusers/main/vi/api/schedulers/overview#diffusers.SchedulerMixin) chứa các hàm dùng chung cho tất cả các scheduler, chẳng hạn như các chức năng tải và lưu trữ chung.
[ConfigMixin](/docs/diffusers/main/vi/api/configuration#diffusers.ConfigMixin) chịu trách nhiệm lưu trữ các thuộc tính cấu hình (như `num_train_timesteps`) được truyền vào hàm `__init__` của scheduler, và các thuộc tính này có thể được truy cập bằng `scheduler.config.num_train_timesteps`.
Thuộc tính lớp:
- **_compatibles** (`list[str]`) -- Một danh sách các lớp scheduler tương thích với lớp scheduler cha. Sử dụng [from_config()](/docs/diffusers/main/vi/api/configuration#diffusers.ConfigMixin.from_config) để nạp một lớp scheduler tương thích khác (nên được ghi đè bởi lớp cha).
#### from_pretrained[[diffusers.SchedulerMixin.from_pretrained]]
```python
from_pretrained(pretrained_model_name_or_path: str | os.PathLike | None = None, subfolder: str | None = None, return_unused_kwargs: bool = False, **kwargs: Any)
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_utils.py#L99)
**Tham số:**
pretrained_model_name_or_path (`str` hoặc `os.PathLike`, *tùy chọn*) : Có thể là: - Một chuỗi, *model id* (ví dụ `google/ddpm-celebahq-256`) của một model được huấn luyện trước lưu trên Hub. - Đường dẫn đến một *thư mục* (ví dụ `./my_model_directory`) chứa cấu hình scheduler được lưu bằng [save_pretrained()](/docs/diffusers/main/vi/api/schedulers/overview#diffusers.SchedulerMixin.save_pretrained).
subfolder (`str`, *tùy chọn*) : Vị trí thư mục con của tệp mô hình trong kho mô hình lớn hơn trên Hub hoặc cục bộ.
return_unused_kwargs (`bool`, *tuỳ chọn*, mặc định là `False`) : Xác định xem các kwargs không được lớp Python sử dụng có nên được trả về hay không.
cache_dir (`str` hoặc `os.PathLike`, *tùy chọn*) : Đường dẫn đến thư mục nơi cấu hình mô hình được huấn luyện trước đã tải xuống được lưu đệm nếu không sử dụng bộ lưu đệm tiêu chuẩn.
force_download (`bool`, *tùy chọn*, mặc định là `False`) : Xác định có nên ép buộc tải lại (re-download) trọng số mô hình và các tệp cấu hình hay không, ghi đè lên các phiên bản đã được lưu trong bộ nhớ đệm nếu chúng tồn tại.
proxies (`dict[str, str]`, *tùy chọn*) : Một từ điển các máy chủ proxy để sử dụng theo giao thức hoặc điểm cuối, ví dụ, `{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}`. Các proxy được sử dụng cho mỗi yêu cầu.
output_loading_info (`bool`, *tùy chọn*, mặc định là `False`) : Có nên trả về một từ điển chứa các khóa bị thiếu, các khóa không mong đợi và các thông báo lỗi hay không.
local_files_only (`bool`, *tùy chọn*, mặc định là `False`) : Xác định xem có chỉ tải trọng số và tệp cấu hình của mô hình cục bộ hay không. Nếu đặt thành `True`, mô hình sẽ không được tải xuống từ Hub.
token (`str` hoặc `bool`, *tùy chọn*) : Token được sử dụng làm HTTP bearer authorization cho các tệp từ xa. Nếu là `True`, token được tạo từ `diffusers-cli login` (được lưu trong `~/.huggingface`) sẽ được sử dụng.
revision (`str`, *tùy chọn*, mặc định là `"main"`) : Phiên bản mô hình cụ thể cần sử dụng. Nó có thể là tên nhánh, tên thẻ, id commit, hoặc bất kỳ định danh nào được Git cho phép.
**Trả về:** [SchedulerMixin](/docs/diffusers/main/vi/api/schedulers/overview#diffusers.SchedulerMixin) hoặc `tuple[SchedulerMixin, dict[str, Any]]`
Trình lập lịch được khởi tạo từ cấu hình. Nếu `return_unused_kwargs` là `True`, một tuple sẽ được trả về, trong đó phần tử thứ hai là một từ điển chứa các đối số từ khóa không được sử dụng.
Tạo một scheduler từ tệp cấu hình JSON có sẵn trong thư mục cục bộ hoặc kho Hub.
> [!TIP] > Để sử dụng các mô hình riêng tư hoặc [gated models](https://huggingface.co/docs/hub/models-gated#gated-models), hãy đăng nhập
với `hf > auth login`. Bạn cũng có thể kích hoạt chế độ đặc biệt > ["offline-mode"](https://huggingface.co/diffusers/installation.html#offline-mode) để sử dụng phương pháp này trong môi trường > có tường lửa.
#### save_pretrained[[diffusers.SchedulerMixin.save_pretrained]]
```python
save_pretrained(save_directory: str | os.PathLike, push_to_hub: bool = False, **kwargs: Any)
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_utils.py#L164)
**Tham số:**
save_directory (`str` hoặc `os.PathLike`) : Thư mục nơi tệp cấu hình JSON sẽ được lưu (sẽ được tạo nếu chưa tồn tại).
push_to_hub (`bool`, *tùy chọn*, mặc định là `False`) : Có đẩy mô hình của bạn lên Hugging Face Hub sau khi lưu hay không. Bạn có thể chỉ định kho lưu trữ muốn đẩy đến bằng `repo_id` (mặc định sẽ là tên của `save_directory` trong không gian tên của bạn).
kwargs (`dict[str, Any]`, *tùy chọn*) : Các đối số từ khóa bổ sung được truyền đến phương thức [push_to_hub()](/docs/diffusers/main/vi/api/schedulers/overview#diffusers.utils.PushToHubMixin.push_to_hub).
Lưu một đối tượng cấu hình scheduler vào một thư mục để có thể tải lại bằng phương thức lớp [from_pretrained()](/docs/diffusers/main/vi/api/schedulers/overview#diffusers.SchedulerMixin.from_pretrained).
## SchedulerOutput[[diffusers.schedulers.scheduling_utils.SchedulerOutput]]
#### diffusers.schedulers.scheduling_utils.SchedulerOutput[[diffusers.schedulers.scheduling_utils.SchedulerOutput]]
```python
diffusers.schedulers.scheduling_utils.SchedulerOutput(prev_sample: Tensor)
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_utils.py#L66)
**Tham số:**
prev_sample (`torch.Tensor` có shape `(batch_size, num_channels, height, width)` đối với ảnh) : Mẫu `(x_{t-1})` đã tính của bước thời gian trước đó. `prev_sample` nên được dùng làm đầu vào mô hình tiếp theo trong vòng lặp khử nhiễu.
Lớp cơ sở cho kết quả của hàm `step` của một trình lập lịch.
## KarrasDiffusionSchedulers
`KarrasDiffusionSchedulers` là một khái quát hóa rộng rãi của các scheduler trong 🤗 Diffusers. Các scheduler trong lớp này được phân biệt ở cấp độ cao bởi chiến lược lấy mẫu nhiễu, loại mạng và phép quy mô hóa, chiến lược huấn luyện, và cách trọng số hóa loss.
Các scheduler khác nhau trong lớp này, tùy thuộc vào loại bộ giải phương trình vi phân thường (ODE), thuộc về phân loại nêu trên và cung cấp một sự trừu tượng hóa tốt cho thiết kế của các scheduler chính được triển khai trong 🤗 Diffusers. Các scheduler trong lớp này được liệt kê [tại đây](https://github.com/huggingface/diffusers/blob/a69754bb879ed55b9b6dc9dd0b3cf4fa4124c765/src/diffusers/schedulers/scheduling_utils.py#L32).
## PushToHubMixin[[diffusers.utils.PushToHubMixin]]
#### diffusers.utils.PushToHubMixin[[diffusers.utils.PushToHubMixin]]
```python
diffusers.utils.PushToHubMixin()
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/utils/hub_utils.py#L491)
Một Mixin để đẩy mô hình, bộ lập lịch hoặc pipeline lên Hugging Face Hub.
#### push_to_hub[[diffusers.utils.PushToHubMixin.push_to_hub]]
```python
push_to_hub(repo_id: str, commit_message: str | None = None, private: bool | None = None, token: str | None = None, create_pr: bool = False, safe_serialization: bool = True, variant: str | None = None, subfolder: str | None = None)
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/utils/hub_utils.py#L526)
**Tham số:**
repo_id (`str`) : Tên của kho mà bạn muốn đẩy các tệp mô hình, trình lập lịch hoặc pipeline của mình đến. Nó phải chứa tên tổ chức của bạn khi đẩy đến một tổ chức. `repo_id` cũng có thể là đường dẫn đến một thư mục cục bộ.
commit_message (`str`, *tùy chọn*) : Thông điệp để commit khi đẩy. Mặc định là `"Upload {object}"`.
private (`bool`, *tuỳ chọn*) : Có nên đặt kho thành riêng tư hay không. Nếu là `None` (mặc định), kho sẽ là công khai trừ khi mặc định của tổ chức là riêng tư. Giá trị này bị bỏ qua nếu kho đã tồn tại.
token (`str`, *tùy chọn*) : Token được sử dụng làm HTTP bearer authorization cho các tệp từ xa. Token được tạo ra khi chạy `hf auth login` (được lưu trong `~/.huggingface`).
create_pr (`bool`, *tùy chọn*, mặc định là `False`) : Có tạo PR với các tệp đã tải lên hoặc commit trực tiếp hay không.
safe_serialization (`bool`, *tùy chọn*, mặc định là `True`) : Có chuyển đổi trọng số mô hình sang định dạng `safetensors` hay không.
variant (`str`, *tùy chọn*) : Nếu được chỉ định, trọng số sẽ được lưu ở định dạng `pytorch_model.<variant>.bin`.
Tải tệp mô hình, trình lập lịch hoặc pipeline lên 🤗 Hugging Face Hub.
Ví dụ:
```python
from diffusers import UNet2DConditionModel
unet = UNet2DConditionModel.from_pretrained("stabilityai/stable-diffusion-2", subfolder="unet")
# Push the `unet` to your namespace with the name "my-finetuned-unet".
unet.push_to_hub("my-finetuned-unet")
# Push the `unet` to an organization with the name "my-finetuned-unet".
unet.push_to_hub("your-org/my-finetuned-unet")
```

Xet Storage Details

Size:
19 kB
·
Xet hash:
842d50646a4413f18dbfb75b0281c3ba4b95f7edd435a8d7757d7273dffd9952

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