Diffusers documentation

FlowMapEulerDiscreteScheduler

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