Test-time adaptation · Work in progress

TTA, one update at a time.

Watch Tent, Buffer, and AcTTA update their trainable parts on an unlabeled batch.

Unlabeled inputs. Real TTA updates.

Loading the recorded experiments…

Pick your own shift
Original CIFAR-10 image
Before
Input shared by all four methods
Now

Gaussian noise · severity 3

TTA update 0 / 8

What each TTA update changes

Recorded parameters at the selected layer and channel.

Before the first learned update

Tent

Turn the knobs.

γβ

Updates: BN scale & shift

—

Change from frozen Source
This image—

—

Whole batch—No learned update yet

Buffer

Take a detour.

branch

Updates: An added residual branch

—

Current branch parameters
This image—

—

Whole batch—No learned update yet

AcTTA

Bend the curve.

Updates: Activation center & slopes

—

Current activation parameters
This image—

—

Whole batch—No learned update yet

Across TTA updates

The full batch, evaluated after each update.

SourceTentBufferAcTTA

Scores after the update

Current batch after the selected updates
Metric SourceStored BN TentBN affine BufferResidual branch AcTTAActivation
Accuracy ↑correct / images — — — —
ECE ↓ — — — —
Entropy ↓ — — — —

At step 0, adaptive methods already use target-batch BN. Source uses stored statistics.

Inspect parameters & feature mapsLayers, channels & full curves

Mechanism → outcome

Where each method adapts.

Same image. Same layer. Same channel.

Frozen reference

Source

0 trainable parameters

No test-time update

ConvBNReLU

Stored BN statistics · all weights frozen.

Feature map

Image prediction

—

—

Top 3 classes

Normalization

Tent

— trainable parameters

Convolutions frozen

BN scale γ & shift β

ConvBNReLU

Feature map

Image prediction

—

—

Top 3 classes

Residual correction

Buffer

— trainable parameters

Backbone weights frozen

An added residual branch

Frozen pathα · branch

Signed correction
before addition

Feature map

Image prediction

—

—

Top 3 classes

Activation response

AcTTA

— trainable parameters

Backbone weights frozen

Center c & slopes λ+, λ−

ConvBNActivation
Feature map

Image prediction

—

—

Top 3 classes

Feature maps are pooled to 8×8 and share one signed scale across methods and updates. Buffer's smaller residual uses its own scale. Inspect channels 0–15; the second site has 160 channels.

Protocol & sourcesHow this was measured

Same checkpoint and entropy objective. Labels are used only for evaluation.

45 recorded PyTorch experiments share the RobustBench Standard CIFAR-10 WRN-28-10 checkpoint, fixed image indices, and mean prediction entropy. Adam: β=(0.9, 0.999), ε=10⁻⁸, no weight decay. Seed: 1. At batch 16/128, learning rates are 0.001 for Tent/Buffer and 0.01 for AcTTA. At batch 4, they are 0.0001 for Tent, 0.001 for Buffer, and 0.001 for AcTTA. Batch 16 uses the public batch-128 learning rates as an explicit demo override. Inputs are unnormalized [0,1] RGB from the first 512 original test images. All outcomes are retained. Labels never enter the update.

Tent updates every BN affine parameter. Buffer uses its public WRN model: a branch after the initial convolution plus independent branches after both ReLUs in each block of stages one and two. α starts at 10⁻⁵; trainable mixing coefficients start at 0.5. AcTTA uses the released activation and entropy adapter, replacing the eight independent ReLUs in stage one with channel-wise c, λ+, λ− and fixed β=1. It freezes BN affine parameters. No activation sites share adaptation parameters. All ineligible backbone weights are checked for bitwise equality after every update.

The one-batch experiment records 0–8 repeated updates to the same unlabeled batch. The stream has four batches per phase: clean → Gaussian noise (severity 3) → defocus blur (severity 5) → clean. The final clean phase reuses the original indices. Each incoming batch gets one update. Predictions, internal states, and the table show the current batch after its update. Stream history shows predictions before that batch's update. Reset restores both the parameters and optimizer.

Accuracy, entropy (nats), and ECE (ten equal-width confidence bins) use every image in the batch. Feature maps inspect channels 0–15 at block1.layer.0.relu1 (16 channels) and block1.layer.1.relu1 (160 channels), pool them to 8×8, and quantize them for display with a shared signed scale across methods and steps. Buffer maps include the correction at the matching site. Buffer's smaller residual has its own scale. Probabilities and parameters keep decimal precision.

Public model, activation, placement, and optimizer configurations are used here. These fixed-order subsets and repeated updates remain a mechanism demonstration, rather than a reproduction of the full shuffled paper benchmarks or a ranking of methods. Repeated-batch results concern the adapted inputs, not unseen-data generalization. Entropy can fall while accuracy gets worse; small batches make accuracy and calibration estimates noisy.

Code: AcTTA release · Buffer release. Model and checkpoint: RobustBench (MIT). AcTTA full-benchmark results ↗. Images: CIFAR-10, Alex Krizhevsky. Corruptions: CIFAR-10-C, Dan Hendrycks and Thomas Dietterich. Reproduction instructions ↗ · Run manifest ↗

Scores describe these inputs. Repeated updates are a mechanism demonstration.