Diffusers documentation

FlowMapEulerDiscreteScheduler

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.43.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

FlowMapEulerDiscreteScheduler

FlowMapEulerDiscreteScheduler — это сэмплер в стиле Эйлера, разработанный для дистиллированных диффузионных моделей flow-map. Модели flow-map обучаются переходам на произвольные интервалы zt→zr\mathbf{z}_t \to \mathbf{z}_r вместо фиксированного zt→z0\mathbf{z}_t \to \mathbf{z}_0 маппинга моделей consistency. Обе точки шага задаются вызывающим кодом, что и позволяет выполнять сэмплирование за любое число шагов: одну дистиллированную контрольную точку можно оценить за 1, 2, 4, 8, 16… NFE без повторного обучения.

Планировщик был представлен в AnyFlow: Any-Step Video Diffusion Model with On-Policy Flow Map Distillation и поставляется с интеграциями AnyFlowPipeline и AnyFlowFARPipeline, но не является специфичным для AnyFlow — его можно использовать с любым чекпоинтом, обученным с помощью дистилляции flow-map.

FlowMapEulerDiscreteScheduler

класс diffusers.FlowMapEulerDiscreteScheduler

< >

( num_train_timesteps: int = 1000shift: float = 1.0 )

Параметры

  • num_train_timesteps (int, по умолчанию 1000) — Количество шагов диффузии, используемых для обучения базовой модели flow-map.
  • shift (float, по умолчанию 1.0) — Множитель сдвига временных шагов, применяемый к расписанию инференса. shift=1.0 — это тождественное преобразование; значения больше 1.0 смещают расписание в сторону более сильного денойзинга на поздних шагах (например, shift=5 соответствует значению по умолчанию в Wan2.1).

Сэмплер в стиле Эйлера для дистиллированных диффузионных моделей с картой потока.

Модели Flow-map обучаются переходам на произвольных интервалах zt→zrz_t \to z_r вместо фиксированного zt→z0z_t \to z_0 маппинга в моделях consistency, поэтому одну дистиллированную контрольную точку можно оценивать при 1, 2, 4, 8, … NFE без повторного обучения. Метод step перемещает образец из timestep в r_timestep вдоль предсказанной скорости.

Представлено в AnyFlow: Any-Step Video Diffusion Model with On-Policy Flow Map Distillation от Yuchao Gu, Guian Fang и др.

Этот планировщик наследуется от [SchedulerMixin] и [ConfigMixin]. Общие методы, реализованные для всех планировщиков (загрузка, сохранение и т. д.), описаны в документации суперкласса.

apply_shift

< >

( sigmas: Tensor )

Примените настроенное преобразование сдвига к тензору сигмы.

index_for_timestep

< >

( timestep: typing.Union[float, torch.FloatTensor] )

Возвращает индекс timestep в текущем расписании или None, если шаг не входит в расписание.

Поиск выполняется по self.timesteps с небольшим допуском для fp. Используется для восстановления соответствующего sigma без предположения о линейной связи timesteps = sigmas * num_train_timesteps — таким образом, пользовательское расписание (например, нелинейный сдвиг, вручную заданные timesteps) также корректно разрешается.

scale_model_input

< >

( sample: Tensor*args**kwargs )

Масштабирование тождественного преобразования без действия. Предоставлено для обеспечения совместимости API с другими планировщиками Diffusers.

scale_noise

< >

( sample: FloatTensortimestep: typing.Union[float, torch.FloatTensor]noise: typing.Optional[torch.FloatTensor] = None )

Линейно интерполируйте sample в сторону noise в соответствии с нормализованным timestep.

set_begin_index

< >

( begin_index: int = 0 )

Устанавливает начальный индекс для планировщика. Конвейеры, которые начинают работу с середины расписания (например, image-to-image), вызывают этот метод между set_timesteps и первым step, чтобы зафиксировать точку начала развертывания.

set_timesteps

< >

( num_inference_steps: typing.Optional[int] = Nonedevice: typing.Union[str, torch.device] = Nonesigmas: typing.Optional[typing.List[float]] = Nonetimesteps: typing.Optional[typing.List[float]] = None )

Параметры

  • num_inference_steps (int, необязательный) — Количество шагов инференса. Если None, необходимо передать sigmas или timesteps.
  • device (str или torch.device, необязательный) — Целевое устройство для self.sigmas / self.timesteps.
  • sigmas (List[float], optional) — Пользовательское расписание сигм длины num_inference_steps. Конечное значение 0 добавляется автоматически. На него дополнительно применяется настроенный shift.
  • timesteps (List[float], optional) — Пользовательское расписание временных шагов длины num_inference_steps, в тех же единицах, что и self.timesteps (то есть масштабированное на num_train_timesteps). Внутренне преобразуется в сигмы. Если переданы и sigmas, и timesteps, их длины должны совпадать.

Сформируйте расписание шагов времени для инференса.

Внутренне отслеживает self.sigmas длины num_inference_steps + 1 (по умолчанию применяется настроенный сдвиг к linspace от 1.0 до 0.0); self.timesteps предоставляет первые num_inference_steps сигм, масштабированные на num_train_timesteps — то есть один временной шаг на каждый шаг инференса, что соответствует FlowMatchEulerDiscreteScheduler. Последняя сигма (0) является неявной правой границей последнего шага и добавляется автоматически, если sigmas / timesteps заданы пользователем.

шаг

< >

( model_output: FloatTensortimestep: typing.Union[float, torch.FloatTensor]sample: FloatTensorr_timestep: typing.Union[float, torch.FloatTensor, NoneType] = Nonereturn_dict: bool = True ) → [FlowMapEulerDiscreteSchedulerOutput] or tuple

Параметры

  • model_output (torch.Tensor) — Прямой выход модели flow-map (предсказанная средняя скорость).
  • timestep (float или torch.Tensor) — Исходный шаг t в тех же единицах, что и self.timesteps.
  • sample (torch.Tensor) — Текущая выборка ztz_t.
  • r_timestep (float или torch.Tensor, optional) — Целевой шаг r. По умолчанию используется следующий шаг расписания, если значение равно None; передайте явное значение для any-step sampling. r_timestep == timestep не выполняет никаких действий.
  • return_dict (bool, по умолчанию True) — Определяет, возвращать ли [FlowMapEulerDiscreteSchedulerOutput] (по умолчанию) или обычный кортеж.

Возвращает

[FlowMapEulerDiscreteSchedulerOutput] или tuple

Если return_dict=True, возвращает [FlowMapEulerDiscreteSchedulerOutput], у которого prev_sample равно zrz_r. В противном случае возвращает 1-кортеж (prev_sample,).

Выполните шаг sample от timestep до r_timestep с использованием скорости, предсказанной моделью.

В отличие от стандартного планировщика Эйлера, обе границы интервала могут быть заданы вызывающей стороной, что позволяет выполнять сэмплирование за любое число шагов: один вызов модели может сделать шаг от t к любой выбранной цели r (включая r=0 для генерации за один шаг). Если r_timestep не указан, по умолчанию используется следующий шаг расписания (соответствует семантике FlowMatchEulerDiscreteScheduler).

Внутренне сигмы источника и цели восстанавливаются путём индексирования self.sigmas через index_for_timestep, а не делением входных временных шагов на num_train_timesteps, поэтому любая раскладка, в которой связь между временным шагом и сигмой нелинейна (например, с пользовательским сдвигом), остаётся корректной. Для r_timestep вне раскладки планировщик использует запасной вариант r_timestep / num_train_timesteps, так что выборка на произвольном шаге вне раскладки по-прежнему поддерживается.

Update on GitHub