Yilmaz, Kruse, Höfer, de Geus & Leibe (RWTH Aachen · TU Eindhoven), 2026

Volume Transformer:
A Vanilla Transformer for 3D Scenes

3D scene understanding has been an island of specialized backbones — sparse-conv U-Nets and local-attention point transformers — cut off from the Transformer ecosystem. Volt asks: what if you just use a plain ViT-style encoder on 3D, with global attention and a 3D rotary positional embedding? It works — and once you feed it data, it scales past the specialists.

Prerequisites: Transformers & self-attention + basic CNN / segmentation intuition
12
Chapters
11
Simulations

Chapter 0: The Problem

Here is a strange fact about deep learning in 2026. If you work on language, images, audio, or video, you almost certainly use the same architecture: a Transformer. A trick that helps language models — a better attention kernel, a new positional encoding, a smarter way to scale — usually transfers to vision within months. Everyone shares one toolbox, one set of hardware optimizations, one research ecosystem.

And then there is 3D scene understanding — the task of taking a point cloud of a room or a street (from a depth camera or a LiDAR) and labeling every point: this is floor, that is chair, that is car. This field lives on its own island. Its best models are not Transformers. They are sparse convolutional U-Nets and hand-engineered local-attention networks with names like MinkUNet and Point Transformer v3.

The core question of this paper: Can you take the vanilla Transformer encoder — the exact same block that powers GPT and ViT, with full global self-attention and nothing 3D-specific bolted on — and make it a state-of-the-art backbone for 3D scenes? Or does 3D genuinely need its specialized machinery?

Why 3D went its own way

The specialists exist for a good reason. A 3D scene is huge and mostly empty — a single room can be hundreds of thousands of points. Treating each point as a token and running global attention would cost O(N²) with N over 100,000, which is hopeless. So the field built architectures that bake in strong assumptions about 3D structure:

These assumptions are inductive biases: built-in beliefs about what the answer should look like. A good inductive bias is a gift when you have little data — it tells the model "nearby points matter most" so it doesn't have to learn that from scratch. The whole 3D field is tuned for today's small datasets, where these biases pay off.

Manufacturing the need: why the island is a trap

So why rock the boat? Two reasons, and they compound.

First, isolation. Because 3D backbones are not plain Transformers, they cannot ride the wave of Transformer progress. FlashAttention — a fused attention kernel that makes attention dramatically faster and lighter — was written for standard attention. PTv3's custom local attention needs its own custom kernels and indexing logic. Every hardware generation that is "optimized for Transformers" passes 3D by. Every advance in pretraining, multi-modality, or scaling that the rest of the field enjoys has to be painstakingly re-derived for 3D.

Second, the ceiling. Strong inductive biases help in the low-data regime, but they become a limitation as data grows. We have seen this movie before. In 2D vision, convolutional networks dominated for years — until the Vision Transformer (ViT), with almost no built-in bias, was fed enough data and surpassed them. The lesson: hand-crafted priors are training wheels. They keep you upright when you're slow, but they cap your top speed.

The bet, in one sentence: the same crossover that happened in 2D — weak-prior Transformers overtaking strong-prior ConvNets as data scales — is waiting to happen in 3D. The specialists win today only because 3D datasets are tiny. Remove the artificial advantage and a plain Transformer should win.

See the bet

The figure below is the soul of the entire paper, made interactive. Drag the supervision slider. Two models compete: a strong-prior specialist (like PTv3) and a weak-prior Transformer (Volt). Watch who's ahead in the data-scarce regime versus the data-rich regime — and find the crossover point where the bet pays off.

The Inductive-Bias Crossover

Accuracy vs. amount of training supervision. The specialist starts ahead — its priors substitute for data. The plain Transformer starts behind (it overfits when data is scarce) but climbs faster and eventually overtakes. This is the ViT story, and Volt's thesis is that it replays in 3D.

Why have specialized architectures (sparse-conv U-Nets, local-attention transformers) dominated 3D scene understanding rather than vanilla Transformers?

Chapter 1: The Key Insight

The insight is almost embarrassingly simple, which is exactly why it's interesting: do to 3D scenes what ViT did to images.

Recall the ViT recipe. An image is a big grid of pixels — too many to treat each as a token. So you chop it into a grid of small square patches (say 16×16 pixels), flatten each patch into a vector, linearly project it to the model dimension, and now you have a short sequence of tokens. Feed that sequence to a completely standard Transformer encoder. No convolutions in the body, no image-specific machinery — just patchify, then attend.

Volt in one line: a 3D scene is a big grid of voxels — too many to treat each as a token. So chop it into a grid of small cubic patches, flatten each, project it, and feed the resulting sequence to a standard Transformer encoder. Patchify, then attend. The only 3D-specific touch is how position is injected.

The three minimal modifications

Volt = ViT with exactly three changes for 3D, and not one more:

ComponentViT (2D)Volt (3D)
Patchifysquare pixel patchescubic voxel patches (Ch. 3)
Encodervanilla Transformer, global attentionidentical — vanilla, global (Ch. 4)
Positionslearned 1D/2D embeddings or 2D RoPE3D rotary embeddings (Ch. 5)
Decodeclass token / linearone transposed conv + linear (Ch. 6)

That's the whole architecture. The encoder is byte-for-byte a ViT encoder — same block, same LayerNorm placement, same attention. This is the point: by keeping it vanilla, Volt can use FlashAttention out of the box, inherit every future Transformer improvement for free, and slot into any Transformer tooling.

"But global attention on a 3D scene is insane, right?"

This is the objection everyone raises, so let's kill it immediately with arithmetic. The fear is the O(N²) cost of attention. But N here is not the number of points — it's the number of tokens after patchification, and that number is small.

Watch the collapse. Start with a raw point cloud of, say, 200,000 points. Voxelize it (snap points to a grid, keep one per cell): now maybe 40,000 occupied voxels. Group voxels into cubic patches of 5×5×5: each patch becomes one token, and because the scene is sparse, you end up with roughly 5,000 tokens. At 5,000 tokens, global attention is not just feasible — with FlashAttention it's fast.

The numbers that make it work: with 5,000 tokens, a full attention matrix is 5,000 × 5,000 = 25 million entries — trivial for a modern GPU with a fused kernel. Volt-B (ViT-B sized) ends up 2× faster than PTv3 while using 48% less memory, despite PTv3 using only cheap local attention. The "expensive global attention" intuition is simply wrong once you patchify.

Feel the collapse

Below, build your own scene budget. Set the raw point count, the voxel size, and the patch size. Watch how a hopeless O(N²) per-point cost collapses into a comfortable per-token cost. The whole feasibility argument is in this one widget.

Token Budget: from points to a feasible sequence
Why is full global self-attention practical for Volt despite 3D scenes having hundreds of thousands of points?

Chapter 2: How 3D Scenes Are Represented

Before we can patchify a scene, we have to confront what a 3D scene actually is as data — and why it's so much messier than an image.

Points are unordered and irregular

An image is a gift: a perfectly regular 2D grid. Pixel (i, j) always exists, always has neighbors at (i±1, j) and (i, j±1), and the grid is dense — every cell is filled. A convolution can slide a fixed kernel across it because the structure is guaranteed.

A point cloud is the opposite. It's a set of points X = {(pᵢ, fᵢ)}, where each point has a 3D coordinate pᵢ ∈ ℝ³ and a feature vector fᵢ ∈ ℝᶜ (typically color). Two headaches:

This is why early methods (PointNet) treated clouds as sets with symmetric pooling, and why later methods leaned on expensive nearest-neighbor searches. Both routes get awkward at the scale of a whole room.

Voxelization: impose a grid

The fix that unlocks everything: voxelize. Lay an imaginary 3D grid of cell size δ over space and snap each point to its cell:

zᵢ = ⌊ pᵢ / δ ⌋ ∈ ℤ³

Every point with coordinate pᵢ is integer-divided by the voxel size δ and floored, giving an integer cell index zᵢ. Keep one representative point per occupied cell (with its feature f̃ᵡ). Suddenly you have a regular integer grid again — order restored, neighbors well-defined. Volt uses δ = 2 cm indoors and 5 cm outdoors.

The catch — cubic explosion: a dense voxel grid is murder on memory. Resolution doubles → voxel count multiplies by 2³ = 8. A 512³ grid is 134 million cells. You cannot store, let alone convolve, a dense grid at scene scale.

Sparsity is the savior

But here's the thing: a 3D scene is almost entirely empty space. Surfaces are thin shells. In a typical room voxelization, well under 10% of cells are occupied — the rest is air. Sparse convolution engines (Minkowski Engine and friends) exploit this: they store only occupied voxels in a hash table and compute convolutions only there. That's how MinkUNet runs at all — and, as we'll see in Chapter 3, Volt borrows the exact same sparse-conv trick to build its tokens.

See the sparsity

Below is a 2D analog (a slice through a scene, for clarity). Toggle between the dense grid — every cell allocated, mostly wasted — and the sparse representation, where only the occupied surface cells exist. Watch the cell count plummet. This gap is the entire reason scene-scale 3D is tractable.

Dense vs. Sparse: a scene is mostly air
Why does voxelizing into a dense grid not scale, and what makes 3D tractable anyway?

Chapter 3: Tokenization — building the sequence

This is where a messy point cloud becomes a tidy sequence of tokens. It is the 3D counterpart of ViT's patch embedding, and getting the data flow exact is the whole game.

The pipeline, step by step

Start from the voxelized scene from Chapter 2: a sparse set of occupied voxels Xᵛ = {(zⲟ, f̃ⲟ)}, M cells, each with an integer position and a C-dim feature. Now:

  1. Partition into cubic patches. Tile the voxel grid with non-overlapping cubes of P×P×P voxels. Volt uses P = 5. With a 2 cm voxel that's a physical patch of 10 cm per side.
  2. Flatten each non-empty patch. A patch holds up to P³ voxels, each with C features. Stack them into one vector uₜ ∈ ℝP³·C. Empty voxels inside the patch are filled with zeros. Skip patches that are entirely empty.
  3. Linearly project. Map each flattened patch to the model width D with a learned matrix: xₜ = W uₜ, giving a token xₜ ∈ ℝᵀ.

The result is a token sequence X = [x₁, …, xₜ]. Crucially, unlike ViT where the image is a fixed size, here T varies per scene — it depends on scene size, density, and how the occupied voxels are distributed. The Transformer doesn't care: it eats variable-length sequences natively.

The clever shortcut: steps 1–3 — partition, flatten, project — are exactly a convolution with kernel size = stride = P. ViT implements 2D patch embedding as a strided 2D conv; Volt implements 3D patch embedding as a strided sparse 3D conv. One sparse-conv layer does tokenization, downsampling, and feature aggregation in a single pass — and it naturally handles the empty-voxel padding.

A worked example with real numbers

Let's make it concrete. Say C = 3 (RGB color) and P = 5.

Why is this better than the alternative — grouping points by k-nearest-neighbors, as point transformers do? Because kNN grouping is density-dependent and slow: you must search neighbors for every point, and dense regions blow up the cost. Voxelization + sparse conv is density-invariant and runs in one fast pass. Tokenization simultaneously aggregates local features and downsamples the scene to keep the sequence short.

Concept → realization: what goes in is a sparse voxel set (positions in ℤ³, features in ℝᶜ). What comes out is a sequence of D-dim tokens plus, for each token, its integer patch index (we'll need that for positions in Ch. 5). The patch index of token t is just ⌊ z / P ⌋ — the voxel cell divided by the patch size. Hold onto that; it becomes the token's "address" for RoPE.

Build the tokens yourself

Below, a 2D slice of a voxelized scene. Drag the patch size slider to tile it differently. Occupied patches (containing at least one filled voxel) light up and become tokens; empty patches are skipped. Watch the token count — and notice the trade-off: small patches = more tokens = finer detail but longer sequence; big patches = fewer tokens = faster but coarser. (Chapter 10 quantifies exactly this.)

Patchify: occupied patches become tokens
How does Volt implement patch tokenization, and why that way?

Chapter 4: The Vanilla Encoder & Global Attention

Here is the chapter with the least to explain, and that is the entire point. Volt's encoder is a stack of L identical Transformer blocks, each one a textbook ViT block: multi-head self-attention, then an MLP, each wrapped in a residual connection with LayerNorm applied before the sublayer (pre-norm). No hierarchical stages, no local windows, no domain-specific grouping. Just global attention and MLPs.

x′ = x + Attn(LN(x))
x″ = x′ + MLP(LN(x′))

That's a block. Read it twice and you've read the whole encoder. LN is LayerNorm, Attn is multi-head self-attention over the full token sequence (every token can attend to every other), and the two + x terms are the residual skips. Volt stacks L of these. Volt-S uses the ViT-S configuration; Volt-B uses ViT-B — literally the same widths and depths as the image models.

The one small spice: QK-Norm

Volt adds QK-Normalization in every attention layer — it L2-normalizes the query and key vectors before their dot product. This is a now-standard trick (borrowed straight from modern LLM/ViT training) that keeps attention logits from exploding during training, stabilizing the optimization of a deep, weakly-regularized model. It is not a 3D-specific invention; it's another piece inherited from the ecosystem.

Global vs. local: what's actually different

Why insist on global attention when the specialists work so hard to avoid it? Because global attention lets any token talk to any other token in a single layer. The far corner of the room can directly inform a token across the scene — useful when "is this a table or a desk?" depends on the whole room's context.

PTv3 cannot do this directly. It serializes points along a space-filling curve and attends only within local windows, so long-range interaction must hop through many layers. Worse, that custom local attention needs bespoke CUDA kernels and indexing. Volt's plain global attention runs on FlashAttention-2 — the same fused, memory-efficient kernel the entire Transformer world uses for variable-length sequences. Same kernel as your favorite LLM.

The FlashAttention point (concept → realization): a naive attention implementation materializes the full T×T score matrix in memory — O(T²) memory. FlashAttention never writes that matrix to high-bandwidth memory; it computes attention in tiles, keeping memory O(T) while computing the exact same result. It doesn't reduce the FLOPs, it reduces the memory traffic — and memory traffic is the bottleneck. This is why Volt-B, with full global attention over ~5k tokens, ends up faster and lighter than PTv3's clever local attention.

See who talks to whom

Below: a grid of scene tokens. Click any token to make it the query. In global mode it attends to every token (the whole scene at once). In local mode (PTv3-style) it only attends within a serialized window. Pick a token in one corner and a target object in the far corner — see how global reaches it in one step while local cannot.

Global vs. Local Attention reach
What lets Volt's global attention be faster and lighter than PTv3's local attention in practice?

Chapter 5: 3D RoPE — injecting position

Self-attention has a famous blind spot: it is permutation-equivariant. Shuffle the input tokens and the output just shuffles too — attention has no idea where any token is. For text that's a problem; for 3D it's catastrophic, because in 3D the meaning of a token is almost entirely about its position and geometry. We must inject position. This chapter is the one genuinely novel architectural piece, and it rewards a slow read.

Why the obvious choice fails

The early-ViT answer was absolute learned positional embeddings: a lookup table with one learned vector per grid position, added to each token. This assumes a fixed, dense, bounded grid — which images have. 3D scenes do not. Positions are sparse, the scene is unbounded, and the number of possible token positions runs into the millions. You cannot learn a table that big, and it won't generalize to positions unseen in training. Absolute learned embeddings are a dead end for 3D.

RoPE: rotate, don't add

The modern answer, standard in LLMs and recent ViTs, is Rotary Positional Embedding (RoPE). Instead of adding a position vector to the token, RoPE rotates the query and key vectors by an angle proportional to their position, before the attention dot product. The beautiful consequence: the dot product of a rotated query and a rotated key depends only on their relative offset, not their absolute positions.

Here's the 2D core. Take a query component and rotate it by angle θ·m where m is its position; rotate the key by θ·n for its position n. A rotation by angle α is the matrix:

R(α) = [ cosα  −sinα ;   sinα   cosα ]

Now the key identity — rotations compose by adding angles, and the dot product of two rotated vectors satisfies:

(R(θm) q) · (R(θn) k) = qᵀ R(θ(n − m)) k

Stare at the right-hand side: the absolute positions m and n have vanished, leaving only (n − m) — the relative offset. So two tokens 3 apart produce the same positional effect on attention no matter where in the scene they sit. That's exactly what you want: geometry is about relative arrangement, and RoPE bakes that in. It also handles variable lengths, extrapolates beyond training positions, and is compatible with FlashAttention.

Why relative beats absolute for 3D: "a chair leg is ~40 cm below a seat" is a relative fact that holds anywhere in any room. An absolute encoding would have to re-learn it at every possible (x, y, z). RoPE encodes the relation once and reuses it everywhere — a far stronger inductive bias for geometry, delivered without any hand-crafted locality.

Extending RoPE to three axes

A token in 3D has a position p = (pᶩ, pᶻ, pᶻ) — wait, three coordinates: pₓ, pₐ (call them x, y, z). RoPE was built for 1D. Volt's extension (shared with concurrent work LitePT) is clean: split each query/key vector into three axis-blocks and apply RoPE independently per axis, then concatenate:

q̃ = concat( RΘ(pₓ) qₓ,   RΘ(pₘ) qₘ,   RΘ(p⎷) q⎷ )

Read it: chop the query q into three chunks qₓ, qₘ, q⎷; rotate the first chunk by the token's x-position, the second by its y-position, the third by its z-position; glue them back together. Same for the key. Now the attention score depends on the relative offset along all three axes simultaneously.

The asymmetry trick (and what positions to use)

Two design details that the ablations prove matter:

1. Asymmetric axis allocation. Volt does not split the dimensions evenly. It gives 12, 12, and 8 frequency pairs to x, y, and z respectively — more capacity to the horizontal axes, less to the gravity-aligned vertical z. Why? Scenes vary much more horizontally (a room sprawls in x and y) than vertically (floor-to-ceiling is a short, predictable range), especially outdoors. Spend the positional budget where the variation is.

2. Metric-consistent positions. What number do we plug in as the position? Volt uses the discrete patch index from tokenization (the ⌊ z / P ⌋ we saved in Ch. 3). These indices are proportional to true 3D coordinates by the fixed scale factor δP. So a physical distance of, say, 30 cm always maps to the same index gap, in every scene. The ablation shows that if you instead normalize each scene's coordinates to [0,1], you destroy this cross-scene consistency (the same physical distance becomes a different number depending on room size) and accuracy drops.

The numbers (from the ablation, ScanNet200 / SemanticKITTI mIoU): Asymmetric RoPE = 36.2 / 70.8. Symmetric RoPE = 35.4 / 69.5. Asymmetric + per-scene normalized coords = 35.7 / 69.3. Plain Fourier positional encoding (added, not rotated) = 28.6 / 66.0 — a cliff. RoPE's relative formulation, metric-consistent indices, and asymmetric allocation each earn their keep.

THE showcase: the rotary attention clock

This is the heart of the architecture, made tangible. Two tokens sit on a line; each carries a query/key vector drawn as a blade. As you drag a token, its blade rotates by an angle proportional to its position. The attention score (the dot product) is read out live. The lesson to feel: slide both tokens together — keeping their gap fixed — and the score doesn't change. That's relative encoding. Then toggle the asymmetric z-axis to see how vertical position is encoded more coarsely.

The Rotary Clock: attention depends on relative position
What is the key property of RoPE that makes it well-suited to 3D geometry?

Chapter 6: The Lightweight Decoder

The encoder outputs one feature vector per patch token. But the task needs a label for every point. There's a resolution gap — each token covers a P×P×P cube of voxels — and the decoder's only job is to close it.

One transposed convolution, and that's basically it

Volt upsamples the tokens back to voxel resolution with a single transposed convolution whose kernel size equals the patch size P. This is the exact inverse of tokenization: tokenization was a strided conv that folded a P³ cube into one token; the transposed conv unfolds one token back into a P³ cube of per-voxel features:

F ∈ ℝM′×D

where M′ is the number of voxels and D the feature width. Then:

Why deliberately keep the decoder tiny? You might expect a fancy multi-stage decoder (like a U-Net's expensive upsampling path) to help. It hurts. The ablation: no decoder = 35.0 mIoU, the lightweight transposed-conv decoder = 36.2, a bigger decoder = 35.8. A heavier decoder adds parameters that amplify overfitting under scarce 3D supervision. The Transformer backbone already carries the representational load; the decoder just needs to upsample, not re-learn. Minimal overhead, maximal benefit.

Concept → realization: notice the symmetry — tokenize with sparse conv (stride P, fold), decode with transposed conv (stride P, unfold). The decoder has no skip connections from intermediate encoder layers (unlike a U-Net), because there are no intermediate-resolution stages — the encoder is flat. The architecture's flatness is what keeps it a "vanilla" Transformer rather than a hybrid hierarchy.

See the fold / unfold symmetry

Below, watch a single patch travel the full round trip: a P³ cube of voxels → folded into one token → processed by the encoder → unfolded by the transposed conv back into a cube of per-voxel features → classified → each point labeled. Toggle the decoder size to see the ablation's lesson.

Fold → Encode → Unfold → Classify
Why does Volt use a minimal single-transposed-conv decoder rather than a deep one?

Chapter 7: Why It Overfits — and the recipe

Now the twist that makes this a real research paper and not a press release. You build this clean vanilla Transformer, you train it on ScanNet the normal way, and… it overfits badly. Naive Volt scores 31.0 mIoU on ScanNet200 while the specialist PTv3 scores 35.2. Out of the box, the plain Transformer loses.

Manufacturing the need: a bigger hypothesis space is a double-edged sword

Why does it overfit? Exactly because we stripped out the inductive biases. A sparse-conv U-Net is constrained — it can essentially only express functions built from local neighborhoods. That constraint is a prior: it shrinks the space of hypotheses the model can entertain, and in that small space, the right answer is easy to find from little data.

A global-attention Transformer has a much larger hypothesis space. It can express almost anything, including ugly shortcuts that fit the training set but don't generalize. With enough data, that flexibility is a superpower (it can discover patterns the conv can't). With too little data — and 3D benchmarks are tiny, orders of magnitude smaller than ImageNet, let alone the billion-image sets behind foundation models — that flexibility becomes a curse. The model memorizes shortcuts. This is the same thing that happened to ViT in low-data 2D.

The strategic choice: the authors refuse to fix this by adding priors back into the architecture (that would just re-build a specialist). Instead they fix it on the training side, porting the data-efficient ViT recipes from 2D (DeiT, "How to train your ViT") into 3D. Keep the architecture pure; make the training smart. The bet is that training tricks are temporary scaffolding — as 3D data grows, you can remove them — whereas architectural priors are permanent ceilings.

Ingredient 1 — aggressive augmentation

If you don't have enough scenes, manufacture variety from the ones you have. Volt piles on 3D augmentations that fall into two camps:

Together these force the model to be invariant to things that shouldn't change a label — a chair is a chair whether it's rotated, half-cropped, or sitting in a mashed-up scene.

Ingredient 2 — strong regularization

Borrowed wholesale from ViT best practice:

The incremental evidence (ScanNet200 val mIoU): Naive 31.0 → +stronger aug 32.9 → +stronger reg 34.1 → +CNN distillation (next chapter) 36.2 → +scaling data 38.1 → +scaling model 40.0. Each rung is a real gain. Critically, the same ladder applied to PTv3 only moves it 35.2 → 37.5 (+2.3). Volt gains +9.0. The recipe helps the weak-prior model far more — because it's curing an overfitting problem the strong-prior model never had as badly.

Watch the gap close

Below: training and validation curves. Toggle augmentation and regularization on and off and watch the overfitting gap — the chasm between a high training score and a low validation score — shrink as you add each ingredient. With everything off, train soars while val stalls. With the recipe on, they converge.

The overfitting gap, and how the recipe closes it
Why does naive Volt overfit where a sparse-conv U-Net does not, and how do the authors choose to fix it?

Chapter 8: Distillation from a Weaker Teacher

This is the most counterintuitive ingredient, and the most interesting. Volt gets a boost by learning to imitate a convolutional teacher that is worse than itself. A weaker model teaching a stronger one — and it works. Let's understand why.

The standard story, then the twist

Normal knowledge distillation (Hinton et al.) has a strong teacher guiding a weak student — you compress a big model into a small one. Volt inverts this. The teacher is a humble MinkUNet (a sparse-conv U-Net) that, on the validation set, underperforms Volt. Yet distilling from it makes Volt better. How can a worse model improve a better one?

Because the teacher isn't transferring accuracy — it's transferring inductive bias. The MinkUNet, being convolutional, has exactly the local-geometry prior Volt deliberately lacks. By mimicking the conv's predictions, Volt absorbs a dose of that prior — just enough to curb its overfitting — without hard-coding it into the architecture. It's like a freewheeling improviser taking a few lessons from a disciplined classical teacher: the teacher isn't a better musician overall, but the discipline rubs off.

The two-head data flow (DeiT-style)

Following DeiT, Volt uses the teacher's hard predictions (the teacher's argmax labels), not soft logits. Concretely, the voxel features F feed into two linear classification heads:

The loss is a half-and-half blend:

L = 0.5 · Lseg( Wsegᵀ F, ygt )  +  0.5 · Lseg( Wdistillᵀ F, yteacher )

Every symbol: F = the per-voxel features from the backbone+decoder; Wsegᵀ F and Wdistillᵀ F = the two heads' logits; ygt = true labels; yteacher = the conv's predicted labels; Lseg = the usual segmentation loss (cross-entropy + Lovász). The 0.5/0.5 means the backbone must satisfy both the ground truth and the teacher simultaneously, so gradients from both flow into the shared features.

The hidden bonus — a second regularizer: the teacher sees the same augmented input as the student. So when a scene is mixed, cropped, and distorted, the teacher's predictions on that mangled input shift too. The distillation target therefore varies across augmentations of the same scene — an extra source of noise/regularization that further fights overfitting. And after training, the teacher and the distillation head are discarded: zero inference cost. You pay only at training time.
The evidence (Fig. 3, right): plot three training curves — the CNN teacher, Volt-without-distillation, and Volt-with-distillation. The teacher's curve sits below the distilled Volt's curve the whole way: the student durably beats the teacher. Yet distilled Volt clearly tops undistilled Volt. The teacher is a worse destination but a useful guide.

See the worse teacher help

Below: the two-head training setup on the left (toggle the distillation head on/off and watch where gradients flow), and the three training curves on the right. Turn distillation on to see the student's curve lift above the teacher it's learning from.

Distillation: two heads, and the student surpasses the teacher
How can distilling from a CNN teacher that is weaker than Volt still improve Volt?

Chapter 9: Scaling — the payoff

Everything so far has been setup. This chapter is where the bet from Chapter 0 gets settled with real numbers. The claim was: a weak-prior Transformer should benefit more from data than a strong-prior specialist. Does it?

The recipe was step one; data is step two

The augmentation + regularization + distillation recipe makes Volt competitive under single-dataset training. But to test scaling, you need more data. So Volt is trained jointly across multiple datasets at once — indoor RGB-D sets together (ScanNet, ScanNet200, ScanNet++, ARKitScenes), and outdoor LiDAR sets together (nuScenes, Waymo, SemanticKITTI).

This is harder than it sounds. Each dataset uses a different sensor, a different reconstruction pipeline, a different label space — so point density, coverage, and noise vary wildly. Volt's accommodation is minimal: a per-dataset linear classification head (to handle different label sets) while the entire backbone is shared. The backbone learns one general 3D representation; only the thin output layer is dataset-specific.

The scaling curves

Now the verdict. Train every model on 50% of the data, then 100%, then the full multi-dataset pool, and plot accuracy vs. data:

The headline scaling fact: across the same recipe-and-data ladder, Volt improves +9.0 mIoU while PTv3 improves only +2.3. The strong-prior model has less to gain because its prior already encoded what little data could teach; the weak-prior model keeps converting new data into new accuracy. As supervision grows, hand-crafted priors go from helpful to redundant to a mild handicap — exactly the ViT story, now demonstrated in 3D.

Drive the scaling experiment

Below is Figure 4, interactive. Drag the training data axis from 50% → 100% → multi-dataset and watch six curves move: Volt-B, Volt-S, PTv3-B, PTv3-S, MinkUNet, and Naive-Volt-S. Find the data scale where Volt-S overtakes the 5×-larger PTv3-B, and watch Volt-B pull away at the top.

Scaling behaviour: who turns data into accuracy?
What is the central empirical finding about Volt's scaling behaviour?

Chapter 10: Results & Ablations

Time to read the scoreboard — and, more importantly, the ablations that reveal why the design choices were made.

State of the art, indoors and out

Task / BenchmarkMetricVolt (best)Prior SOTA
Indoor semseg — ScanNetmIoU80.5PTv3/PPT 79.8
Indoor semseg — ScanNet200mIoU41.6PTv3/PPT 37.5
Indoor semseg — ScanNet++mIoU49.5PTv3 48.8
Outdoor semseg — nuScenesmIoU82.2PPT-based ~83 / 81
Instance seg — ScanNetmAP5082.7SGIFormer 79.9
Instance seg — ScanNet200mAP5047.5 (test)SPFormer baseline lower

Two results deserve emphasis. (1) Under single-dataset training, Volt-S already matches or beats prior work while being 2× smaller and faster. (2) For instance segmentation, the authors did a controlled swap — take the established SPFormer pipeline, change nothing but the backbone (MinkUNet → Volt), and accuracy jumps, with a +14.6 mAP50 leap on ScanNet200 val. The lesson: strengthening the raw 3D representation beats years of increasingly clever decoder designs.

And it's efficient. Despite full global attention, Volt-B is 2× faster than PTv3 using 48% less memory on both A100 and H100, thanks to FlashAttention over the small token count. Even Volt-B is faster than the fully-convolutional MinkUNet. Strong and cheap — the combination the specialists were supposed to own.

Ablation: the patch-size frontier

The single most important hyperparameter is the patch size P, because it directly trades accuracy for speed. Smaller patches = more tokens = finer detail (small objects, thin structures) but a longer, slower sequence. Bigger patches = fewer tokens = fast but coarse.

Patch PScanNet200 mIoUSpeedSem.KITTI mIoUSpeed
3×3×337.734 ms (slow)71.0113 ms
5×5×536.214 ms70.849 ms
7×7×733.513 ms69.634 ms

P = 3 is most accurate but ~2.4× slower; P = 7 is fast but small objects suffer most (coarse tokenization swallows thin structures). P = 5 is the chosen sweet spot — nearly all the accuracy at a fraction of the cost.

Ablation: positional encoding (revisited)

From Chapter 5, the proof that the RoPE design choices matter — Asymmetric RoPE 36.2/70.8 > Symmetric 35.4/69.5 > Asymmetric+normalized-coords 35.7/69.3 >> Fourier 28.6/66.0. The Fourier cliff is the headline: how you inject position (rotate into the QK interaction vs. add to embeddings) matters more than almost any other single choice.

Explore the trade-offs

Below: drag the patch size to walk the accuracy/speed frontier (token count, latency, and mIoU all update together), then flip to the positional-encoding ablation to see the four variants side by side.

Ablation explorer
In the controlled instance-segmentation experiment, what produced the large gain (e.g. +14.6 mAP50)?

Chapter 11: Connections & Cheat Sheet

Step back. What did Volt actually teach the field?

The big idea, distilled

3D scene understanding does not need its own architecture. With three minimal changes — cubic patch tokenization, 3D rotary positions, a one-layer decoder — the vanilla Transformer encoder becomes a state-of-the-art, efficient, general-purpose 3D backbone. The price of admission was a data-efficient training recipe to tame overfitting on today's small benchmarks. The reward is membership in the Transformer ecosystem: FlashAttention, future architectural advances, multi-modal fusion, and scaling all come for free. As 3D data grows, the training scaffolding can fall away and the architecture's scaling advantage takes over.

How they likely discovered it: the team almost certainly tried the obvious thing first — vanilla Transformer on ScanNet — and watched it lose to PTv3 (31.0 vs 35.2). The tempting move would be to add 3D priors back. Instead, recognizing the ViT-in-2D parallel, they diagnosed it as an overfitting (data-scarcity) problem, not an architecture problem, and ported the DeiT/ViT training playbook to 3D. The asymmetric-z RoPE and metric-consistent indices read like ablation-driven refinements found after the core idea worked.

What the paper doesn't dwell on (read critically)

Where this connects in your map

Cheat sheet — every symbol & decision

Symbol / termMeaning
pᵢ ∈ ℝ³, fᵢ ∈ ℝᶜa point's 3D coordinate and C-dim feature (e.g. RGB)
δvoxel size (2 cm indoor, 5 cm outdoor); zᵢ = ⌊pᵢ/δ⌋ is the voxel index
Ppatch side in voxels (= 5); patch index = ⌊z/P⌋, used as RoPE position
uₜ ∈ ℝP³Cflattened patch (empty voxels zero-padded)
xₜ = W uₜ ∈ ℝᵀtoken = linear projection of a patch (a strided sparse 3D conv)
Tnumber of tokens (~5k; varies per scene)
RΘ(p)rotary transform; applied per axis with 12/12/8 freq pairs for x/y/z
F ∈ ℝM′×Dper-voxel features after the transposed-conv decoder
L = 0.5 Lseg(WsegF, ygt) + 0.5 Lseg(WdistillF, yteacher)joint GT + distillation loss (teacher discarded after training)
Volt-S / Volt-BViT-S (23.7M) / ViT-B (94.3M) encoder configurations
The one-paragraph re-derivation (for the whiteboard): Point cloud → voxelize at δ → partition into P³ cubes → flatten + linear project (a strided sparse conv) into ~5k tokens → vanilla Transformer encoder with global attention + QK-norm, positions injected by per-axis RoPE on metric-consistent patch indices (asymmetric 12/12/8) → one transposed conv unfolds tokens to per-voxel features → linear (semseg) or Transformer decoder (instance). Train with heavy aug + DropPath/weight-decay/label-smoothing + a two-head distillation loss from a weaker CNN. Scale data; watch it overtake the specialists.
What is Volt's central message to the 3D community?