Buckets:
FlowMapEulerDiscreteScheduler
FlowMapEulerDiscreteScheduler là một trình lấy mẫu theo phong cách Euler, được thiết kế cho các mô hình khuếch tán đã được chưng cất bằng flow-map. Các mô hình flow-map học các chuyển tiếp có khoảng tùy ý $\mathbf{z}_t \to \mathbf{z}_r$ thay vì ánh xạ cố định $\mathbf{z}_t \to \mathbf{z}_0$ 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, đây chính là yếu tố 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 kèm theo các tích hợp AnyFlowPipeline và AnyFlowFARPipeline, nhưng nó không chỉ dành riêng cho AnyFlow — bất kỳ checkpoint nào đã được chưng cất flow-map đều có thể sử dụng nó.
FlowMapEulerDiscreteScheduler[[diffusers.FlowMapEulerDiscreteScheduler]]
diffusers.FlowMapEulerDiscreteScheduler[[diffusers.FlowMapEulerDiscreteScheduler]]
diffusers.FlowMapEulerDiscreteScheduler(num_train_timesteps: int = 1000, shift: 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.0 là phép đồng nhất; các giá trị lớn hơn 1.0 đẩy lịch tiến gần hơn đến việc khử nhiễu ở các bước muộn hơn (ví dụ, shift=5 khớ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 có khoảng tùy ý thay vì ánh xạ cố định của các 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 thức step di chuyể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.).
apply_shift[[diffusers.FlowMapEulerDiscreteScheduler.apply_shift]]
apply_shift(sigmas: Tensor)
Áp dụng phép biến đổi dịch chuyển đã cấu hình lên một tensor sigma.
index_for_timestep[[diffusers.FlowMapEulerDiscreteScheduler.index_for_timestep]]
index_for_timestep(timestep: typing.Union[float, torch.FloatTensor])
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.
scale_model_input[[diffusers.FlowMapEulerDiscreteScheduler.scale_model_input]]
scale_model_input(sample: Tensor, *args, **kwargs)
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[[diffusers.FlowMapEulerDiscreteScheduler.scale_noise]]
scale_noise(sample: FloatTensor, timestep: 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.
set_begin_index[[diffusers.FlowMapEulerDiscreteScheduler.set_begin_index]]
set_begin_index(begin_index: int = 0)
Đặ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[[diffusers.FlowMapEulerDiscreteScheduler.set_timesteps]]
set_timesteps(num_inference_steps: typing.Optional[int] = None, device: typing.Union[str, torch.device] = None, sigmas: typing.Optional[typing.List[float]] = None, timesteps: typing.Optional[typing.List[float]] = None)
Tham số:
num_inference_steps (int, optional) : Số bước suy luận. Nếu là None, phải truyền sigmas hoặc timesteps.
device (str hoặc torch.device, tuỳ 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ùng 0 sẽ được thêm vào tự động. Giá trị shift đã cấu hình sẽ được áp dụng thêm lên trên.
timesteps (List[float], optional) : Lịch trình bước thời gian tùy chỉnh có độ dài num_inference_steps, cùng đơn vị với self.timesteps (tức là được nhân với num_train_timesteps). Được chuyển đổi thành sigmas bên trong. Nếu cả sigmas và 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 (mặc định là shift được cấu hình áp dụng cho một linspace từ 1.0 đến 0.0); 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[[diffusers.FlowMapEulerDiscreteScheduler.step]]
step(model_output: FloatTensor, timestep: typing.Union[float, torch.FloatTensor], sample: FloatTensor, r_timestep: typing.Union[float, torch.FloatTensor, NoneType] = None, return_dict: bool = True)
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) : Bước thời gian nguồn t cùng đơn vị với self.timesteps.
sample (torch.Tensor) : Mẫu hiện tại .
r_timestep (float hoặc torch.Tensor, optional) : Timestep đích r. Mặc định là timestep tiếp theo trên lịch trình khi None; truyền một giá trị rõ ràng cho any-step sampling. r_timestep == timestep là một thao tác không làm gì (no-op).
return_dict (bool, mặc định là True) : Xác định việc trả về một [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à . 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 sinh một lần). 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 nằm 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ợ.
Xet Storage Details
- Size:
- 10.3 kB
- Xet hash:
- 3a83f5daad83a68b2d506e629f0819d1169437ed5efce2c333e72740988d881b
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.