Dissecting AI
From the paper: GroundingPI: A Grounding Foundation Model towards Physical Intelligence with Visual Primitives

GroundingPI: From Perception Features to Robot Actions

Robot action learning needs perceptual features in a usable form; GroundingPI projects and resamples features from multiple backbone depths into a shared interface for a fixed action model.

Read the paper ↗
The short version

What it is

  • Layer-wise conditioning The action model receives features drawn from several depths of the visual foundation, rather than relying on one pooled representation.
  • Shared action interface A projector and resampler turn different foundations' features into a common set of conditions for the same action model.
  • Controlled transfer The downstream robot learner stays fixed while the pretrained perceptual foundation changes.

Why it matters

A foundation that understands images and instructions is not automatically useful for continuous control. A shared interface lets you test how its representations support action learning without changing the action model at the same time.

Before getting into the wiring, here is the idea: take a pretrained model that already interprets an image and an instruction, and give its internal features to a robot action learner through one consistent interface. That matters because otherwise a better action result could come from a better perception model, a different action head, or both—and you would not know which.

  1. Comparison: If I want to know whether a perceptual foundation helps action learning, I should avoid changing the action learner every time I swap foundations. The canonical example here is the same robot task run with different pretrained backbones: keep the action model and training setup fixed, and vary the representation source.

  2. Layer information: A single final feature summary can hide distinctions between earlier and later processing. Think of a notebook with several pages: the action learner can consult multiple pages instead of being handed only the last one. The analogy stops short because hidden states are learned vectors, not human-readable notes. In practice, features sampled at several relative depths are each projected and compressed into a common set of condition tokens.

  3. A usable interface: Different backbones do not naturally speak the same tensor shape. The resampler is like a shared-size adapter: it takes each layer's features and produces a predictable bundle for the action model. It standardizes the interface, not the meaning or quality of the features.

So the real question is not just whether a foundation can describe what it sees, but whether its features help a fixed action learner produce controls. The action expert gets the cached conditions through alternating cross-attention and action self-attention blocks; it denoises a noisy action chunk into continuous controls. In plain terms, it repeatedly consults the perceptual representation while refining the action. Does the comparison isolate representation transfer? It controls the downstream pathway, but a fixed adapter can still favor some representations over others—and an open-loop comparison is not the same as proving better behavior in a live environment.

Read the deep dive

Why People Wanted It

A visual foundation can locate objects or understand an instruction, but that does not automatically make its representation useful for choosing continuous robot actions. The practical question is how to connect different perceptual backbones to an action learner without also changing the action architecture, data, or training budget. GroundingPI uses a shared backbone-to-action interface so that the foundation representation is the main variable under comparison.

The Core Move

Take features from multiple depths of one pretrained backbone, map them into a common token interface, and let a fixed action model attend to those features while denoising an action chunk.

For sampled backbone states HℓjH_{\ell_j}, the conditioning tokens are

Zj=LN⁡(Hℓj)WB+ej,Cj=Resampler⁡64(Zj).Z_j = \operatorname{LN}(H_{\ell_j})W_B + e_j, \qquad C_j = \operatorname{Resampler}_{64}(Z_j).

Here normalization, a shared-width projection, a depth embedding, and a learned-query resampler turn each sampled state into a fixed-size set of conditions for the action model.

Why Features From Several Depths Can Matter

Now the version for readers who want more of the machinery: the interface samples eight hidden states at normalized depths so different backbones contribute features from comparable relative positions. If the backbone has NBN_B transformer blocks, the selected indices are ℓj=round⁡(j(NB−1)/7)\ell_j=\operatorname{round}(j(N_B-1)/7) for j∈{0,…,7}j\in\{0,\ldots,7\}. This is a depth-normalization rule, not a learned choice of whichever layers happen to work best.

Each state is normalized and mapped from the foundation width DBD_B to the action width. The projector WBW_B is shared across the eight depths of a given backbone, while the learned embedding eje_j tells the resampler which sampled depth it is processing. The same learned-query resampler is shared across depths and models. This separates two jobs: the projector reconciles feature width, while the resampler compresses each layer's token sequence into 64 condition tokens.

The action model receives an ordered set of layer-specific conditions rather than one pooled summary. What useful information is preserved by that arrangement depends on the backbone and the task; the interface makes that transfer comparable, not guaranteed.

Why a Shared Resampler Makes the Comparison Cleaner

Here is the part that gets technical: the resampler's shared learned queries produce the same number and width of condition tokens regardless of a foundation's native token count or hidden width. Thus the cross-attention blocks see a common-shaped input, while the backbone-specific projector handles the width mismatch.

The foundation runs once for the observation and instruction. Its eight conditions are cached and reused during action denoising. For video-generation backbones, feature extraction is held to a fixed state—including observed-frame construction, diffusion timestep, condition mask, noise realization, resolution, and frame count—so those choices do not become extra comparison variables.

The action expert has a fixed 16-block layout: eight cross-attention blocks alternate with eight action self-attention blocks. In order, those cross-attention blocks use C0C_0 through C7C_7; the intervening self-attention blocks process the action-side sequence. If the interface is held fixed, what does the action learner actually optimize?

Why the Action Interface Keeps the Foundation in the Loop

Now for the deeper control pathway: a flow-matching Action DiT takes the robot state, the cached perceptual conditions, and a noisy action chunk, then denoises that chunk into continuous controls. Layer-wise cross-attention injects a different sampled condition at each designated cross-attention block; the action-side self-attention blocks operate between those injections.

This avoids giving a foundation-specific action head or a separate raw-text or proprioceptive cross-attention bypass to selected models. Language, visual perception, and dynamics information reach the action expert through the evaluated foundation representations, while the downstream control architecture and compute schedule stay shared. The design therefore asks a focused transfer question: how useful is each foundation's representation to this common action learner?

Minimal Causal Code

This sketch makes the conditioning path visible; it is not a full flow-matching training implementation.

# One backbone pass supplies all sampled depths.
hidden_states = backbone(observation, instruction, output_hidden_states=True)
conditions = []
for depth_id, layer_index in enumerate(sampled_layer_indices):
    h = hidden_states[layer_index]
    z = layer_norm(h) @ backbone_projector
    z = z + depth_embedding[depth_id]
    conditions.append(shared_resampler(z))  # fixed count of condition tokens

# Reuse conditions while the action expert denoises a noisy action chunk.
action = noisy_action_chunk
for block_id, block in enumerate(action_dit_blocks):
    if block_id % 2 == 0:
        layer_id = block_id // 2
        action = block.cross_attention(action, conditions[layer_id])
    else:
        action = block.action_self_attention(action)
    action = block.feed_forward(action)

What You Gain, and What You Lose

The shared interface makes foundation comparisons more controlled: the action expert, robot data, action representation, optimization budget, and inference procedure can stay fixed while the pretrained foundation varies. Sampling several depths gives the action learner access to features across the backbone rather than only one chosen layer, and resampling standardizes the conditions passed downstream.

The tradeoff is that this is an interface for comparison, not proof that every foundation's information transfers equally well. A fixed action expert and shared resampler constrain what can be expressed; depth sampling and feature compression may discard useful detail. The setup isolates representation transfer, but does not make the result a claim about closed-loop robot performance or about every possible action architecture.

Quiz
What is the main purpose of GroundingPI's shared backbone-to-action interface in the manipulation comparison?
To let each foundation use its own specialized action head and training budget.
To replace continuous action generation with language-only predictions.
To keep the downstream action learner and conditioning path controlled while varying the pretrained foundation.
Core Takeaway

GroundingPI tests perceptual transfer by changing the foundation while keeping the path from its features to a fixed action learner shared.