Diffusers documentation
Планировщики
Планировщики
🤗 Diffusers предоставляет множество функций планировщика для процесса диффузии. Планировщик принимает выход модели (образец, с которым работает процесс диффузии) и шаг времени, чтобы вернуть образец с удалённым шумом. Шаг времени важен, так как он определяет, на какой стадии процесса диффузии выполняется шаг: данные генерируются путём итерации вперёд на n шагов времени, а инференс происходит путём распространения назад через шаги времени. В зависимости от шага времени планировщик может быть дискретным, в этом случае шаг времени — это int, или непрерывным, в этом случае шаг времени — это float.
В зависимости от контекста планировщик определяет, как итеративно добавлять шум к изображению или как обновлять образец на основе вывода модели:
- в процессе обучения планировщик добавляет шум (существуют различные алгоритмы добавления шума) к образцу для обучения диффузионной модели
- во время inference планировщик определяет, как обновлять образец на основе вывода предобученной модели
Многие планировщики реализованы на основе библиотеки k-diffusion от Katherine Crowson и также широко используются в A1111. Чтобы сопоставить планировщики из k-diffusion и A1111 с планировщиками в 🤗 Diffusers, обратитесь к таблице ниже:
| A1111/k-diffusion | 🤗 Diffusers | Использование |
|---|---|---|
| DPM++ 2M | DPMSolverMultistepScheduler | |
| DPM++ 2M Karras | DPMSolverMultistepScheduler | init с use_karras_sigmas=True |
| DPM++ 2M SDE | DPMSolverMultistepScheduler | init с algorithm_type="sde-dpmsolver++" |
| DPM++ 2M SDE Karras | DPMSolverMultistepScheduler | init с use_karras_sigmas=True и algorithm_type="sde-dpmsolver++" |
| DPM++ 2S a | N/A | очень похож на DPMSolverSinglestepScheduler |
| DPM++ 2S a Karras | N/A | очень похоже на DPMSolverSinglestepScheduler(use_karras_sigmas=True, ...) |
| DPM++ SDE | DPMSolverSinglestepScheduler | |
| DPM++ SDE Karras | DPMSolverSinglestepScheduler | init с use_karras_sigmas=True |
| DPM2 | KDPM2DiscreteScheduler | |
| DPM2 Karras | KDPM2DiscreteScheduler | init с use_karras_sigmas=True |
| DPM2 a | KDPM2AncestralDiscreteScheduler | |
| DPM2 a Karras | KDPM2AncestralDiscreteScheduler | init с use_karras_sigmas=True |
| DPM адаптивный | N/A | |
| DPM fast | N/A | |
| Euler | EulerDiscreteScheduler | |
| Euler a | EulerAncestralDiscreteScheduler | |
| Heun | HeunDiscreteScheduler | |
| LMS | LMSDiscreteScheduler | |
| LMS Karras | LMSDiscreteScheduler | init с use_karras_sigmas=True |
| N/A | DEISMultistepScheduler | |
| N/A | UniPCMultistepScheduler |
Шкалы шума и типы шкал
| A1111/k-diffusion | 🤗 Diffusers |
|---|---|
| Karras | init с use_karras_sigmas=True |
| sgm_uniform | init с timestep_spacing="trailing" |
| простой | init с timestep_spacing="trailing" |
| экспоненциальный | init с timestep_spacing="linspace", use_exponential_sigmas=True |
| beta | init с timestep_spacing="linspace", use_beta_sigmas=True |
Все планировщики создаются на основе базового класса SchedulerMixin, который реализует низкоуровневые утилиты, общие для всех планировщиков.
SchedulerMixin
Базовый класс для всех планировщиков.
SchedulerMixin содержит общие функции, используемые всеми планировщиками, такие как общие функции загрузки и сохранения.
ConfigMixin отвечает за сохранение атрибутов конфигурации (таких как num_train_timesteps), которые передаются в функцию __init__ планировщика, а доступ к атрибутам осуществляется через scheduler.config.num_train_timesteps.
Атрибуты класса:
- _compatibles (
list[str]) — список классов планировщиков, совместимых с родительским классом планировщика. Используйте from_config() для загрузки другого совместимого класса планировщика (должно быть переопределено в родительском классе).
from_pretrained
< source >( pretrained_model_name_or_path: str | os.PathLike | None = Nonesubfolder: str | None = Nonereturn_unused_kwargs: bool = False**kwargs: Any ) → SchedulerMixin or tuple[SchedulerMixin, dict[str, Any]]
Параметры
- pretrained_model_name_or_path (
strилиos.PathLike, необязательный) — Может быть:- Строка, идентификатор модели (например,
google/ddpm-celebahq-256) предобученной модели, размещенной на Hub. - Путь к каталогу (например,
./my_model_directory), содержащему конфигурацию планировщика, сохранённую с помощью save_pretrained().
- Строка, идентификатор модели (например,
- subfolder (
str, необязательный) — Расположение подпапки файла модели внутри более крупного репозитория моделей на Hub или локально. - return_unused_kwargs (
bool, необязательный, по умолчаниюFalse) — Определяет, следует ли возвращать аргументы kwargs, которые не используются классом Python. - cache_dir (
strилиos.PathLike, необязательный) — Путь к каталогу, в котором кэшируется загруженная конфигурация предобученной модели, если стандартный кэш не используется. - force_download (
bool, необязательный, по умолчаниюFalse) — Следует ли принудительно (пере)скачивать веса модели и файлы конфигурации, игнорируя кэшированные версии, если они существуют. - proxies (
dict[str, str], необязательный) — Словарь прокси-серверов, используемых по протоколу или конечной точке, например,{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}. Прокси применяются при каждом запросе. - output_loading_info (
bool, необязательный, по умолчаниюFalse) — Возвращать ли также словарь, содержащий отсутствующие ключи, неожиданные ключи и сообщения об ошибках. - local_files_only (
bool, необязательный, по умолчаниюFalse) — Определяет, следует ли загружать только локальные веса модели и файлы конфигурации. Если установлено значениеTrue, модель не будет скачана с Hub. - token (
strилиbool, необязательный) — Токен, используемый в качестве HTTP bearer-авторизации для удалённых файлов. Если указаноTrue, используется токен, сгенерированный командойdiffusers-cli login(сохранённый в~/.huggingface). - revision (
str, необязательный, по умолчанию"main") — Конкретная версия модели, которую следует использовать. Может быть именем ветки, именем тега, идентификатором коммита или любым другим идентификатором, поддерживаемым Git.
Возвращает
SchedulerMixin или tuple[SchedulerMixin, dict[str, Any]]
Планировщик, созданный из конфигурации. Если return_unused_kwargs равно True, возвращается кортеж, вторым элементом которого является словарь неиспользованных именованных аргументов.
Создайте планировщик из заранее определённого файла конфигурации JSON в локальном каталоге или репозитории Hub.
> Для использования частных или модели с ограниченным доступом выполните вход с помощью
hf > auth login. Также можно активировать специальный режим > «офлайн», чтобы использовать этот метод в > среде с файрволом.
save_pretrained
< source >( save_directory: str | os.PathLikepush_to_hub: bool = False**kwargs: Any )
Параметры
- save_directory (
strилиos.PathLike) — Каталог, в котором будет сохранён файл конфигурации JSON (будет создан, если не существует). - push_to_hub (
bool, необязательный, по умолчаниюFalse) — Указывает, следует ли отправлять вашу модель в Hugging Face Hub после сохранения. Репозиторий, в который вы хотите отправить модель, можно указать с помощьюrepo_id(по умолчанию используется имяsave_directoryв вашем пространстве имён). - kwargs (
dict[str, Any], необязательный) — Дополнительные именованные аргументы, передаваемые в метод push_to_hub().
Сохраните объект конфигурации планировщика в каталог, чтобы его можно было загрузить с помощью метода класса from_pretrained().
SchedulerOutput
класс diffusers.schedulers.scheduling_utils.SchedulerOutput
< source >( prev_sample: Tensor )
Базовый класс для результата функции step планировщика.
KarrasDiffusionSchedulers
KarrasDiffusionSchedulers представляют собой широкую обобщающую форму для планировщиков в 🤗 Diffusers. Планировщики этого класса различаются на высоком уровне по стратегии выборки шума, типу сети и масштабированию, стратегии обучения и способу взвешивания функции потерь.
Различные планировщики в этом классе, в зависимости от типа решателя обыкновенных дифференциальных уравнений (ODE), подпадают под вышеописанную классификацию и обеспечивают хорошую абстракцию для проектирования основных планировщиков, реализованных в 🤗 Diffusers. Планировщики этого класса приведены здесь.
PushToHubMixin
Миксин для загрузки модели, планировщика или конвейера на Hugging Face Hub.
push_to_hub
< source >( repo_id: strcommit_message: str | None = Noneprivate: bool | None = Nonetoken: str | None = Nonecreate_pr: bool = Falsesafe_serialization: bool = Truevariant: str | None = Nonesubfolder: str | None = None )
Параметры
- repo_id (
str) — Имя репозитория, в который вы хотите загрузить файлы модели, планировщика или конвейера. При загрузке в организацию оно должно содержать имя вашей организации.repo_idтакже может быть путём к локальному каталогу. - commit_message (
str, необязательный) — Сообщение для коммита при отправке. По умолчанию"Upload {object}". - private (
bool, optional) — Определяет, следует ли сделать репозиторий приватным. ЕслиNone(по умолчанию), репозиторий будет публичным, если только по умолчанию для организации не задан приватный режим. Это значение игнорируется, если репозиторий уже существует. - token (
str, необязательный) — Токен, используемый в качестве HTTP bearer-авторизации для удалённых файлов. Токен, сгенерированный при выполненииhf auth login(хранится в~/.huggingface). - create_pr (
bool, необязательный, по умолчаниюFalse) — Создавать ли PR с загруженными файлами или коммитить изменения напрямую. - safe_serialization (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли преобразовать веса модели в форматsafetensors. - variant (
str, необязательный) — Если указано, веса сохраняются в форматеpytorch_model.<variant>.bin.
Загрузите файлы модели, планировщика или конвейера в 🤗 Hugging Face Hub.
Примеры:
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")