Skip to content

Add OmniDreams evaluation and regression for long running outputs#342

Merged
jarcherNV merged 10 commits into
mainfrom
dev/jarcher/qualityeval
Jun 24, 2026
Merged

Add OmniDreams evaluation and regression for long running outputs#342
jarcherNV merged 10 commits into
mainfrom
dev/jarcher/qualityeval

Conversation

@jarcherNV

@jarcherNV jarcherNV commented Jun 19, 2026

Copy link
Copy Markdown
Collaborator
  • Add resumable HF scene discovery, batching, staging, generation, and validation tooling
  • Add DrivingGen FVD-lite integration with split-specific reference staging
  • Capture machine-readable evaluator logs/results for regression tracking
  • Add tests for eval manifests, staging, validation, and FVD adapter behavior
  • Add WorldLens checkout, staging, evaluation, and result collection helpers
  • Add CLI commands for setup-worldlens, prepare-worldlens, and worldlens-evaluate
  • Add tests for WorldLens config, staging, manifest, and result handling

@copy-pr-bot

copy-pr-bot Bot commented Jun 19, 2026

Copy link
Copy Markdown

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

@jarcherNV jarcherNV marked this pull request as draft June 19, 2026 11:57
@jarcherNV

jarcherNV commented Jun 19, 2026

Copy link
Copy Markdown
Collaborator Author

This is mostly just a prototype for quality regression tests using the method from the DrivingGen paper. It's not clear to me yet if this is actually useful or not, but it does seem to work at least.

- Add resumable HF scene discovery, batching, staging, generation, and validation tooling
- Add DrivingGen FVD-lite integration with split-specific reference staging
- Capture machine-readable evaluator logs/results for regression tracking
- Add tests for eval manifests, staging, validation, and FVD adapter behavior
@jarcherNV jarcherNV force-pushed the dev/jarcher/qualityeval branch from 365f5d1 to 456e9cc Compare June 19, 2026 12:01
@greptile-apps

greptile-apps Bot commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

Adds a complete omnidreams-eval CLI and supporting library (omnidreams/eval/) that automates resumable batch evaluation of OmniDreams scenes: HuggingFace discovery → batch planning → staging → FlashDreams generation → validation → DrivingGen FVD-lite → WorldLens consistency metrics → Markdown/JSON summary report.

  • All previously flagged issues (bare FileNotFoundError in validate_generated_run, KeyError in parse_byte_size, CalledProcessError escaping _cmd_generate, TypeError in summarize-run for None frame counts, and missing generation.json on resume) have been addressed in this revision.
  • The DrivingGen integration patches the cloned checkout in-place to make checkpoint paths configurable via environment variables, and the FVD calculation runs in-process via _calculate_styleganv_fvd with sys.path and CWD temporarily mutated and restored.
  • The WorldLens adapter writes a Hydra config, stages frame-matched reference clips alongside generated ones, and collects per-artifact metric JSONs after evaluation.

Confidence Score: 5/5

Safe to merge; all previously blocking defects are resolved in this revision.

Every issue raised in prior review rounds has been corrected and is covered by the new test suite. The one remaining note is a sys.modules caching concern in the in-process FVD computation path, which only matters when multiple drivinggen_root checkouts are used in the same Python process.

integrations/omnidreams/omnidreams/eval/drivinggen.py — specifically _calculate_styleganv_fvd and its importlib.import_module call.

Important Files Changed

Filename Overview
integrations/omnidreams/omnidreams/eval/cli.py 784-line CLI with 15 subcommands; generation error-handling updated to raise RuntimeError (not CalledProcessError) and is caught correctly; all previously flagged issues addressed.
integrations/omnidreams/omnidreams/eval/drivinggen.py DrivingGen checkout, patch, staging, and in-process FVD-lite path; the importlib.import_module call in _calculate_styleganv_fvd caches the StyleGAN-V module in sys.modules, which can cause the wrong code to execute on repeated calls with different drivinggen_root values in the same process.
integrations/omnidreams/omnidreams/eval/generation.py Generation orchestration; resume path now correctly writes missing generation.json when the video already exists; all previously flagged issues resolved.
integrations/omnidreams/omnidreams/eval/report.py Run summary builder; None-guarded set comprehensions prevent TypeError in sorted() for missing frame counts; previously reported issue is resolved.
integrations/omnidreams/omnidreams/eval/validation.py Validation now checks generated_root.exists() before iterdir(), resolving the previously reported bare FileNotFoundError.
integrations/omnidreams/omnidreams/eval/worldlens.py WorldLens checkout, config, staging, and result collection; incremental manifest merging is well-handled; frame-count alignment between generated and reference videos is correct for WorldLens.
integrations/omnidreams/tests/test_eval_tooling.py 1129-line test covering manifests, batches, staging, validation, DrivingGen adapter, and WorldLens; includes regression for the off-by-one frame-skip guard and the missing-metadata resume path.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[discover] -->|manifest.jsonl| B[plan-batches]
    B -->|batches.json| C[stage-batch]
    C -->|staged manifest| D[generate]
    D -->|generated.mp4 per UUID| E[validate-generation]
    E -->|validation.json| F[summarize-run]

    D --> G[prepare-drivinggen]
    G --> H[drivinggen-fvd-lite]
    H -->|fvd-lite.json| F

    D --> I[prepare-worldlens]
    I --> J[worldlens-evaluate]
    J -->|worldlens.json| F

    subgraph Setup
        S1[setup-evaluator] -->|DrivingGen checkout| G
        S2[setup-worldlens] -->|WorldLens checkout + config| I
    end
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
    A[discover] -->|manifest.jsonl| B[plan-batches]
    B -->|batches.json| C[stage-batch]
    C -->|staged manifest| D[generate]
    D -->|generated.mp4 per UUID| E[validate-generation]
    E -->|validation.json| F[summarize-run]

    D --> G[prepare-drivinggen]
    G --> H[drivinggen-fvd-lite]
    H -->|fvd-lite.json| F

    D --> I[prepare-worldlens]
    I --> J[worldlens-evaluate]
    J -->|worldlens.json| F

    subgraph Setup
        S1[setup-evaluator] -->|DrivingGen checkout| G
        S2[setup-worldlens] -->|WorldLens checkout + config| I
    end
Loading

Reviews (7): Last reviewed commit: "Document OmniDreams evaluation workflow" | Re-trigger Greptile

Comment thread integrations/omnidreams/omnidreams/eval/batches.py
Comment thread integrations/omnidreams/omnidreams/eval/validation.py
- Add WorldLens checkout, staging, evaluation, and result collection helpers
- Add CLI commands for setup-worldlens, prepare-worldlens, and worldlens-evaluate
- Stage generated clips with cropped frame-matched reference videos
- Preserve DrivingGen as a separate fixed-split regression evaluator
- Add tests for WorldLens config, staging, manifest, and result handling
Adds summarize-run to collect generated clip counts, validation status,
DrivingGen FVD-lite results, and WorldLens consistency metrics into JSON
and Markdown reports. Includes tests for report generation and keeps the
summary focused on current metrics rather than future deepening options.
@jarcherNV

Copy link
Copy Markdown
Collaborator Author

Quick summary of the evaluation work:

This is an automated evaluation path around the existing Hugging Face scene inputs. The tooling can stage scenes in batches, run FlashDreams/OmniDreams inference, validate generated clips, and run two separate evaluators.

What it can do now:

  • Download/stage existing scene inputs in manageable batches.
  • Generate clips with FlashDreams from the existing first frames, prompts, and HD-map videos.
  • Validate basic generation health: expected files, frame counts, total blocks, log-derived metadata, and failures.
  • Run DrivingGen FVD-lite as a fixed-split regression metric. This is useful for comparing future OmniDreams checkpoints on the same scenes.
  • Run WorldLens temporal/subject consistency metrics. These give standalone higher-is-better video consistency signals.
  • Write a compact evaluation-summary.json and evaluation-summary.md via summarize-run.

What it cannot currently do:

  • It cannot give a universal “model quality” score that is meaningful without comparison.
  • It cannot directly measure ego path correctness, off-road behavior, collisions, traffic-rule compliance, or planner usefulness.
  • It cannot infer reliable 3D scene state from the generated RGB alone.
  • DrivingGen FVD-lite should not be used to compare different scene batches against each other.
  • Current WorldLens mode measures video consistency, not full simulator fidelity.

A future driving-quality evaluator would need:

  • Intended ego trajectory or control inputs.
  • Map geometry in metric coordinates, not just rendered HD-map pixels.
  • Camera calibration and pose timing.
  • Object detections/tracks or ground-truth 3D boxes.
  • A way to align generated video frames back to world/map coordinates.
  • Metrics for lane adherence, off-road rate, collision risk, object persistence, traffic-agent behavior, and action-following.
  • Ideally a planner/perception stack to test whether downstream driving behavior remains safe in the generated world.

@jarcherNV jarcherNV changed the title Add OmniDreams evaluation automation and DrivingGen FVD regression Add OmniDreams evaluation and regression for long running outputs Jun 20, 2026
Handle invalid byte-size suffixes with a clear ValueError, report missing
generated output directories explicitly during validation, and fix the
DrivingGen FVD staging minimum so the seed-frame skip still leaves at least
100 usable frames. Add regression tests for each case.
@jarcherNV

Copy link
Copy Markdown
Collaborator Author

/ok to test 9baf68d

Add type narrowing for dynamic evaluator payloads, avoid direct imports from
external DrivingGen checkouts during type checking, and apply ruff formatting
to the OmniDreams evaluator files and tests.
@jarcherNV

Copy link
Copy Markdown
Collaborator Author

/ok to test 531bbeb

@jarcherNV jarcherNV marked this pull request as ready for review June 23, 2026 18:18
@greptile-apps

greptile-apps Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Want your agent to iterate on Greptile's feedback? Try greploops.

Comment thread integrations/omnidreams/omnidreams/eval/report.py
Filter missing frame-count fields when summarizing WorldLens stage manifests
so summarize-run does not crash on partial staging output. Add regression
coverage and avoid duplicate reference frame counting in DrivingGen staging.
@jarcherNV

Copy link
Copy Markdown
Collaborator Author

/ok to test b846bf1

Comment thread integrations/omnidreams/omnidreams/eval/cli.py
Make streamed FlashDreams generation return the same contextual RuntimeError
style as the log-to-file path, including the scene UUID and exit code, and add
regression coverage for the failure path.
@jarcherNV jarcherNV self-assigned this Jun 23, 2026
Comment thread integrations/omnidreams/omnidreams/eval/generation.py
When generated.mp4 already exists but generation.json is missing, write the
metadata during resume instead of skipping the case permanently. Add regression
coverage to ensure generation is not rerun for this recovery path.
@jarcherNV

Copy link
Copy Markdown
Collaborator Author

/ok to test a2df8b1

@jarcherNV jarcherNV requested a review from gtong-nv June 23, 2026 19:52
env_name="DRIVINGGEN_I3D_CKPT",
default_path=DEFAULT_I3D_TORCHSCRIPT_URL,
upstream_path="/shared_disk/users/yang.zhou/iclr_open_source/DrivingGen/ckpt/i3d_torchscript.pt",
):

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why is this patching needed? Can we consider forking the repo and modify the path there if needed?
Or host the checkpoint somewhere else to avoid another dependency on dropbox

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We could copy the checkpoint to somewhere local I guess. I'm not sure where would be the best place for it that everyone will have access to. I'll see if I can find something.

@gtong-nv

Copy link
Copy Markdown
Collaborator

Overall looks good. There some improvements we can address in follow-up PRs:

  1. Group the metrics (e.g. Wordlens and DrivingGen) in a dedicated directory, or even make a parent class which exposes common run_eval APIs, to be distinguish from other utility files
  2. Document the running instruction, runtime, metrics/report interpretation
  3. Clean up the dependency setup process. Right now the github URL and commit hash hardcoded in the same file, as long with some patching loci. Considering a dedicated fork and group the URLs in a config file

Add README guidance for running omnidreams-eval, expected runtime behavior,
external evaluator setup, and interpretation of validation, DrivingGen, and
WorldLens report metrics.
@jarcherNV

Copy link
Copy Markdown
Collaborator Author

Overall looks good. There some improvements we can address in follow-up PRs:

  1. Group the metrics (e.g. Wordlens and DrivingGen) in a dedicated directory, or even make a parent class which exposes common run_eval APIs, to be distinguish from other utility files
  2. Document the running instruction, runtime, metrics/report interpretation
  3. Clean up the dependency setup process. Right now the github URL and commit hash hardcoded in the same file, as long with some patching loci. Considering a dedicated fork and group the URLs in a config file

Thanks, these suggestions make sense. I added README documentation covering the evaluation workflow, runtime expectations, evaluator setup, and metric/report interpretation. I agree the evaluator organization and dependency pin/config cleanup would be useful, but it might make more sense to cover those in a follow-up PR once we have decided where to permanently host the checkpoint file.

@jarcherNV

Copy link
Copy Markdown
Collaborator Author

/ok to test 376678a

@jarcherNV jarcherNV added this pull request to the merge queue Jun 24, 2026
Merged via the queue into main with commit f6b54f2 Jun 24, 2026
6 checks passed
@jarcherNV jarcherNV deleted the dev/jarcher/qualityeval branch June 24, 2026 00:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants