Model ID (planned): ppark-ai/tachand-v-foundation-v2-4aLicense: Apache 2.0 (weights) + CC-BY 4.0 / research-only (eval data references; see corpus table)
Pretrain date: 2026-05-16
Maintainer: ppark-ai
TL;DR
Frozen-V + adapter contact-aware vision foundation.
v2.4-A is the v2 release winner: frozen DINOv2-L (initialised from v2.3) + trainable T branches / v_proj / sensor token + NEW corpora (TAG, Sparsh, TacQuad) at small cap, lifts to 82.3%.
This is Layer 2 of the Open Tactile Stack. v2.4-A supersedes v2.3 as the recommended Layer 2 checkpoint for downstream ContactAdapter / VLA wrappers.
Why frozen-V + adapter. v2.1 (full NEW-corpora joint mix) and v2.2 (capped NEW-corpora joint mix) regressed VTDex by 27–38 pp under joint V-trunk training. Codex agent diagnosis: heterogeneous NEW corpora dilute the V representation through shared-trunk capacity contention. v2.4-A freezes the V trunk (preserving the v2.3 representation) and routes NEW-corpus signal through the trainable T branches, v_proj, and sensor token only. Empirically confirmed: 82.3 % vs v2.1 catastrophic 50 %. See docs/validation/v2_new_corpora_poison_failure_audit.md.
The V trunk is bit-for-bit identical to v2.3; only the projection, modality branches, and sensor token receive gradient. This is the same decoupling pattern as Layer 3 ContactAdapter (a_final = a_base + gate * clip(delta)) — TacHand's signature design carried into Layer 2 pretrain.
Training data (153,562 paired V+T frames across 9 corpora)
Corpus
Frames
Modality
Role
License
VTDexManip (Zhang 2025)
6,700
RGB + 3-axis force
v1 mix replay
research-only
TacHand sim
25,000
RGB (synthetic) + force-vec
v1 mix replay
internal
FreeTacMan features
33,000
features only
v1 mix replay
internal
TVL SSVTP (Fu 2024 ICML)
4,000
RGB + DIGIT image
v1 mix replay
CC-BY 4.0
TVL HCT (Fu 2024)
5,000
RGB + DIGIT image (imdesc captions)
v1 mix replay
CC-BY 4.0
ObjectFolder Real (Gao 2022)
24,000
RGB + GelSight
v1 mix replay
CC-BY 4.0
Touch & Go (Yang 2022)
833
RGB + GelSight
NEW (capped)
CC-BY 4.0
Sparsh touch_slide (Suresh 2024)
64,000
DIGIT image
NEW (capped)
CC-BY 4.0
TacQuad (Wu 2025)
1,829
multi-sensor
NEW (capped)
research-only
Total: 153,562 frames. NEW corpora are capped so they cannot dominate the round-robin batch schedule — combined with the frozen V trunk, this is the architectural fix for the v2.1 / v2.2 poison.
Worst-class lift (Scissors / Pressing) is the headline robustness signal: v1's two structural weaknesses both move up.
Cross-corpus held-out (held_out_30pct vs raw DINOv2-L)
Corpus
v2.4-A Δ vs raw DINOv2-L (pp)
Status
TAG
−3.7
partial — still negative
Sparsh touch_slide
+0.0
saturated
TacQuad
−1.5
partial — still negative
NeuralFeels
+0.0
trivial (truly-unseen RGB)
Cross-corpus is not yet positive for TAG / TacQuad. v2.4-A is an in-domain win with cross-corpus partial recovery vs v2.1 / v2.2 (which were larger negatives); the +5 pp cross-corpus gate remains open for v2.5.
Intended use
Frozen feature extractor for V/T downstream tasks (FSL, classification, retrieval).
Layer 2 of Open Tactile Stack: input to ContactAdapter + robot company VLA.
Recommended Layer 2 checkpoint: v2.4-A supersedes v1 / v2.3 for new downstream work.
Out-of-scope
Cross-corpus claims on TAG / TacQuad — Δ is still negative vs raw DINOv2-L on those held-outs; use raw DINOv2-L if your evaluation is TAG- or TacQuad-only.
Direct fine-tuning of the V trunk (it's frozen by design; the architectural reason is the v2.1 / v2.2 poison).
Closed-loop policy on its own (use ContactAwareWrapper + ContactAdapter).
Sensor-specific calibration (use SensorAdapter for sensor → standard latent).
Limitations
Cross-corpus partial recovery. TAG −3.7 pp, TacQuad −1.5 pp vs raw DINOv2-L. v2.5 next steps: per-corpus adapter heads, larger NEW-corpus cap with stronger frozen-V isolation, or sensor-token re-balancing.
NeuralFeels +0 pp is trivial: truly-unseen RGB held-out, both arms at chance under the current protocol; not a v2.4-A signal either way.
Open-loop FSL ≠ closed-loop success (memory: MSE↛success). Use governance gating.
Headline is on a 10-class VTDexManip subset; broader-class evaluation pending.
n = 5 seeds is the floor for v2.4-A; per-class table is n = 3.
Wall time, training data, and ckpt size were measured on the dev GPU (RTX 5090); HF Hub publish + checkpoint SHA fill follow once private staging clears.
v2 ablation history
Run
Mix
Epochs
VTDex k10 nn=1
Verdict
v1
v1 corpora (7)
4
76.3–77.9 %
canonical baseline
v2.0
RAM OOM during data load
—
—
abandoned
v2.1
v1 + NEW corpora (full mix)
4
50.4 %
catastrophic (−26 to −27 pp)
v2.2
v1 + NEW corpora (capped)
1
40.2 %
further regression
v2.3
v1-mix-only
4
79.5 %
RC (v1 +1.6 pp)
v2.4-A ★
frozen-V (v2.3-init) + NEW corpora capped
4
82.3 %
release winner
Full audit: docs/validation/v2_new_corpora_poison_failure_audit.md.
Process post-mortem: docs/release/v_foundation_v2_4a_failure_to_success_narrative.md.
Citation
bibtex
1@misc{park2026tachand_v2_4a,
2 author = {Park, Soohwan and Patrick},
3 title = {{TacHand V Foundation v2.4-A}: Frozen DINOv2-L + Adapter
4 for Heterogeneous Tactile Corpora},
5 year = {2026},
6 month = may,
7 howpublished = {\url{https://huggingface.co/ppark-ai/tachand-v-foundation-v2-4a}},
8 note = {Open Tactile Stack, Layer 2}
9}
Built on top of v2.3 (which is built on v1); see docs/release/v_foundation_v1_card.md and docs/release/v_foundation_v2_3_model_card.md for full ancestry and underlying DINOv2 / VTDexManip / TVL / ObjectFolder / Touch-and-Go / Sparsh / TacQuad citations.
Layer 3 ContactAdapter (wrapper evidence)
Frozen v2.4-A V Foundation + ContactResidualHead (LayerNorm + 2-layer MLP, ~165 K trainable params) + ActionSpec L2 gate. Strong-eval: 8 DAgger iters × 30 rollouts/iter × 3 tasks × single seed = 720 paired wrapped-vs-baseline rollouts.
ActionSpec gate:L2_EE_GRIPPER_RESIDUAL with max_residual_norm = 0.20 enforced. can_inject_residual(action_spec) is the hard gate — unknown action semantics fall back to a_base. Per inference: residual = head_out[0] - a_base; a_final = a_base + clip(residual, ±0.05).
Caveats (strong-eval-updated):
Statistical sample size. Single seed, 720 paired rollouts (30 × 8 × 3); consistent over 5 post-warmup iters for carry_full_cup (every iter > 0) and pick_and_place (4 iters at 100 %), not single-iter peak. Multi-seed replication is the next promotion gate.
wipe_table 0 % / 0 % is the documented sim physics limit (oracle-only task); baseline also fails — wrapper does not regress.
pick_and_place baseline 88.6 % mean leaves ≤11 pp absolute headroom; the +9.4 pp lift is robust over that bounded range.
a_base = cur_proprio is a sim placeholder. Deployment uses a real VLA's action as a_base; the residual composition is the same shape but transfer is unverified.
Init pretrain uses zero-RGB embedding (sim H5 demos predate V Foundation, do not store RGB); 8 DAgger iters with real per-step RGB mitigate this — the carry_full_cup lift appears consistently across iters 4-8, well after the first relabel pass.
Full method, training command, and per-iter table: docs/release/v_foundation_v2_4a_contact_adapter_evidence.md. Strong-eval source: ~/results/contact_adapter_v2_4a_strong/train_summary.json and ~/contact_adapter_v2_4a_strong.log (GPU server).