Diffusers documentation

Планировщики

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Планировщики

🤗 Diffusers предоставляет множество функций планировщика для процесса диффузии. Планировщик принимает выход модели (образец, с которым работает процесс диффузии) и шаг времени, чтобы вернуть образец с удалённым шумом. Шаг времени важен, так как он определяет, на какой стадии процесса диффузии выполняется шаг: данные генерируются путём итерации вперёд на n шагов времени, а инференс происходит путём распространения назад через шаги времени. В зависимости от шага времени планировщик может быть дискретным, в этом случае шаг времени — это int, или непрерывным, в этом случае шаг времени — это float.

В зависимости от контекста планировщик определяет, как итеративно добавлять шум к изображению или как обновлять образец на основе вывода модели:

  • в процессе обучения планировщик добавляет шум (существуют различные алгоритмы добавления шума) к образцу для обучения диффузионной модели
  • во время inference планировщик определяет, как обновлять образец на основе вывода предобученной модели

Многие планировщики реализованы на основе библиотеки k-diffusion от Katherine Crowson и также широко используются в A1111. Чтобы сопоставить планировщики из k-diffusion и A1111 с планировщиками в 🤗 Diffusers, обратитесь к таблице ниже:

A1111/k-diffusion🤗 DiffusersИспользование
DPM++ 2MDPMSolverMultistepScheduler
DPM++ 2M KarrasDPMSolverMultistepSchedulerinit с use_karras_sigmas=True
DPM++ 2M SDEDPMSolverMultistepSchedulerinit с algorithm_type="sde-dpmsolver++"
DPM++ 2M SDE KarrasDPMSolverMultistepSchedulerinit с use_karras_sigmas=True и algorithm_type="sde-dpmsolver++"
DPM++ 2S aN/Aочень похож на DPMSolverSinglestepScheduler
DPM++ 2S a KarrasN/Aочень похоже на DPMSolverSinglestepScheduler(use_karras_sigmas=True, ...)
DPM++ SDEDPMSolverSinglestepScheduler
DPM++ SDE KarrasDPMSolverSinglestepSchedulerinit с use_karras_sigmas=True
DPM2KDPM2DiscreteScheduler
DPM2 KarrasKDPM2DiscreteSchedulerinit с use_karras_sigmas=True
DPM2 aKDPM2AncestralDiscreteScheduler
DPM2 a KarrasKDPM2AncestralDiscreteSchedulerinit с use_karras_sigmas=True
DPM адаптивныйN/A
DPM fastN/A
EulerEulerDiscreteScheduler
Euler aEulerAncestralDiscreteScheduler
HeunHeunDiscreteScheduler
LMSLMSDiscreteScheduler
LMS KarrasLMSDiscreteSchedulerinit с use_karras_sigmas=True
N/ADEISMultistepScheduler
N/AUniPCMultistepScheduler

Шкалы шума и типы шкал

A1111/k-diffusion🤗 Diffusers
Karrasinit с use_karras_sigmas=True
sgm_uniforminit с timestep_spacing="trailing"
простойinit с timestep_spacing="trailing"
экспоненциальныйinit с timestep_spacing="linspace", use_exponential_sigmas=True
betainit с timestep_spacing="linspace", use_beta_sigmas=True

Все планировщики создаются на основе базового класса SchedulerMixin, который реализует низкоуровневые утилиты, общие для всех планировщиков.

SchedulerMixin

класс diffusers.SchedulerMixin

< >

( )

Базовый класс для всех планировщиков.

SchedulerMixin содержит общие функции, используемые всеми планировщиками, такие как общие функции загрузки и сохранения.

ConfigMixin отвечает за сохранение атрибутов конфигурации (таких как num_train_timesteps), которые передаются в функцию __init__ планировщика, а доступ к атрибутам осуществляется через scheduler.config.num_train_timesteps.

Атрибуты класса:

  • _compatibles (list[str]) — список классов планировщиков, совместимых с родительским классом планировщика. Используйте from_config() для загрузки другого совместимого класса планировщика (должно быть переопределено в родительском классе).

from_pretrained

< >

( 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

< >

( 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

< >

( prev_sample: Tensor )

Параметры

  • prev_sample (torch.Tensor формы (batch_size, num_channels, height, width) для изображений) — Вычисленная выборка (x_{t-1}) предыдущего шага. prev_sample следует использовать как следующий вход модели в цикле шумоподавления.

Базовый класс для результата функции step планировщика.

KarrasDiffusionSchedulers

KarrasDiffusionSchedulers представляют собой широкую обобщающую форму для планировщиков в 🤗 Diffusers. Планировщики этого класса различаются на высоком уровне по стратегии выборки шума, типу сети и масштабированию, стратегии обучения и способу взвешивания функции потерь.

Различные планировщики в этом классе, в зависимости от типа решателя обыкновенных дифференциальных уравнений (ODE), подпадают под вышеописанную классификацию и обеспечивают хорошую абстракцию для проектирования основных планировщиков, реализованных в 🤗 Diffusers. Планировщики этого класса приведены здесь.

PushToHubMixin

класс diffusers.utils.PushToHubMixin

< >

( )

Миксин для загрузки модели, планировщика или конвейера на Hugging Face Hub.

push_to_hub

< >

( 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")
Update on GitHub