File size: 5,243 Bytes
c0355e8
 
333caae
c0355e8
 
333caae
 
 
 
 
 
 
c0355e8
 
 
333caae
 
c0355e8
333caae
 
 
 
c0355e8
333caae
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c0355e8
 
333caae
c0355e8
 
d878a7f
 
 
 
 
 
 
 
c0355e8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
333caae
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
---
license: mit
library_name: open_clip
pipeline_tag: image-classification
base_model: HopitAI/moda-fashion-distilled
language:
  - en
metrics:
  - f1
  - accuracy
datasets:
  - detection-datasets/fashionpedia
tags:
  - fashion
  - attribute-extraction
  - product-attributes
  - catalog-enrichment
  - e-commerce
  - computer-vision
  - image-classification
  - multi-label-classification
  - siglip
  - moda-ner
  - benchmark
  - reproducibility
  - fashionpedia
  - mit
model-index:
  - name: MODA_NER(V) Crop
    results:
      - task:
          type: image-classification
          name: Fashion attribute extraction
        dataset:
          type: moda-general-attribute-suite
          name: MODA General Attribute Suite (crop track)
        metrics:
          - type: f1
            value: 0.63
            name: Attribute micro-F1
          - type: f1
            value: 0.6074
            name: Field-macro F1
          - type: accuracy
            value: 0.8825
            name: Category accuracy
          - type: accuracy
            value: 0.9215
            name: Master-category accuracy
---


# MODA_NER(V) - Crop

> **Fix, 2026-09-19. If you ran this model before this date, re-run it.** The repository's
> `models/inference.py` ran the crop route with the wrong image preprocessing: OpenAI-CLIP
> normalisation and a centre crop, instead of the mean/std 0.5 squash this checkpoint was trained
> with. Its outputs did not match the published benchmark predictions, matching on 16 of 64
> held-out images. The weights in this repository are unchanged and correct. Pull the latest
> [Moda_ner](https://github.com/hopit-ai/Moda_ner) code and the Usage command below produces the
> published predictions. The benchmark numbers on this card were produced correctly.

*Tier `*` - open code, open weights.*

**Tier `*`** — open code, open weights. **Weights: MIT.**

Conditional attribute heads on our own frozen encoder (see Provenance below).

**Input contract:** one localized garment crop.
**Output:** 15 sparse fields — master category, category, sub-category, silhouette, hemline,
sleeve length and shape, neckline, collar presence and style, waist, material, surface
treatment, pattern, closure. No colour, no fit; the evaluation corpus for this track carries
no equivalent labels.

| | Attribute micro-F1 (crop track) |
|---|---:|
| **This released checkpoint** | **0.6300** |
| Same architecture on a frozen FashionSigLIP encoder | 0.6245 |
| Zero-shot open VLM reference (Qwen3-VL-8B) | 0.1805 |
| Zero-shot FashionSigLIP text prototypes | 0.1817 |

These are the weights that produced our published number: nothing is held back on this route.
Field-macro F1 is 0.6074, category accuracy 0.8825, master-category accuracy 0.9215.

Weak fields, stated because the micro average hides them: material 0.4148, plus surface
treatment, collar style, neckline and waist type. A headline of 0.6300 does not mean every
field is usable.

**Attribution.** The annotations behind this track are licensed CC BY 4.0 and require credit:
Jia et al., *Fashionpedia: Ontology, Segmentation, and an Attribute Localization Dataset*,
ECCV 2020. No images from that corpus are redistributed in the weights or the repository.

## Provenance

The encoder these heads run on is ours: [`HopitAI/moda-fashion-distilled`](https://huggingface.co/HopitAI/moda-fashion-distilled), MIT, already public. Nothing from another vendor is loaded at inference time.

That is worth stating plainly, because the comparator on this track is a FashionSigLIP-based system and it would be easy to assume this model is that system with heads attached. It is not. FashionSigLIP appears in two other roles:

- **As the distillation teacher.** An earlier ladder of checkpoints put conditional heads on frozen Marqo-FashionSigLIP. We distilled that system into our own encoder; the teacher is used during training and is not needed to serve.
- **As the baseline we measure against.** The comparator figure quoted above is that same FashionSigLIP-based system.

Lineage, stated once rather than implied: `moda-fashion-distilled` is itself a distilled student built on ViT-B/16-SigLIP, from a teacher ensemble that included our own DeepFashion2 fine-tune. Marqo-FashionSigLIP is Apache-2.0. The DeepFashion2 corpus is research-only, so we do not describe this pipeline as provenance-clean end to end.

**Credit for this model.** If you use these weights or report numbers from this track, cite
the MODA General Attribute Suite (see `CITATION.cff`). Scorers stamp the suite name and
version into every result file for exactly this reason.

## Links

- Benchmark tables and protocol: <https://hopit-ai.github.io/Moda_ner/>
- Code, scorers and prediction files: <https://github.com/hopit-ai/Moda_ner>
- All Hopit AI benchmarks: <https://hopit-ai.github.io/>

## Usage

The heads are not a `transformers` architecture, so load them through the suite
repository rather than `AutoModel`:

```bash
git clone https://github.com/hopit-ai/Moda_ner && cd Moda_ner
pip install -r requirements-inference.txt
huggingface-cli download HopitAI/moda-ner-v-crop --local-dir ./moda-ner-v-crop
python models/inference.py --route crop --model-dir ./moda-ner-v-crop --images photo.jpg
```