Papers › Vision Transformers Need Registers

Vision Transformers Need Registers

28 Sep 2023arXiv:2309.16588archive 2025-07-28

Timothée Darcet, Maxime Oquab, Julien Mairal, Piotr Bojanowski

Transformers have recently emerged as a powerful tool for learning visual representations. In this paper, we identify and characterize artifacts in feature maps of both supervised and self-supervised ViT networks. The artifacts correspond to high-norm tokens appearing during inference primarily in low-informative background areas of images, that are repurposed for internal computations. We propose a simple yet effective solution based on providing additional tokens to the input sequence of the Vision Transformer to fill that role. We show that this solution fixes that problem entirely for both supervised and self-supervised models, sets a new state of the art for self-supervised visual models on dense visual prediction tasks, enables object discovery methods with larger models, and most importantly leads to smoother feature maps and attention maps for downstream visual processing.

PaperPDFCodeCode Syntology ran

In Syntology Open this paper in Syntology's Atlas, the map of the papers in Syntology's graph and their citations.

For agents, Syntology's MCP tool lists every function and class Syntology harvested from this paper and whether it ran (how to connect): get_harvested_code_for_paper(arxiv_id="2309.16588")

Code

Syntology Ran 4 of 20 code samples harvested from 2 repositories linked to this paper; 16 have no recorded run. Of those that ran: 1 ran · honoured contract; 1 ran · violated contract; 2 ran · our draft was wrong.

By repository: official repository: 3 samples from 1 repository, 3 ran; community (archive-listed): 15 samples from 1 repository, 1 ran; 2 identical to code first harvested elsewhere. The run record, sample by sample. “Ran” means executed on a synthesized input, not that the code is correct or reproduces the paper.

facebookresearch/dinov2 officialmentioned in papermentioned on GitHubpytorch report
borisdayma/clip-jax mentioned on GitHubjaxApache-2.0 report
locuslab/massive-activations mentioned on GitHubpytorchMIT report
nickjiang2378/test-time-registers mentioned on GitHubpytorch report

Repository list and official/mentioned flags are the archive's, frozen 2025-07-28. Reachability, where shown, is from one Syntology probe window (2026-09-16 to 2026-09-18); repositories not probed show nothing. GitHub stars are not tracked.

Code Syntology ran Syntology

20 samples harvested; 4 ran; 1 honoured the contract we drafted; 16 have no recorded run. Read from Syntology's graph 2026-09-24; that is when this build read the record, not when the samples ran.

1ran · honoured contract
1ran · violated contract
2ran · our draft was wrong
16unverified

Licence: 2 of the 20 samples are pointer only, meaning Syntology does not serve that copy's text. This page shows no code text for any sample; each one links to its file in the repository.

Harvested from 2 repositories linked to this paper, official or community; each sample names its own and says which. Some samples are identical code Syntology first harvested from another repository; for those, this paper's copy is not located and its licence is not recorded. “Ran” means the sample executed on a synthesized input. It does not mean the output is correct, and nothing here reproduces the paper's results. “Honoured” and “violated” refer to a contract Syntology drafted from the code itself; “our draft was wrong” and “fixture could not drive it” are failures of Syntology's instrument, not of the code.

Each sample ends with its code_sha256, Syntology's identity for that exact code. An agent fetches the stored sample with Syntology's MCP tool get_code(code_sha256="…") (how to connect); click an identity to copy that call.

Repository labels, per sample. official repository: The archive marks this repository official for the paper. named in the paper: The archive records that the paper mentions this repository; it is not marked official. community (archive-listed): In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper. found in paper text by Syntology: Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted. community: Not in the archive's code links for this paper; a community repository Syntology harvested. Samples from a repository marked official are listed first. Licence labels name the repository's licence as recorded at harvest. “Pointer only” means Syntology does not serve that copy's text, for one of four reasons: no licence file was found; the licence was not identified; the licence is recorded as permissive but that copy's record is not marked cleared; or the licence is outside the permissive list Syntology serves text under (MIT, Apache-2.0, BSD and similar). Some licences outside that list permit redistribution, such as WTFPL, and GPL-3.0 under its conditions; they are simply not on the list. Hover a licence label for the reason. File links open the file on GitHub at the default branch, which may have changed since the harvest.

convert_path_or_url_to_url facebookresearch/dinov2/dinov2/hub/backbones.py official repository ran · our draft was wrong fingerprinted Apache-2.0 (permissive) · 7715dbecb1b8cfd6 · report
is_url facebookresearch/dinov2/dinov2/hub/backbones.py official repository ran · violated contract Apache-2.0 (permissive) · 911ac52477a145cc · report
named_apply facebookresearch/dinov2/dinov2/models/vision_transformer.py official repository ran · our draft was wrong Apache-2.0 (permissive) · e7fcb6d9ac9deaf4 · report
posemb_sincos_2d borisdayma/clip-jax/clip_jax/modeling.py community (archive-listed) ran · honoured contract Apache-2.0 (permissive) · 2d67a8a756fe7cf8 · report
count_params borisdayma/clip-jax/clip_jax/utils.py community (archive-listed) unverified Apache-2.0 (permissive) · 141f5bebbf4455dd · report
get_system_characteristics borisdayma/clip-jax/clip_jax/maxtext/accelerator_to_spec_map.py community (archive-listed) unverified Apache-2.0 (permissive) · 87c57735e68651cc · report
image_to_logits borisdayma/clip-jax/clip_jax/data.py community (archive-listed) unverified Apache-2.0 (permissive) · d3f6068e5f1cc03f · report
load_config borisdayma/clip-jax/clip_jax/utils.py community (archive-listed) unverified Apache-2.0 (permissive) · 831515af28a2a745 · report
logical_axis_rules borisdayma/clip-jax/clip_jax/partitions.py community (archive-listed) unverified Apache-2.0 (permissive) · c8e657cf59894a37 · report
logits_to_image borisdayma/clip-jax/clip_jax/data.py community (archive-listed) unverified Apache-2.0 (permissive) · e147d773ebc71aa4 · report
maybe_get_artifact borisdayma/clip-jax/clip_jax/wandb_utils.py community (archive-listed) unverified Apache-2.0 (permissive) · 4be991be800e82bc · report
norm borisdayma/clip-jax/clip_jax/modeling.py community (archive-listed) unverified Apache-2.0 (permissive) · e89c437719b73776 · report
normalize borisdayma/clip-jax/clip_jax/modeling.py community (archive-listed) unverified Apache-2.0 (permissive) · 9446a8d501beb52e · report
sample_nucleus_topp_logits borisdayma/clip-jax/clip_jax/maxtext/inference_utils.py community (archive-listed) unverified Apache-2.0 (permissive) · 9e0d5ce23e1ddbfb · report
sample_topk_logits borisdayma/clip-jax/clip_jax/maxtext/inference_utils.py community (archive-listed) unverified Apache-2.0 (permissive) · 213c7fbbc33f5eec · report
sampling borisdayma/clip-jax/clip_jax/maxtext/inference_utils.py community (archive-listed) unverified Apache-2.0 (permissive) · 5d8736f0387a699d · report
shift_tokens_left borisdayma/clip-jax/clip_jax/data.py community (archive-listed) unverified Apache-2.0 (permissive) · fd9f7273b986bc74 · report
with_logical_constraint borisdayma/clip-jax/clip_jax/utils.py community (archive-listed) unverified Apache-2.0 (permissive) · b2d0cfef5bc878ce · report
has_ddp_wrapper identical code first harvested elsewhere unverified licence of this copy not recorded · 1cd2728a84872357 · report
remove_ddp_wrapper identical code first harvested elsewhere unverified licence of this copy not recorded · f565e9c6316d8c64 · report

Tasks

Object DiscoverySelf-Supervised Image Classification

Results from the paper archive 2025-07-28

TaskDatasetModelMetricValueRank at snapshotLeaderboardReport
Self-Supervised Image Classification ImageNet DINOv2+reg (ViT-g/14) Number of Params 1100M #1 of 144 Archive leaderboard report
Self-Supervised Image Classification ImageNet DINOv2+reg (ViT-g/14) Top 1 Accuracy 87.1 #1 of 144 Archive leaderboard report

Ranks are positions in the archive's leaderboards as they stood at the 2025-07-28 snapshot. Results published since then are not among these rows, so a rank here is not a current standing.

Methods

Absolute Position EncodingsAdamAttentionBPEDense ConnectionsDropoutLabel SmoothingLayer NormalizationLinear LayerMulti-Head AttentionPosition-Wise Feed-Forward LayerResidual ConnectionSoftmaxTransformerVision Transformer

Report a problem or propose a change · a person checks every report against the paper or source before anything changes; decisions are listed on /corrections