Less Is More — DINO and historical noDino selector weights
Original selector checkpoints associated with Less Is More: Genetic Frame
Selection for Efficient Novel View Synthesis. This release contains two
unchanged PyTorch state dictionaries: DINO and the historical noDino ablation,
with one checkpoint per variant. These are frame selectors; reconstruction is
performed downstream, after selecting the input frames.
| Variant | File | Feature mask (zero-based) |
|---|---|---|
| DINO | weights/dino.pt |
3 |
| Historical noDino | weights/no_dino.pt |
3, 4, 5, 6 |
Both use a 19-input MLP with two 64-unit hidden layers, GELU activation, and
one output score (5,505 parameters). Both retain image sharpness. Select the
desired variant with load_selector("dino") or load_selector("no_dino").
What “noDino” means in this release
The original --mask_dino evaluation flag zeros the three similarity columns
dino_tgt_max, dino_tgt_mean, and dino_sel_max (4–6). With the deployed
NEW4,GEOM2 groups, dino_std at column 12 remains active. Consequently,
the historical noDino evaluation still needs DINO descriptors. It is not
completely DINO-free or image-free; sharpness also remains active.
This release preserves that historical behavior and the original weights. Masking column 12 as well would change the evaluation configuration. No such change or retraining has been silently applied. The available checkpoint alone does not establish which feature masks were used during its original training.
Relationship to the later paper's baseline
The DINO checkpoint was used in the later paper's original-weight baseline. The historical noDino checkpoint is the companion Paper 3 ablation and was also used in reproduction diagnostics.
The later off-path baseline adapts the evaluation inputs without retraining:
- For each requested target pose, choose a distinct available source stand-in using equally weighted normalized camera-centre distance and view-direction angle, in target order.
- Remove those stand-ins from the candidate pool. If more than 150 candidates
remain, retain 150 evenly spaced indices using rounded
linspace. - Condition geometry on the true requested target poses, while taking appearance descriptors from their source stand-ins. Target photographs are unavailable and are not needed.
- Greedily select the requested number of candidates, then reconstruct.
That target-pose/150-candidate protocol is a later-paper adaptation, not a claim that Paper 3 originally used identical evaluation inputs. This package's CLI accepts the already prepared candidate and conditioning arrays; it does not silently remove stand-ins or subsample a supplied pool.
Run locally
Use Python 3.10 or newer from inside this folder:
python -m pip install -r requirements.txt
python smoke_test.py
python selector.py --inputs scene.npz --variant dino --k 20 --output selected.json
python selector.py --inputs scene.npz --variant no_dino --k 20 --output selected_no_dino.json
The smoke test checks file hashes and runs both models on synthetic inputs. It downloads nothing. CPU inference was verified with PyTorch 2.2.0 and NumPy 1.26.4; later versions/devices can introduce small numerical differences.
Prepare scene.npz with these arrays:
| Key | Shape | Meaning |
|---|---|---|
poolC |
N × 3 | Candidate camera centres in a shared world frame |
poolV |
N × 3 | Unit viewing directions, pointing into the scene |
optC |
T × 3 | Conditioning camera centres |
optV |
T × 3 | Unit conditioning viewing directions |
poolDINO |
N × 384 | DINOv2 ViT-S/14 CLS descriptors for candidate images |
optDINO |
T × 384 | Descriptors for the available conditioning/stand-in images |
sharp |
N | Per-candidate Laplacian-variance sharpness |
The original sharpness calculation averages the image channels, applies the five-point discrete Laplacian on the interior pixels, and takes PyTorch's sample variance. Use the same image resizing and value scale as the experiment being reproduced. This package operates on cached descriptors and sharpness; it does not supply an image-preprocessing or DINO-backbone pipeline. The DINO backbone weights, reconstructors, images, and datasets are not included.
features.py preserves the original feature calculations and inference
normalization. The complete 19-column order is in each variant's config.
Features depend on the already selected set and must be recomputed at every
greedy step. Output indices are zero-based rows of poolC, in selection order;
map them back to source frame IDs using your own candidate-pool mapping.
For precomputed feature matrices:
import torch
from selector import load_selector
model, config = load_selector("dino")
# F must be a float32 (N, 19) tensor with the documented features and masks.
with torch.inference_mode():
scores = model(F)
model(F) does not construct features or apply masks; use select() for the
included complete greedy decoder. Weights are loaded with weights_only=True
and strict state-dictionary checks. These are custom PyTorch models, not
Transformers AutoModel checkpoints.
Download and cite
The release is hosted at Iron486/less-is-more-selector. Download the complete folder, including both variants, with:
hf download Iron486/less-is-more-selector --local-dir paper3-selector
For reproducibility, add --revision COMMIT_HASH using the exact commit from
the repository history. Cite the paper, this repository, the model variant,
and that revision. When using this release, report that the original
checkpoint was used without retraining. Describe the historical noDino
ablation and any evaluation-protocol adaptations separately.
License
This release uses the repository owner's selected
Creative Commons Attribution 4.0 International license.
The complete license text is included in LICENSE.
Integrity and provenance
manifest.json records variant names, byte sizes, SHA-256 hashes, and the
source code used for this export. SHA256SUMS covers all other release files.
verification/report.json records the packaging checks. Checkpoints were copied
byte-for-byte; no parameter conversion, averaging, fine-tuning, or retraining
was performed.