diff --git a/examples/train/configs/self_forcing_wangame.yaml b/examples/train/configs/self_forcing_wangame.yaml index 2c9240079..ef6541be3 100644 --- a/examples/train/configs/self_forcing_wangame.yaml +++ b/examples/train/configs/self_forcing_wangame.yaml @@ -20,6 +20,7 @@ method: generator_update_interval: 5 real_score_guidance_scale: 1.0 dmd_denoising_steps: [1000, 750, 500, 250] + warp_denoising_step: true chunk_size: 3 student_sample_type: sde @@ -88,6 +89,7 @@ callbacks: max_grad_norm: 1.0 validation: pipeline_target: fastvideo.pipelines.basic.wan.wangame_causal_dmd_pipeline.WangameCausalSdeDMDPipeline + scheduler_target: fastvideo.models.schedulers.scheduling_self_forcing_flow_match.SelfForcingFlowMatchScheduler dataset_file: examples/training/finetune/WanGame2.1_1.3b_i2v/validation_4.json every_steps: 5 sampling_steps: [4] diff --git a/fastvideo/train/callbacks/validation.py b/fastvideo/train/callbacks/validation.py index 9da6e0145..5af014170 100644 --- a/fastvideo/train/callbacks/validation.py +++ b/fastvideo/train/callbacks/validation.py @@ -145,6 +145,7 @@ class ValidationCallback(Callback): self._last_scalar_metrics: dict[str, float] = {} self._last_mf_angle_err_mean: float = float("inf") self._last_eval_step: int = -1 + self._logged_sampling_step_configs: set[int] = set() # ---------------------------------------------------------- # Callback hooks @@ -626,6 +627,8 @@ class ValidationCallback(Callback): for s in pk["dmd_denoising_steps"] ] + self._logged_sampling_step_configs.add(int(num_inference_steps)) + # ---------------------------------------------------------- # Pipeline management # ---------------------------------------------------------- @@ -696,7 +699,19 @@ class ValidationCallback(Callback): SchedulerCls = resolve_target( self.scheduler_target ) - return SchedulerCls(shift=float(flow_shift)) + scheduler = SchedulerCls(shift=float(flow_shift)) + if SchedulerCls.__name__ == "SelfForcingFlowMatchScheduler": + if hasattr(scheduler, "sigma_min"): + scheduler.sigma_min = 0.0 + if hasattr(scheduler, "extra_one_step"): + scheduler.extra_one_step = True + if hasattr(scheduler, "set_timesteps"): + scheduler.set_timesteps( + num_inference_steps=1000, + training=True, + ) + + return scheduler # ---------------------------------------------------------- # Batch preparation