Diffusers documentation
FlowMapEulerDiscreteScheduler
FlowMapEulerDiscreteScheduler
FlowMapEulerDiscreteScheduler — это сэмплер в стиле Эйлера, разработанный для дистиллированных диффузионных моделей flow-map. Модели flow-map обучаются переходам на произвольные интервалы вместо фиксированного маппинга моделей 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
< source >( 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 обучаются переходам на произвольных интервалах вместо фиксированного маппинга в моделях 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]. Общие методы, реализованные для всех планировщиков (загрузка, сохранение и т. д.), описаны в документации суперкласса.
Примените настроенное преобразование сдвига к тензору сигмы.
Возвращает индекс timestep в текущем расписании или None, если шаг не входит в расписание.
Поиск выполняется по self.timesteps с небольшим допуском для fp. Используется для восстановления соответствующего sigma без предположения о линейной связи timesteps = sigmas * num_train_timesteps — таким образом, пользовательское расписание (например, нелинейный сдвиг, вручную заданные timesteps) также корректно разрешается.
Масштабирование тождественного преобразования без действия. Предоставлено для обеспечения совместимости API с другими планировщиками Diffusers.
scale_noise
< source >( sample: FloatTensortimestep: typing.Union[float, torch.FloatTensor]noise: typing.Optional[torch.FloatTensor] = None )
Линейно интерполируйте sample в сторону noise в соответствии с нормализованным timestep.
Устанавливает начальный индекс для планировщика. Конвейеры, которые начинают работу с середины расписания (например, image-to-image), вызывают этот метод между set_timesteps и первым step, чтобы зафиксировать точку начала развертывания.
set_timesteps
< source >( 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 заданы пользователем.
шаг
< source >( 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) — Текущая выборка .
- 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 равно
. В противном случае возвращает 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, так что выборка на произвольном шаге вне раскладки по-прежнему поддерживается.