Skip to content

take-2 is a byte-identical copy of take-1 in 40 of the 198 test scenario-views #84

Closed

Description

@Lostmanu

In the public bucket, 40 of the 198 take-2 test videos have the same md5 as their take-1, both in split-videos/testing/8FPS/ and in split-videos/testing/30FPS/. Physics-IQ Verified on Hugging Face shows the same pattern: 32 to 35 of its 198 pairs (depending on the FPS folder) point to the same LFS object, and all of them are among those 40.

In #28, take-2 is described as the same scenarios recorded a second time, used to estimate the physical variance that scores are normalized against. For the 35 byte-identical Verified pairs at 24 FPS, the public evaluation CSVs have zero take-to-take MSE.

Affected scenarios in Original (all three views unless noted)

ball-behind-rotating-paper, duck-static, glass-stays-same, light-on-block, light-on-mug, light-on-mug-block, light-on-statue, magnet-domino, match-blows-balloon, mirror-ball-rotate, mirror-teapot-rotate, smiley-ball-rotates, teapot-rotates, and duck-falls-in-box (center view only).

Several of them are dynamic scenes (magnet-domino, match-blows-balloon, ball-behind-rotating-paper), where two separate recordings would not produce identical files.

Effect on a published score

The calculation uses IQTable from physiq/calculate_iq_score_stable.py at 8c5fcdf on the public per-view results of Kandinsky-WM 1.0 (the four seeds in eval_results/ of Messimm/Kandinsky-WM-1.0-Physics-IQ-Verified):

Physics-IQ Verified score
recomputed on all 198 scenario-views 30.83 ± 0.86 (leaderboard: 30.8 ± 0.9)
on the 163 remaining scenario-views 34.10 ± 0.71

On the 35 copied scenario-views, the MSE component rounds to 0.000 in all four runs; the individual values range from about 1.70e-7 to 2.61e-5. With zero take-to-take MSE, the component is clip(1e-8 / model_mse, 0, 1) for positive model MSE (calculate_iq_score_stable.py:226 and :262). It is therefore approximately zero for these generations, but not for every possible one: a model MSE of zero receives full credit after clipping.

The table reports the mean and the sample standard deviation across the four seeds, computed before rounding. Excluding these views changes the evaluation set and raises the mean by 3.27 points. This is only a sensitivity check. It does not estimate the score after replacing the copied takes with independent recordings, and it does not establish a change in leaderboard ordering.

One related detail: the CSV reader rounds every per-frame value to four decimals (calculate_iq_score.py:24-36). For duck-falls-in-box (center view) the Verified files differ, but all its take-to-take MSE values round to 0.0000, so 36 scenario-views end up with zero physical-variance MSE in the Kandinsky CSVs.

Reproduce (no video download, standard library only)

md5 check against the public bucket
import json, re, urllib.parse, urllib.request
from collections import defaultdict


def listing(prefix):
    items, tok = [], None
    while True:
        q = {"prefix": prefix, "fields": "items(name,md5Hash),nextPageToken"}
        if tok:
            q["pageToken"] = tok
        url = "https://storage.googleapis.com/storage/v1/b/physics-iq-benchmark/o?" + urllib.parse.urlencode(q)
        d = json.load(urllib.request.urlopen(url))
        items += d.get("items", [])
        tok = d.get("nextPageToken")
        if not tok:
            return items


pairs = defaultdict(dict)
for o in listing("split-videos/testing/8FPS/"):
    m = re.search(r"(perspective-\w+)_take-(\d)_(.+)\.mp4$", o["name"])
    if m:
        view, take, scenario = m.groups()
        pairs[(scenario, view)][take] = o["md5Hash"]
same = sorted(k for k, v in pairs.items() if v.get("1") and v.get("1") == v.get("2"))
print(len(pairs), "pairs,", len(same), "with take-2 identical to take-1")
for scenario, view in same:
    print(scenario, view)

For Physics-IQ Verified, the check compares the Git-object oid of each LFS pointer returned by the Hugging Face tree API at dataset revision b65f567dd8446a4076c7f72446335b3c217a8464. The content SHA-256 itself is masked in the public response; matching pointer objects are evidence of identical referenced content, and no gated video was downloaded. The score comparison runs IQTable.compute_scores_scenario_by_view() on the public CSVs (dataset revision 5e1b90622e45b7b3b85c8418f26886a069b1ea6c) and averages either all views or only the remaining ones. Different file hashes alone do not establish that the remaining videos are independent recordings.

Question

Were these identical take pairs intentional, for example because a second recording was unavailable? If so, could the exceptions and their intended treatment in the physical-variance normalization be documented? If independent recordings were intended, could the released take-2 videos and their corresponding masks be checked together?

The investigation used AI coding assistants, including scripted checks and numerical review.

This isn't my job, it's more of a passion. I enjoy digging into how benchmarks are actually scored, and this one seemed worth asking about.

Activity

  1. rgeirhos commented on Sep 28, 2026

    @rgeirhos
    Collaborator

    Hi @Lostmanu, thanks for reporting this. We'll investigate.

  2. sam-motamed commented on Sep 28, 2026

    @sam-motamed
    Contributor

    Thanks for the report @Lostmanu. For rotating / static scenarios, this is intended since there is no variation between two takes, given the exact same starting point. The only dynamic scenario that also followed this choice was match-blows-balloon, given that our multiple different takes varied a lot given the balloon’s movement.
    I will look into some of the dynamic scenes that you also reported and will give an update here on those!

  3. Lostmanu commented on Sep 28, 2026

    @Lostmanu
    ContributorAuthor

    Thanks @sam-motamed, that's really helpful context. I had listed magnet-domino as dynamic, but with a plastic domino it's probably just the rotating case, sorry about that. With your explanation, 36 of the 40 identical views are by design: the static scenes and the ones where only the platform rotates, plus match-blows-balloon.

    These are the 4 that remain, in split-videos/testing/8FPS/ (the 30FPS folder shows the same pattern):

    scenario view take-1 vs take-2
    duck-falls-in-box center identical (md5 F9//yNyCZLq3WmrXCRBmBQ==)
    duck-falls-in-box left, right different
    ball-behind-rotating-paper left, center, right identical

    duck-falls-in-box looks like the clearest case, since only one of its three views is identical. In ball-behind-rotating-paper the grabber places the ball while the cardstock rotates, so I would expect some variation between recordings, but you know the setups much better than I do.

    If it helps, I'm happy to open a small PR adding a note to the README with the scenarios that reuse take 1. With zero take-to-take MSE, the MSE component of the Verified score on those views is close to zero unless a generation matches take 1 almost exactly, which seems worth knowing when comparing scores.

  4. sam-motamed commented on Sep 30, 2026

    @sam-motamed
    Contributor

    @Lostmanu you are exactly right about the plastic domino + magnet. I believe for the remaining few scenarios that are bit identical, we made the decision to keep the same recording after looking at the recordings and seeing too much unwanted variation between the takes!
    If you want to create a PR and note this, I will be happy to help review it.

  5. Lostmanu commented on Oct 2, 2026

    @Lostmanu
    ContributorAuthor

    Thanks @sam-motamed, that makes sense. I've opened #86 with a short README note listing the 40 views and the reasons you gave here, and how the reused takes affect the MSE part of the score. Happy to change the wording however you prefer.

  6. rgeirhos commented on Oct 7, 2026

    @rgeirhos
    Collaborator

    Pasting the overview from #86 here for future reference:

    Reused take-2 recordings

    scenario views why take 1 is reused, according to @sam-motamed
    duck-static, glass-stays-same, light-on-block, light-on-mug, light-on-mug-block, light-on-statue, magnet-domino, mirror-ball-rotate, mirror-teapot-rotate, smiley-ball-rotates, teapot-rotates all three static or rotating scenario: two takes from the exact same starting point do not vary
    match-blows-balloon, ball-behind-rotating-paper all three separate takes varied a lot because of the balloon's movement
    duck-falls-in-box center separate takes showed too much unwanted variation
  7. rgeirhos commented on Oct 7, 2026

    @rgeirhos
    Collaborator

    Updated documentation - thanks for the PR - and closing this; thanks for the discussion everyone!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions