Discarded or Unreachable? Diagnosing and Repairing Spatial Relation Failure in Vision--Language Similarity
Organizations: Huawei Technologies Canada
Abstract
Contrastive vision-language models score left/right relations near chance, but the symptom has two causes that call for opposite repairs: the relation may survive in the pooled embedding yet be unreachable by native image-text similarity, or pooling may discard it while the dense features retain it. On clean two object photographs, across ten encoders, the lateral polarity is linearly decodable from the flip odd component of the pooled vector at 0.77-0.99, yet a search over a million captions leaves nine of the ten at chance under native scoring: an access failure. On controlled C4 orbits, where the relation is the only thing that varies, pooling keeps the arrangement axis at 0.998-1.000 and loses its polarity, which the patch grid retains: a pooling failure. Both sit downstream of the dense features, so one readout covers both. Our zero parameter, query conditioned spatial moment recomputes the geometry from the patch grid and stores it as a vector beside the native embedding. On a 118,287 image index it raises left/right pairwise accuracy against reversed geometry negatives from 0.51-0.53 to 0.81-0.96 and conditional R@1 among 21 category matched candidates from 0.05 to 0.37-0.75, at under a millisecond per batched query, while reproducing the native ranking exactly for queries that name no relation.
Figures & tables
| Supervised probe (What’s Up, lateral) | Mirror pairs | Mirror ranking | |||||||
| Encoder | Pooling | flip effect | moment | ||||||
| CLIP ViT-B/16 | CLS + proj | 0.674 | 0.771 | 1.000 | 0.500 | 0.510 [0.476, 0.549] | 0.951 | ||
| CLIP LAION-2B | CLS + proj | 0.705 | 0.878 | 1.000 | 0.500 | 0.500 [0.461, 0.539] | 0.942 | ||
| CLIP DataComp | CLS + proj | 0.713 | 0.805 | 1.000 | 0.500 | 0.495 [0.466, 0.524] | 0.893 | ||
| MetaCLIP-B | CLS + proj | 0.700 | 0.815 | 0.990 | 0.500 | 0.510 [0.485, 0.534] | 0.951 | ||
| DFN-B | CLS + proj | 0.660 | 0.825 | 1.000 | 0.500 | 0.510 [0.490, 0.534] | 0.942 | ||
| Encoder | best in | real caps. | |
|---|---|---|---|
| CLIP ViT-B/16 | 0.690 | 0.524 | |
| CLIP LAION-2B | 0.728 | 0.510 | |
| CLIP DataComp | 0.835 | 0.490 | |
| MetaCLIP-B | 0.709 | 0.558 | |
| DFN-B | 0.775 | 0.505 | |
| SigLIP2-B | 0.767 | 0.490 |
| pooled, binary (chance ) | 4-way (chance ) | |||||
|---|---|---|---|---|---|---|
| Encoder | axis | polarity | polarity † | probe | native | moment |
| CLIP ViT-B/16 | 1.000 | 0.507 | 0.513 | 0.475 | 0.252 | 0.819 |
| CLIP LAION-2B | 0.998 | 0.470 | 0.557 | 0.476 | 0.284 | 0.877 |
| CLIP DataComp | 1.000 | 0.490 | 0.497 | 0.481 | 0.273 | 0.886 |
| MetaCLIP-B | 1.000 | 0.503 | 0.530 | 0.487 | 0.286 | 0.823 |
| DFN-B | 1.000 | 0.520 | 0.580 | 0.481 | 0.266 | 0.858 |
| left/right | above/below | |||||||
| pairwise | cond. R@1 | pairwise | cond. R@1 | |||||
| Encoder | nat. | +mom. | nat. | +mom. | nat. | +mom. | nat. | +mom. |
| CLIP ViT-B/16 | 0.510 | 0.839 | 0.048 | 0.411 | 0.497 | 0.806 | 0.059 | 0.312 |
| CLIP LAION-2B | 0.516 | 0.857 | 0.052 | 0.451 | 0.527 | 0.820 | 0.049 | 0.356 |
| CLIP DataComp | 0.512 | 0.844 | 0.047 | 0.421 | 0.523 | 0.809 | 0.050 | 0.356 |
| MetaCLIP-B | 0.513 | 0.808 | 0.046 | 0.365 | 0.506 | 0.781 | 0.046 | 0.289 |
Appendix figures & tables23 assets
Supplementary material from the paper’s appendix.
Appendix
| Encoder | checkpoint |
| CLIP ViT-B/16 | ViT-B-16 / openai |
| CLIP LAION-2B | ViT-B-16 / laion2b_s34b_b88k |
| CLIP DataComp | ViT-B-16 / datacomp_xl_s13b_b90k |
| MetaCLIP-B | ViT-B-16-quickgelu / metaclip_fullcc |
| DFN-B | ViT-B-16 / dfn2b |
| SigLIP2-B | google/siglip2-base-patch16-224 |
| PCA sketch | random projection | ||||
| storage | acc. | cost | acc. | cost | |
| 16 | 1.03–1.06 | 0.748 | 0.598 | ||
| 32 | 1.06–1.12 | 0.774 | 0.683 | ||
| 64 | 1.11–1.25 | 0.784 | 0.696 | ||
| 128 | 1.22–1.50 | 0.808 | 0.718 | ||
| 256 | 1.44–2.00 | 0.820 | 0.751 | ||
| obj.-identity | wrong-cap. | VSR blind | spatial moment: real / shuf. | |
|---|---|---|---|---|
| Encoder | variant | null | prior | (What’s Up lat.) |
| CLIP ViT-B/16 | 0.563 | 0.510 | 0.501 | 0.772 / 0.588 |
| CLIP LAION-2B | 0.597 | 0.451 | 0.501 | 0.806 / 0.635 |
| CLIP DataComp | 0.563 | 0.398 | 0.501 | 0.694 / 0.523 |
| MetaCLIP-B | 0.549 | 0.393 | 0.501 | 0.772 / 0.626 |
| DFN-B | 0.437 | 0.621 | 0.501 | 0.782 / 0.630 |
| from scratch ( runs) | fine-tune ( ) | learned pool ( ) | |
| init | ViT-B/32, random | ViT-B/32, laion2b_s34b_b79k | frozen enc. head |
| optimiser | AdamW , | AdamW | AdamW |
| lr | , cosine | LoRA, full | , constant |
| warmup | steps | none | none |
| weight decay | |||
| batch |
| Reader | WU l/r | WU on/under | VSR | 4-way |
|---|---|---|---|---|
| (0.5) | (0.5) | (0.5) | (0.25) | |
| spatial moment (ours) | 0.826 | 0.662 | 0.738 | 0.894 |
| centroid, | 0.827 | 0.664 | 0.738 | 0.895 |
| centroid, | 0.828 | 0.663 | 0.738 | 0.895 |
| centroid, | 0.827 | 0.662 | 0.738 | 0.894 |
| argmax patch ( ) | 0.713 | 0.602 | 0.666 | 0.490 |
| left/right | above/below | |||||
|---|---|---|---|---|---|---|
| Encoder | native | +moment | native | +moment | ||
| CLIP ViT-B/16 | 0.510 [0.501, 0.519] | 0.839 [0.826, 0.851] | 0.329 [0.314, 0.344] | 0.497 [0.475, 0.520] | 0.806 [0.784, 0.826] | 0.309 [0.286, 0.329] |
| CLIP LAION-2B | 0.516 [0.507, 0.525] | 0.857 [0.845, 0.868] | 0.341 [0.327, 0.354] | 0.527 [0.502, 0.552] | 0.820 [0.797, 0.841] | 0.293 [0.267, 0.318] |
| CLIP DataComp | 0.512 [0.503, 0.522] | 0.844 [0.830, 0.856] | 0.332 [0.317, 0.346] | 0.523 [0.498, 0.547] | 0.809 [0.788, 0.829] | 0.286 [0.263, 0.311] |
| MetaCLIP-B | 0.513 [0.504, 0.523] | 0.808 [0.793, 0.822] | 0.294 [0.279, 0.310] | 0.506 [0.481, 0.531] | 0.781 [0.758, 0.803] | 0.276 [0.253, 0.299] |
| DFN-B | 0.512 [0.503, 0.521] | 0.837 [0.823, 0.851] | 0.325 [0.310, 0.340] | 0.526 [0.502, 0.550] | 0.827 [0.810, 0.844] | 0.302 [0.278, 0.325] |
| left/right | above/below | |||||
|---|---|---|---|---|---|---|
| Encoder | native | +moment | native | +moment | ||
| CLIP ViT-B/16 | 0.498 [0.494, 0.503] | 0.807 [0.797, 0.817] | 0.308 [0.299, 0.318] | 0.504 [0.495, 0.513] | 0.783 [0.770, 0.795] | 0.279 [0.267, 0.291] |
| CLIP LAION-2B | 0.497 [0.492, 0.501] | 0.810 [0.801, 0.820] | 0.314 [0.304, 0.323] | 0.508 [0.498, 0.518] | 0.792 [0.780, 0.804] | 0.284 [0.271, 0.297] |
| CLIP DataComp | 0.498 [0.493, 0.502] | 0.803 [0.793, 0.813] | 0.306 [0.296, 0.315] | 0.510 [0.501, 0.520] | 0.789 [0.776, 0.801] | 0.278 [0.265, 0.291] |
| MetaCLIP-B | 0.497 [0.492, 0.501] | 0.762 [0.752, 0.772] | 0.265 [0.256, 0.275] | 0.508 [0.498, 0.518] | 0.750 [0.737, 0.762] | 0.242 [0.230, 0.254] |
| DFN-B | 0.498 [0.493, 0.502] | 0.799 [0.789, 0.810] | 0.302 [0.291, 0.311] | 0.513 [0.504, 0.522] | 0.788 [0.776, 0.800] | 0.276 [0.264, 0.288] |
| left/right | above/below | |||||
|---|---|---|---|---|---|---|
| Encoder | native | +moment | native | +moment | ||
| CLIP ViT-B/16 | 0.048 [0.042, 0.055] | 0.411 [0.378, 0.443] | 0.362 [0.330, 0.395] | 0.059 [0.043, 0.076] | 0.312 [0.256, 0.367] | 0.253 [0.202, 0.309] |
| CLIP LAION-2B | 0.052 [0.045, 0.059] | 0.451 [0.414, 0.485] | 0.399 [0.363, 0.435] | 0.049 [0.033, 0.067] | 0.356 [0.299, 0.413] | 0.307 [0.253, 0.362] |
| CLIP DataComp | 0.047 [0.041, 0.053] | 0.421 [0.383, 0.458] | 0.374 [0.336, 0.412] | 0.050 [0.030, 0.072] | 0.356 [0.299, 0.414] | 0.306 [0.253, 0.360] |
| MetaCLIP-B | 0.046 [0.040, 0.053] | 0.365 [0.331, 0.399] | 0.319 [0.284, 0.353] | 0.046 [0.029, 0.065] | 0.289 [0.240, 0.340] | 0.243 [0.200, 0.288] |
| DFN-B | 0.045 [0.038, 0.051] | 0.420 [0.385, 0.453] | 0.376 [0.342, 0.408] | 0.050 [0.035, 0.066] | 0.343 [0.286, 0.400] | 0.294 [0.236, 0.352] |
| multiplier | one-term | |||||||
| Encoder | -only | -only | native | |||||
| CLIP ViT-B/16 | 0.677 | 0.768 | 0.839 | 0.872 | 0.883 | 0.695 | 0.697 | 0.510 |
| CLIP LAION-2B | 0.704 | 0.793 | 0.857 | 0.885 | 0.892 | 0.723 | 0.733 | 0.516 |
| CLIP DataComp | 0.677 | 0.771 | 0.844 | 0.879 | 0.890 | 0.708 | 0.721 | 0.512 |
| MetaCLIP-B | 0.648 | 0.731 | 0.808 | 0.853 | 0.868 | 0.650 | 0.655 | 0.513 |
| DFN-B | 0.678 | 0.769 | 0.837 | 0.870 | 0.880 | 0.713 | 0.722 | 0.512 |
| COCO | CC3M | Open Images | |||
|---|---|---|---|---|---|
| Encoder | ratio | ratio | |||
| CLIP ViT-B/16 | 0.79 | 0.75 | 0.68 | ||
| CLIP LAION-2B | 1.30 | 1.18 | 1.07 | ||
| CLIP DataComp | 1.01 | 1.05 | 0.99 | ||
| MetaCLIP-B | 0.79 | 0.83 | 0.70 | ||
| DFN-B | 1.03 | 1.19 | 1.01 | ||
| left/right | above/below | |||||
| Encoder | templ. | free | parsed | templ. | free | parsed |
| CLIP ViT-B/16 | 0.839 | 0.839 | 0.610 | 0.806 | 0.806 | 0.663 |
| CLIP LAION-2B | 0.857 | 0.857 | 0.616 | 0.820 | 0.823 | 0.675 |
| CLIP DataComp | 0.844 | 0.846 | 0.611 | 0.809 | 0.807 | 0.665 |
| MetaCLIP-B | 0.808 | 0.811 | 0.602 | 0.781 | 0.784 | 0.647 |
| DFN-B | 0.837 | 0.840 | 0.616 | 0.827 | 0.828 | 0.666 |
| left/right | above/below | |||
|---|---|---|---|---|
| Encoder | native | +moment | native | +moment |
| CLIP ViT-B/16 | 0.498 | 0.807 | 0.504 | 0.783 |
| CLIP LAION-2B | 0.497 | 0.810 | 0.508 | 0.792 |
| CLIP DataComp | 0.498 | 0.803 | 0.510 | 0.789 |
| MetaCLIP-B | 0.497 | 0.762 | 0.508 | 0.750 |
| DFN-B | 0.498 | 0.799 | 0.513 | 0.788 |
| trainable | WU zero-shot | VSR | ViewSpatial | |
|---|---|---|---|---|
| params | lateral | moment | moment | |
| base, none | — | 0.505 | 0.712 | 0.755 |
| LoRA | 0.86 M | 0.515 | 0.699 | 0.722 |
| NegCLIP | 151 M | 0.495 | 0.712 | 0.712 |
| synthetic | 151 M | 0.485 | 0.717 | 0.736 |
| Bench. | Method | Cov. | Accuracy |
|---|---|---|---|
| WU | det. | 1.000 | 0.990 [0.971, 1.000] |
| det. | 0.990 | 0.990 [0.971, 1.000] | |
| det. | 0.961 | 0.990 [0.970, 1.000] | |
| det. | 0.883 | 0.989 [0.967, 1.000] | |
| det. | 0.786 | 0.988 [0.963, 1.000] | |
| moment | 1.000 | 0.990 [0.971, 1.000] |
| native (paired), per seed | mean | probe( ) | |
|---|---|---|---|
| Encoder | shuf. p95 | mom | mom | |
|---|---|---|---|---|
| clip-datacomp | ||||
| dfn-b | ||||
| clip-laion2b | ||||
| clip-openai | ||||
| metaclip-b | ||||
| convnext-clip |
| Captions | seeds | native | |
|---|---|---|---|
| 3 | 0.503 | 0.998 | |
| 3 | 0.494 | 0.794 | |
| 3 | 0.508 | 0.973 | |
| 3 | 0.510 | 0.956 | |
| 3 | 0.502 | 0.983 | |
| 3 | 0.481 | 0.984 |
| fixed | diverse | wrong rel. | |
|---|---|---|---|
| , |
| image-side lateral direction | reads pairs | with real-pair dir. |
|---|---|---|
| fitted in What’s Up, cross-fitted | – | |
| What’s Up’s own mirror contrast | – | – |
| orbits, frequency-1 | – | – |
| orbits, Fisher | – | – |
| zero-parameter | learned attention pool | ||||
| Encoder | rule | probe | no coords | coords | coords |
| (WU) | (WU) | (WU) | (in-dist.) | (WU) | |
| CLIP ViT-B/16 | 0.772 | 0.777 | 0.510 | 0.997 | 0.553 |
| CLIP LAION-2B | 0.806 | 0.806 | 0.519 | 0.999 | 0.466 |
| CLIP DataComp | 0.694 | 0.699 | 0.519 | 0.998 | 0.534 |
| MetaCLIP-B | 0.772 | 0.752 | 0.515 | 0.998 | 0.709 |
| family | reads its own held-out instances | capable | chance |
|---|---|---|---|
| wu-vert | |||
| wu-mirror | – | ||
| wu-real | – | ||
| c4-axis | – | ||
| c4-mirror | – | ||
| c4-disp | – |
| Flickr30k test ( images) | COCO val2017 ( images) | |||||||
| all captions, R@1 | parsed, R@1 | all captions, R@1 | parsed, R@1 | |||||
| Encoder | native | moment | native | moment | native | moment | native | moment |
| CLIP ViT-B/16 | 0.592 | 0.587 | 0.638 | 0.514 | 0.302 | 0.295 | 0.305 | 0.205 |
| CLIP LAION-2B | 0.698 | 0.688 | 0.752 | 0.523 | 0.416 | 0.405 | 0.407 | 0.233 |
| CLIP DataComp | 0.676 | 0.665 | 0.725 | 0.486 | 0.398 | 0.388 | 0.404 | 0.250 |
| MetaCLIP-B | 0.707 | 0.702 | 0.748 | 0.619 | 0.414 | 0.406 | 0.409 | 0.295 |
Vision-Language Grounding
Vision-Language Grounding links words and phrases to the objects, regions, actions, or moments they describe in images, video, and scenes.
See all 426 papers