# Third-party attribution

VisBench is MIT licensed (see LICENSE). It reuses evaluation protocols — and
in places, adapted code — from the projects below. All are permissively
licensed and MIT-compatible. Where a protocol or implementation is borrowed,
the borrowing module cites it in a docstring or comment as well; this file is
the consolidated list, not the only record.

## probe3d — MIT

El Banani, Raza, Qian, Rodriguez, Kanazawa, Owens, Johnson et al.,
"Probing the 3D Awareness of Visual Foundation Models", CVPR 2024.
https://arxiv.org/abs/2404.08476 · https://github.com/mbanani/probe3d
Copyright (c) 2024 Mohamed El Banani

Used for: depth, surface normal, and geometric correspondence evaluation
protocols and metrics.

IMPORTANT — not all of probe3d is MIT. Parts of it derive from Meta Platforms
code carrying "Original code is licensed under CC BY-NC 4.0", including
`evals/utils/correspondence.py` (the ratio test, faiss kNN matching and
error-AUC helpers) and the whole `evals/models/croco_models/` tree.

CC BY-NC forbids commercial use and is incompatible with an MIT PyPI package.
VisBench therefore implements these evaluation protocols **from their
published descriptions rather than by adapting that code**, and no line of it
is copied here. The protocols themselves — nearest-neighbour matching with a
ratio test, thresholded correspondence recall, area under the cumulative error
curve — are standard methods from the local-feature matching literature that
predate both papers.

The same applies to any future backbone: CroCo cannot be vendored into
VisBench under these terms, only loaded from the user's own installation.

Not every part of probe3d is affected. `evals/utils/metrics.py` and
`evals/utils/losses.py` each carry their own **MIT** header, and
`evals/models/probes.py` carries no separate header and so falls under that
repository's MIT licence. All three are safe to reuse, and VisBench does:

- `visbench/metrics/dense.py` follows `metrics.py`'s `evaluate_depth` and
  `match_scale_and_shift` (itself from MiDaS) closely enough that the numbers
  are comparable, which is the whole point of borrowing a protocol.
- `visbench/tasks/mid_level/depth.py` follows `losses.py`'s `sig_loss` and
  `gradient_loss`, and `probes.py`'s `DepthBinPrediction`.
- `visbench/metrics/dense.py` also follows `metrics.py`'s
  `evaluate_surface_norm`, and `visbench/tasks/mid_level/surface_normal.py`
  follows `losses.py`'s `angular_loss` (whose uncertainty-aware form is
  Bae et al.'s).

The heads in `visbench/heads/` were written from the architecture descriptions
instead, so the package is uniform on that question, but contributors should
know the distinction rather than assume all of probe3d is off limits.

## Probing the Mid-level Vision Capabilities of Self-Supervised Learning — MIT

Chen, Marks & Cheng.
https://arxiv.org/abs/2411.17474 · https://github.com/mid-vision/midvision-probe
Copyright (c) 2024 Mohamed El Banani, Xuweiyi Chen

Used for: the high-/mid-/low-level task categorization; the feature output
modes in `visbench/backbones/pooling.py` (adapted from `tokens_to_output`); and
the two-alternative-forced-choice protocol for mid-level image similarity in
`visbench/tasks/mid_level/similarity.py`, following
`evaluate_model_percepture.py` — cosine similarity over pooled features, scored
as binary classification against the human vote.

Note that repository's README describes "training a mid-level image similarity
estimator" while the code trains nothing; the code is what VisBench follows,
and `MidLevelSimilarityTask` is zero-shot.

## vismatch — BSD-3-Clause

https://github.com/gmberton/vismatch

Used for: API ergonomics, and the conceptual shape of the dense feature
matching path in `visbench/tasks/mid_level/correspondence.py`.

## Datasets

Datasets are NOT redistributed by VisBench and carry their own terms. Loaders
are provided for:

- NIGHTS (Fu et al., *DreamSim*, NeurIPS 2023) — human 2AFC similarity
  judgements, used by `visbench/data/triplet.py`.
  https://dreamsim-nights.github.io
- Pascal VOC 2012 — semantic segmentation labels, read via
  `DenseFolderDataset` and `load_label_map`.

## Model weights

Backbone checkpoints are downloaded at runtime and are NOT redistributed by
VisBench. They carry their own terms:

- DINOv2 (facebookresearch/dinov2) — Apache-2.0
- OpenCLIP (mlfoundations/open_clip) — see that repository; individual
  pretrained weights carry separate terms depending on the training data.
