title: README
emoji: π§₯
colorFrom: indigo
colorTo: green
sdk: static
pinned: false
license: mit
short_description: SOTA fashion retrieval, measured and open.
Hopit AI β fashion retrieval, measured properly
We build the MODA family of fashion retrieval models and benchmark them the way we wish everyone did: full corpus, one shared harness, every competitor under identical protocol β including the cells we lose.
Full benchmark page Β· Interactive demo Β· Code & methodology Β· hopit.ai Β· Book a call
Text-to-image β models under 250M parameters
The size class most deployments use. Full-corpus MAP@10; best per row bold π₯, second π₯:
| benchmark (corpus) | FashionSigLIP 203M | MODA 203M | MODA Pro Lite 213M |
|---|---|---|---|
| KAGL (44K) | 0.2769 | 0.2890 π₯ | 0.3185 π₯ |
| Polyvore (94K) | 0.3665 | 0.3726 π₯ | 0.3997 π₯ |
| Atlas (78K) | 0.1826 | 0.1884 π₯ | 0.1945 π₯ |
| Fashion200K (202K) | 0.1858 π₯ | 0.1947 π₯ | 0.1802 |
| DeepFashion In-Shop (53K) | 0.1587 π₯ | 0.1703 π₯ | 0.1031 |
| DeepFashion Multimodal (43K) | 0.0148 π₯ | 0.0147 π₯ | 0.0118 |
Every benchmark in this class is led by a MODA-family model except one, where frozen FashionSigLIP keeps a 0.8% edge. MODA Pro Lite owns catalog and title search (KAGL +10.2%, Polyvore +7.3% over MODA, both significant) from one checkpoint, no serving recipe; MODA owns captions and instance retrieval (4 of 6 wins over FashionSigLIP significant under paired bootstrap).
Text-to-image β all systems, including larger models
Full-corpus MAP@10 through one shared pipeline, identical preprocessing per model, no gallery subsampling anywhere. Best per row in bold with π₯, second π₯.
| benchmark (corpus) | FashionSigLIP 203M | MODA 203M | SO400M 878M | ZooClaw 375M | MODA Pro Lite 213M | MODA Pro hosted |
|---|---|---|---|---|---|---|
| KAGL (44K) | 0.2769 | 0.2890 | 0.3370 π₯ | 0.2951 | 0.3185 | 0.3263 π₯ |
| Polyvore (94K) | 0.3665 | 0.3726 | 0.4378 π₯ | 0.3804 | 0.3997 | 0.4088 π₯ |
| Atlas (78K) | 0.1826 | 0.1884 | 0.2309 π₯ | 0.1583 | 0.1945 | 0.2053 π₯ |
| Fashion200K (202K) | 0.1858 | 0.1947 π₯ | 0.1353 | 0.1775 | 0.1802 | 0.2101 π₯ |
| DeepFashion In-Shop (53K) | 0.1587 | 0.1703 π₯ | 0.1695 | 0.1024 | 0.1031 | 0.1762 π₯ |
| DeepFashion Multimodal (43K) | 0.0148 π₯ | 0.0147 π₯ | 0.0079 | 0.0099 | 0.0118 | 0.0144 |
MODA Pro: rank 1 or 2 on every row, and on 9 of 10 cells once the H&M and ZooClaw-Fashion registers are included β the only system with no bad benchmark (+6.9% mean over MODA on these six, peak +12.9%). MODA Pro Lite is the strongest open single model β€250M on catalog search: KAGL +10.2% and Polyvore +7.3% over MODA (both significant), from one checkpoint with no serving machinery. Full page with ranks, ops costs and losses: benchmark page.
Image-to-image retrieval β LookBench Fine R@1
| model | params | Fine R@1 |
|---|---|---|
| MODA-SigLIP-Distilled | 203M | 67.63 π₯ |
| GR-Pro (closed) | n/a | 67.38 |
| Tianmu-MERE | 1.24B | 65.99β |
| FashionSigLIP | 203M | 63.84β |
β same-harness reruns; our harness reproduces Tianmu's published 66.20 within 0.5pt. A 203M open model above a closed commercial system and a 1.24B model.
The MODA family
| model | what it is | availability |
|---|---|---|
| MODA (203M) | zero-new-parameter serving recipe over frozen FashionSigLIP; 4/6 statistically significant full-corpus wins over its own base model | open source + open weights |
| MODA Pro Lite (213M) | trained encoder (verified fashion-vocab build); beats MODA on catalog search as a plain bi-encoder β no recipe required | open weights |
| MODA Pro | our hosted retrieval system β rank 1 or 2 on 9 of 10 benchmark cells at single-model query latency and cost | closed Β· hosted |
| MODA-SigLIP-Distilled (203M) | image-to-image specialist β #1 open model on LookBench | open weights (+ matryoshka, 512d, fp16-vision variants) |
Why trust these numbers
- Full corpus only β no subsampled galleries; screening runs are never mixed with full-corpus rows.
- One harness β every model, ours and competitors', runs identical preprocessing and protocol.
- Losses shown β every model card links the cells it loses; paired-bootstrap CIs where significance is claimed.
- Reproducible β code, harness, and per-cell receipts in the public repo.
Which model should I use?
| your workload | use | why |
|---|---|---|
| catalog / title search | moda-pro-lite | strongest β€250M on catalog benchmarks; plain bi-encoder, any vector DB |
| caption-style / exact-item search | MODA | leads the class on Fashion200K, In-Shop, Multimodal |
| best text search, zero integration | MODA Pro (hosted) | rank 1β2 on 9 of 10 benchmarks, no bad benchmark |
| visually similar products (image) | moda-fashion-distilled | #1 open model on LookBench |
| small index / edge | matryoshka @256d Β· fp16 | 3Γ smaller index at no loss Β· 186 MB vision tower |
All models serve on CPU. Each card links the benchmarks it loses, too.
Quick start
Text to image (plain bi-encoder, works with any vector DB):
import open_clip
model, _, preprocess = open_clip.create_model_and_transforms("hf-hub:HopitAI/moda-pro-lite")
tokenizer = open_clip.get_tokenizer("hf-hub:HopitAI/moda-pro-lite")
Image to image, for finding visually similar products:
import open_clip
model, _, preprocess = open_clip.create_model_and_transforms("hf-hub:HopitAI/moda-fashion-distilled")
MODA's full multi-view retrieval recipe:
pip install "git+https://huggingface.co/HopitAI/moda-fashionsiglip-multiview-203m"
from moda_fashionsiglip_multiview import ModaFashionSigLIP
retriever = ModaFashionSigLIP.from_pretrained()
index = retriever.build_index(image_paths, item_ids=item_ids)
results = retriever.search("red floral summer dress", index, top_k=5)[0]
Use cases
- Search a fashion catalog with a natural-language query.
- Find visually similar products in a fashion catalog.
- Match street-style looks to shoppable items.
- Deduplicate product images across marketplaces.
- Build embedding indexes for ecommerce search and recommendations.