huggingface / huggingface/diffusers

DDIMScheduler.step() logic mismatches set_timesteps() list when using timestep_spacing='linspace'

Offen
#12,633 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
bug stale
Vorherrschende Sprache
Python
Sterne
34.5k
Forks
7.3k
Ø Merge
3 T. 3 Std.
Gemergte PRs (30 T.)
91

Beschreibung

### Describe the bug

The step() function calculates prev_timestep using a hard-coded formula:
`prev_timestep = timestep - self.config.num_train_timesteps // self.num_inference_steps.`
https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_ddim.py#L402

However, if the scheduler is initialized with timestep_spacing="linspace", the preve_timestep is not match the set_timesteps.

Suggested Method to Fix:
This inconsistency could be resolved by modifying the step() function to look up the correct prev_timestep from the self.timesteps list directly, just as in DDPMScheduler.
https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_ddpm.py#L549

### Reproduction

```
scheduler = DDIMScheduler.from_pretrained(model_id, subfolder='scheduler', timestep_spacing="linspace")
scheduler.set_timesteps(10)
prev_timesteps = []
for t in scheduler.timesteps:
prev_t = t- 1000 // num_inference_steps
prev_timesteps.append(prev_t.item())
```

### Logs

```shell

```

### System Info

Diffusers version: 0.35.2

### Who can help?

_No response_

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne in src/diffusers/schedulers/scheduling_ddim.py bei DDIMScheduler.step() und vergleiche die Berechnung des vorherigen Zeitschritts mit der in src/diffusers/schedulers/scheduling_ddpm.py verwendeten Suche. Führe die linspace-Reproduktion mit set_timesteps(10) aus und überprüfe, dass step() für jeden Zeitschritt dem entsprechenden self.timesteps-Eintrag folgt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
machine-learning
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
45/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.