CoolFace
Modelpublic

cvlab/new-york-smells-coip

sourceHugging Facecc-by-4.0updated 2mo agoView on Hugging Face
0likes
Model Card

COIP — Contrastive Olfaction-Image Pretraining

Joint embeddings of smell and sight, trained on New York Smells: 7,000 paired image / electronic-nose recordings captured in the wild across New York City with a Cyranose 320 (32 conducting-polymer sensors).

Two towers project into a shared 128-d L2-normalised space, so a dot product between an olfaction embedding and an image embedding is a cosine similarity. Given a smell, you can retrieve the image of what produced it; given the embedding alone, a linear probe can name the scene, object, or material.

  • —Paper: arXiv:2511.20544
  • —Code: https://github.com/cvondrick/new-york-smells
  • —Project page: https://smell.cs.columbia.edu

Usage

python
from nys.models import from_pretrained

model = from_pretrained("transformer")

image_emb, smell_emb = model(image, raw_smell)    # both (B, 128), L2-normalised
similarity = smell_emb @ image_emb.t()

raw_smell is (B, 28, 32) — concat(baseline_raw[:14], sample_raw[:14]), z-scored per sensor with training-split statistics. The smellprint model instead takes the (B, 32) hand-crafted feature. nys.data.SmellDataset assembles either from the released dataset.

Models

EncoderInputFileArchitecture
transformerraw (28, 32)transformer/model.pthCLS + 6-layer pre-norm transformer
cnnraw (28, 32)cnn/model.pth4 conv blocks over the sensor matrix
mlpraw (28, 32)mlp/model.pth3 × Linear/ReLU/LayerNorm
smellprint(32,)smellprint/model.pthMLP over the smellprint feature

Each is ~96 MB, trained on the object-level split with the image tower finetuned from ImageNet initialisation, and carries its training configuration under legacy_opt.

Cross-modal retrieval

Smell query against a gallery of image embeddings, N = 933.

Smell encoderMean rank ↓Median rank ↓R@5 ↑R@10 ↑R@20 ↑
Chance4674670.541.072.14
MLP (smellprint)362.63241.612.795.68
MLP (raw)134.44813.5022.1933.33
CNN (raw)125.03717.9026.6938.05
Transformer (raw)106.13017.3628.7241.80

Training on the raw olfactory signal substantially outperforms the hand-crafted smellprint on every metric, and the transformer is the strongest of the raw encoders.

Recognising scenes, objects and materials from smell

A linear probe on the frozen olfaction embedding, on the object-level test split. Random-weight encoders are shown for reference.

EncoderInitScene (8)Material (51)Object (49)
—chance12.52.02.0
MLP (smellprint)random29.52.83.7
MLP (smellprint)COIP32.75.04.8
MLP (raw)random90.610.817.1
MLP (raw)COIP94.210.417.7
CNN (raw)random71.29.112.6
CNN (raw)COIP93.210.118.4
Transformer (raw)random72.28.510.9
Transformer (raw)COIP87.414.516.1

Scene is top-1; material and object are balanced accuracy (mean per-class recall). Those two tasks have 51 and 49 heavily skewed classes — the largest material class alone is 13.7% of the test set — so unbalanced top-1 there largely measures the class prior. Scene's 8 classes are roughly even, where the two metrics coincide.

Scene labels are per-session; object and material labels are GPT-4o annotations derived from the paired image. All three tasks are well above chance from smell alone.

Scope

60 recording sessions in New York City over roughly three months. Electronic-nose response varies with temperature, humidity and sensor age, so behaviour on other hardware, other climates, or odorants unlike those in the dataset is untested.

Citation

bibtex
@article{ozguroglu2025smell,
  title={New York Smells: A Large Multimodal Dataset for Olfaction},
  author={Ozguroglu, Ege and Liang, Junbang and Liu, Ruoshi and Chiquier, Mia and DeTienne, Michael and Qian, Wesley Wei and Horowitz, Alexandra and Owens, Andrew and Vondrick, Carl},
  journal={arXiv preprint arXiv:2511.20544},
  year={2025}
}

License

CC BY 4.0, matching the dataset.