Diffusers documentation
FlowMapEulerDiscreteScheduler
FlowMapEulerDiscreteScheduler
FlowMapEulerDiscreteScheduler là một bộ lấy mẫu kiểu Euler được thiết kế cho các mô hình khuếch tán đã được chưng cất theo flow-map. Các mô hình flow-map học các chuyển tiếp có khoảng cách tùy ý thay vì ánh xạ cố định của các mô hình consistency. Cả hai đầu mút của bước đều do người gọi cung cấp, điều này cho phép lấy mẫu với số bước tùy ý: một checkpoint đã chưng cất duy nhất có thể được đánh giá ở 1, 2, 4, 8, 16… NFE mà không cần huấn luyện lại.
Trình điều phối được giới thiệu trong AnyFlow: Any-Step Video Diffusion Model with On-Policy Flow Map Distillation và được cung cấp cùng các tích hợp AnyFlowPipeline và AnyFlowFARPipeline, nhưng nó không dành riêng cho AnyFlow — bất kỳ checkpoint nào được chưng cất bằng flow-map đều có thể sử dụng nó.
FlowMapEulerDiscreteScheduler
lớp diffusers.FlowMapEulerDiscreteScheduler
< source >( num_train_timesteps: int = 1000shift: float = 1.0 )
Tham số
- num_train_timesteps (int, mặc định là 1000) — Số bước khuếch tán được sử dụng để huấn luyện mô hình flow-map cơ bản.
- shift (float, mặc định là 1.0) —
Hệ số dịch chuyển bước thời gian nhân áp dụng cho lịch suy luận.
shift=1.0là phép đồng nhất; các giá trị lớn hơn 1.0 đẩy lịch tiến tới việc khử nhiễu nhiều hơn ở các bước sau (ví dụ,shift=5khớp với mặc định của Wan2.1).
Bộ lấy mẫu kiểu Euler cho các mô hình khuếch tán được chưng cất bằng flow-map.
Mô hình Flow-map học các chuyển tiếp với khoảng thời gian tùy ý thay vì ánh xạ cố định của mô hình consistency, do đó một checkpoint đã được chưng cất có thể được đánh giá ở 1, 2, 4, 8, … NFE mà không cần huấn luyện lại. Phương pháp step tiến mẫu từ timestep đến r_timestep dọc theo vận tốc dự đoán.
Được giới thiệu trong AnyFlow: Any-Step Video Diffusion Model with On-Policy Flow Map Distillation của Yuchao Gu, Guian Fang và cộng sự.
Trình lập lịch này kế thừa từ [SchedulerMixin] và [ConfigMixin]. Xem tài liệu của lớp cha để biết các phương thức chung được triển khai cho tất cả các trình lập lịch (tải, lưu, v.v.).
Áp dụng phép biến đổi dịch chuyển đã cấu hình lên một tensor sigma.
Trả về chỉ số của timestep trên lịch trình hiện tại, hoặc None nếu không nằm trong lịch trình.
Việc tra cứu được thực hiện đối với self.timesteps với một dung sai fp nhỏ. Được sử dụng để khôi phục sigma tương ứng mà không giả định mối quan hệ tuyến tính timesteps = sigmas * num_train_timesteps — nhờ đó, một lịch trình tùy chỉnh (ví dụ: dịch chuyển phi tuyến, timesteps được đặt thủ công) vẫn được phân giải chính xác.
Thang đo nhận dạng không thao tác. Được cung cấp để đảm bảo tương thích API với các trình lập lịch Diffusers khác.
scale_noise
< source >( sample: FloatTensortimestep: typing.Union[float, torch.FloatTensor]noise: typing.Optional[torch.FloatTensor] = None )
Nội suy tuyến tính sample về phía noise theo timestep đã được chuẩn hóa.
Đặt chỉ số bắt đầu cho trình lập lịch. Các pipeline bắt đầu giữa lịch trình (ví dụ: image-to-image) sẽ gọi hàm này giữa set_timesteps và step đầu tiên để neo quá trình rollout.
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 )
Tham số
- num_inference_steps (int, tùy chọn) —
Số bước suy luận. Nếu là
None, phải truyềnsigmashoặctimesteps. - device (str hoặc torch.device, tùy chọn) —
Thiết bị đích cho
self.sigmas/self.timesteps. - sigmas (List[float], optional) —
Lịch sigma tùy chỉnh có độ dài
num_inference_steps. Sigma cuối cùng0sẽ được thêm vào tự động. Giá trịshiftđã cấu hình sẽ được áp dụng lên trên. - timesteps (List[float], tuỳ chọn) —
Lịch trình timestep tùy chỉnh có độ dài
num_inference_steps, cùng đơn vị vớiself.timesteps(tức là được nhân vớinum_train_timesteps). Được chuyển đổi thành sigmas bên trong. Nếu cảsigmasvàtimestepsđều được truyền vào, độ dài của chúng phải khớp nhau.
Xây dựng lịch trình bước thời gian suy luận.
Theo dõi nội bộ self.sigmas có độ dài num_inference_steps + 1 (shift được cấu hình áp dụng cho một
linspace từ 1.0 đến 0.0 theo mặc định); self.timesteps hiển thị num_inference_steps sigmas đầu tiên được nhân với num_train_timesteps — tức là một timestep cho mỗi bước suy luận, khớp với FlowMatchEulerDiscreteScheduler. Sigma cuối cùng (0) là điểm cuối r ngầm của bước cuối và được thêm tự động khi sigmas / timesteps do người dùng cung cấp.
bước
< 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
Tham số
- model_output (torch.Tensor) — Đầu ra trực tiếp từ mô hình flow-map (tốc độ trung bình dự đoán).
- timestep (float hoặc torch.Tensor) —
Timestep nguồn
tcùng đơn vị vớiself.timesteps. - sample (torch.Tensor) — Current sample{@html "zt"}.
- r_timestep (float hoặc torch.Tensor, optional) —
Bước thời gian đích
r. Mặc định là bước thời gian tiếp theo trên lịch trình khiNone; truyền một giá trị rõ ràng cho việc lấy mẫu any-step.r_timestep == timesteplà một thao tác không làm gì (no-op). - return_dict (bool, mặc định là True) — Có nên trả về [FlowMapEulerDiscreteSchedulerOutput] (mặc định) hay một tuple thông thường.
Trả về
[FlowMapEulerDiscreteSchedulerOutput] hoặc tuple
Khi return_dict=True, trả về một [FlowMapEulerDiscreteSchedulerOutput] mà prev_sample của nó là{@html "zr"}. Ngược lại, trả về một 1-tuple (prev_sample,).
Tiến hành sample từ timestep đến r_timestep bằng cách sử dụng vận tốc do mô hình dự đoán.
Khác với trình lập lịch Euler tiêu chuẩn, cả hai đầu mút của khoảng đều có thể do người gọi cung cấp, cho phép lấy mẫu với bất kỳ bước nào: một lần gọi mô hình có thể bước từ t đến bất kỳ đích r nào được chọn (bao gồm r=0 cho việc tạo một lần duy nhất). Khi r_timestep bị bỏ qua, giá trị mặc định sẽ là bước thời gian tiếp theo trong lịch (khớp với ngữ nghĩa của FlowMatchEulerDiscreteScheduler).
Bên trong, các sigma nguồn và đích được khôi phục bằng cách chỉ mục self.sigmas thông qua index_for_timestep thay vì chia các timestep đầu vào cho num_train_timesteps, do đó bất kỳ lịch trình nào có mối quan hệ timestep / sigma phi tuyến tính (ví dụ như một shift tùy chỉnh) vẫn được giữ đúng. Đối với một r_timestep ngoài lịch trình, trình điều độ sẽ quay lại dùng r_timestep / num_train_timesteps để đảm bảo việc lấy mẫu bất kỳ bước nào bên ngoài lịch trình vẫn được hỗ trợ.