FlorindoDev commited on
Commit
369c342
·
verified ·
1 Parent(s): 5f8fcf6

Upload folder using huggingface_hub

Browse files
Files changed (1) hide show
  1. README.md +376 -155
README.md CHANGED
@@ -26,9 +26,61 @@ and evaluation workflows.
26
 
27
  The source code, model configuration, and usage instructions are available on
28
  [GitHub](https://github.com/FlorindoDev/OutfitTransformer).
29
- It includes the **cp_precomputed-flashionclip** (Compatibility Prediction) and
30
- **cir_precomputed-flashionclip** (Complementary Item Retrieval) runs, both on the Polyvore
31
- `nondisjoint` subset, together with train, validation, and test embeddings.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
 
33
  ## Contents and organization
34
 
@@ -40,55 +92,87 @@ individual epoch checkpoints in `epochs/`, and plots in `plots/`.
40
  ├── README.md
41
  ├── .gitattributes
42
  ├── checkpoints/
43
- │ └── nondisjoint/
 
 
 
44
  │ ├── cp_precomputed-flashionclip/
45
  │ └── cir_precomputed-flashionclip/
46
  └── precomputed_embeddings/
47
- └── nondisjoint/
48
- └── fashionCLIP/
49
- ├── train/ # manifest.json + shard-*.pt
50
- ├── validation/ # manifest.json + shard-*.pt
51
- └── test/ # manifest.json + shard-*.pt
 
 
 
 
 
 
 
 
 
52
  ```
53
 
54
  ## Parameters and hyperparameters of the published runs
55
 
56
- The following values come from the saved configurations for
57
- [cp_precomputed-flashionclip](checkpoints/nondisjoint/cp_precomputed-flashionclip/config.json) and
58
- [cir_precomputed-flashionclip](checkpoints/nondisjoint/cir_precomputed-flashionclip/config.json), compared
59
- with `run_config` in their respective `best.pt` files and latest available
60
- checkpoints. Descriptions follow the project documentation; the values shown
61
- are those of the published experiments. `null` indicates an unset value;
62
  **not recorded** indicates a field absent from the saved configuration.
63
 
 
 
 
 
 
64
  ### Checkpoints and recorded progress
65
 
66
- | Parameter | cp_precomputed-flashionclip | cir_precomputed-flashionclip |
 
 
67
  | --- | --- | --- |
68
  | Run folder | `checkpoints/nondisjoint/cp_precomputed-flashionclip/` | `checkpoints/nondisjoint/cir_precomputed-flashionclip/` |
69
  | Checkpoint format version (`checkpoint_schema_version`) | `2` | `1` |
70
  | Configured maximum epochs (`training.epochs`) | `200` | `200` |
71
- | Available epoch checkpoints | `81`, epochs `1–81` | `42`, epochs `1–42` |
72
- | Latest available checkpoint | `epochs/cp_epoch_081.pt` | `epochs/cir_epoch_042.pt` |
73
- | Epoch of `best.pt` | `73` | `17` |
74
- | Selection metric (`training.best_metric`) | `val_auc`, maximize | `val_fitb_accuracy`, maximize |
75
- | Metric value in the best checkpoint | AUC `0.95082516` | FITB accuracy `0.6854` (`68.54%`) |
76
  | Training examples in the best epoch | `106612` | `53248` |
77
  | Validation examples in the best epoch | `10000` | `5000` |
78
 
79
- The 200 epochs and the total number of optimizer steps listed below describe
80
- the configured plan. Available checkpoints document training through epochs
81
- 81 and 42 respectively; they do not establish that all 200 epochs were completed.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
82
 
83
  ### Dataset and features
84
 
85
- The values in this table are shared by both runs.
86
 
87
  | Parameter | Recorded value |
88
  | --- | --- |
89
  | Dataset (`dataset.name`) | `polyvore` |
90
  | Dataset identifier (`dataset.id`) | `mvasil/polyvore-outfits` |
91
- | Subset (`dataset.subset`) | `nondisjoint` |
92
  | Dataset directory during training (`dataset.dataset_root`) | `datasets/polyvore-outfits` |
93
  | Custom dataset cache (`dataset.cache_dir`) | `null` |
94
  | Embedding directory during training (`dataset.embedding_root`) | `precomputed_embeddings/patrickjohncyh-fashion-clip` |
@@ -98,10 +182,10 @@ The values in this table are shared by both runs.
98
  | Encoder identified in the manifests | `patrickjohncyh/fashion-clip` |
99
  | Trainable features (`features.trainable`) | `false`: the encoders are not trained in these runs |
100
 
101
- The recorded embedding path is the one used during training. In this repository,
102
- the caches are stored directly under `precomputed_embeddings/nondisjoint/fashionCLIP/<split>/`.
103
- For training, arrange the downloaded splits as `<embedding-root>/nondisjoint/<split>/`
104
- and set `--embedding-root` to that root directory.
105
 
106
  ### Architecture
107
 
@@ -123,7 +207,7 @@ the two modalities.
123
  | L2 normalization epsilon (`normalization_epsilon`) | `1e-12` | `1e-12` |
124
  | Embedding initialization standard deviation (`embedding_initialization_std`) | `0.02` | `0.02` |
125
  | Maximum number of items (`max_items`) | `16` | `16` |
126
- | Additional final LayerNorm, verified in the weights | Present: `cp.encoder.norm.*` | Absent: no `cir.encoder.norm.*` keys |
127
  | Retrieval embedding dimension (`model.cir.embedding_dim`) | Not applicable | `128` |
128
  | L2 normalization of final retrieval embeddings (`model.cir.normalize_embeddings`) | Not applicable | `false` |
129
  | Category embedding (`model.use_category_embedding`) | Not applicable | `false` |
@@ -151,23 +235,27 @@ the two modalities.
151
  | Early stopping patience (`training.early_stopping_patience`) | `null`: disabled | `null`: disabled |
152
  | Minimum improvement (`training.early_stopping_min_delta`) | `0.0` | `0.0` |
153
  | Resume weights (`training.resume_weights`) | `null` | `null` |
154
- | Initialization from CP (`training.pretrained_cp_weights`) | Not applicable | `best.pt` |
155
- | Optimizer steps per epoch (`training.optimizer_steps_per_epoch`) | `53` | `208` |
156
- | Total planned optimizer steps (`training.total_optimizer_steps`) | `10600` | `41600` |
157
 
158
  For CIR, the target is an item chosen at random on every access to an outfit.
159
  As described in the training README, the loss selects the hardest negative
160
  among the positives from the other rows in the same microbatch: accumulating
161
  up to 256 examples does not expand the negative pool of the 64-example microbatch.
162
 
163
- CIR initialization records only the name `best.pt` of the source CP checkpoint,
164
- without its full path or hash. This alone does not uniquely identify that file
165
- as the `cp_precomputed-flashionclip/best.pt` published here.
 
 
 
 
166
 
167
  ### Scheduler
168
 
169
  All fields in this table are saved under `training.scheduler` and have the same
170
- values in both runs.
171
 
172
  | Parameter | Value |
173
  | --- | --- |
@@ -193,7 +281,7 @@ values in both runs.
193
  | Distributed backend (`runtime.distributed_backend`) | Not recorded | `null` |
194
  | Mixed precision (`runtime.mixed_precision`) | Not recorded | `false` |
195
 
196
- The tables cover all fields present in the two `config.json` files. Implicit
197
  settings that were not serialized, such as AdamW betas and epsilon, and details
198
  such as the GPU model and software versions are not documented by the inspected
199
  artifacts.
@@ -213,9 +301,9 @@ resuming in this project initializes a new run from the saved weights.
213
  To load a checkpoint, use the loaders and commands from the source repository
214
  with the configuration and architecture version used during training. It is
215
  also useful to record the Git commit of the code used for each experiment.
216
- The CP checkpoint published here contains `cp.encoder.norm.*`, which is absent
217
- from the current CP architecture. Handling these checkpoints for CIR
218
- initialization is described in the
219
  [CIR README](https://github.com/FlorindoDev/OutfitTransformer/blob/main/training/CIR/README.md).
220
 
221
  Uploading to the Hub preserves the project's format; it does not automatically
@@ -233,51 +321,73 @@ manifest**, kept in the same folder. Shards contain `schema_version`, the
233
  `item_ids` identifiers, and the `embeddings` tensor; the manifest describes
234
  the encoder, dataset, subset, split, dimensions, precision, fingerprint, and shards.
235
 
236
- In the current procedure, each embedding concatenates the image and text
237
- representations, each normalized separately with L2 normalization. With
238
- FashionCLIP and the default configuration, each vector has 1024 components:
239
- 512 visual and 512 textual. The actual cache values are documented in its manifest.
 
240
 
241
  ### Parameters of the published caches
242
 
243
- | Parameter | Value in the manifests |
244
- | --- | --- |
245
- | Format version (`schema_version`) | `2` |
246
- | Dataset / subset | `mvasil/polyvore-outfits` / `nondisjoint` |
247
- | Encoder model (`encoder.model_name`) | `patrickjohncyh/fashion-clip` |
248
- | Visual encoder (`encoder.visual_encoder`) | `FashionCLIPVisualEncoder` |
249
- | Text encoder (`encoder.text_encoder`) | `FashionCLIPTextEncoder` |
250
- | Dimension per modality (`encoder.modality_dim`) | `512` |
251
- | Final dimension (`embedding_dim`) | `1024` |
252
- | Aggregation (`encoder.aggregation`) | `concat_visual_then_text` |
253
- | Normalization (`encoder.normalization`) | `l2_per_modality` |
254
- | Saved precision (`dtype`) | `float32` |
255
- | Item count limit (`limit`) | `null` |
256
- | Visual / text encoder commit (`encoder.visual_commit`, `encoder.text_commit`) | `null` / `null` |
 
 
 
 
 
 
 
 
 
 
 
257
 
258
  | Split | Items (`count`) | Shards | Manifest |
259
  | --- | --- | --- | --- |
260
- | Train | `204679` | `21` | [train/manifest.json](precomputed_embeddings/nondisjoint/fashionCLIP/train/manifest.json) |
261
- | Validation | `25132` | `3` | [validation/manifest.json](precomputed_embeddings/nondisjoint/fashionCLIP/validation/manifest.json) |
262
- | Test | `47854` | `5` | [test/manifest.json](precomputed_embeddings/nondisjoint/fashionCLIP/test/manifest.json) |
263
 
264
- Each shard contains 10000 items, except the last shard in each split: 4679 for
265
- train, 5132 for validation, and 7854 for test. These counts refer to items with
266
- embeddings, not outfits or training examples.
267
 
268
- Train and validation share the `model_fingerprint`
 
 
 
 
 
 
 
 
 
 
269
  `dfcff17f9fb9335b22792d610cb7e4ba8cd73afa2954b725aa5e2d993bc10c27`.
270
- The test cache instead records
271
  `b00590d05bc4af1a3a5316ecb65dabea7315fa93adf0dcbdbec0b8399ec1e788`.
272
- The encoder name and dimensions match, but the fingerprints differ: these
273
- metadata do not establish that the precomputation configuration is identical
274
- between test and the other splits.
275
-
276
- Use embeddings consistent with the checkpoint and the required dataset,
277
- subset, and split. Training workflows also verify that encoder fingerprints
278
- match between train and validation caches. Caches contain identifiers and
279
- vectors; the data needed to construct outfits, labels, and queries are still
280
- those required by the project.
 
 
281
 
282
  ## References
283
 
@@ -301,9 +411,61 @@ training e valutazione del progetto.
301
 
302
  Il codice sorgente, la configurazione del modello e le istruzioni di utilizzo sono
303
  disponibili su [GitHub](https://github.com/FlorindoDev/OutfitTransformer).
304
- Sono inclusi i run **cp_precomputed-flashionclip** (Compatibility Prediction) e
305
- **cir_precomputed-flashionclip** (Complementary Item Retrieval), entrambi sul subset
306
- `nondisjoint` di Polyvore, insieme agli embedding di train, validation e test.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
307
 
308
  ## Contenuto e organizzazione
309
 
@@ -316,55 +478,88 @@ Gli artefatti sono organizzati come segue. Ogni run contiene `best.pt`,
316
  ├── README.md
317
  ├── .gitattributes
318
  ├── checkpoints/
319
- │ └── nondisjoint/
 
 
 
320
  │ ├── cp_precomputed-flashionclip/
321
  │ └── cir_precomputed-flashionclip/
322
  └── precomputed_embeddings/
323
- └── nondisjoint/
324
- └── fashionCLIP/
325
- ├── train/ # manifest.json + shard-*.pt
326
- ├── validation/ # manifest.json + shard-*.pt
327
- └── test/ # manifest.json + shard-*.pt
 
 
 
 
 
 
 
 
 
328
  ```
329
 
330
  ## Parametri e iperparametri dei run pubblicati
331
 
332
- I valori seguenti provengono dalle configurazioni salvate nei run
333
- [cp_precomputed-flashionclip](checkpoints/nondisjoint/cp_precomputed-flashionclip/config.json) e
334
- [cir_precomputed-flashionclip](checkpoints/nondisjoint/cir_precomputed-flashionclip/config.json), confrontate
335
- con `run_config` nei rispettivi `best.pt` e nell'ultimo checkpoint disponibile.
336
- Le descrizioni seguono la documentazione del progetto; i valori riportati sono
337
- quelli degli esperimenti pubblicati. `null` indica un valore non impostato;
338
- **non registrato** indica un campo assente dalla configurazione salvata.
 
 
 
 
339
 
340
  ### Checkpoint e avanzamento registrato
341
 
342
- | Parametro | cp_precomputed-flashionclip | cir_precomputed-flashionclip |
 
 
343
  | --- | --- | --- |
344
  | Cartella del run | `checkpoints/nondisjoint/cp_precomputed-flashionclip/` | `checkpoints/nondisjoint/cir_precomputed-flashionclip/` |
345
  | Versione del formato checkpoint (`checkpoint_schema_version`) | `2` | `1` |
346
  | Epoche massime configurate (`training.epochs`) | `200` | `200` |
347
- | Checkpoint di epoca disponibili | `81`, epoche `1–81` | `42`, epoche `1–42` |
348
- | Ultimo checkpoint disponibile | `epochs/cp_epoch_081.pt` | `epochs/cir_epoch_042.pt` |
349
- | Epoca di `best.pt` | `73` | `17` |
350
- | Metrica di selezione (`training.best_metric`) | `val_auc`, da massimizzare | `val_fitb_accuracy`, da massimizzare |
351
- | Valore della metrica nel best | AUC `0.95082516` | FITB accuracy `0.6854` (`68.54%`) |
352
  | Esempi train nell'epoca del best | `106612` | `53248` |
353
  | Esempi validation nell'epoca del best | `10000` | `5000` |
354
 
355
- Le 200 epoche e il numero totale di optimizer step riportato sotto descrivono il
356
- piano configurato. I checkpoint disponibili documentano il training fino alle
357
- epoche 81 e 42 rispettivamente; non attestano il completamento delle 200 epoche.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
358
 
359
  ### Dataset e feature
360
 
361
- I valori di questa tabella sono comuni ai due run.
362
 
363
  | Parametro | Valore registrato |
364
  | --- | --- |
365
  | Dataset (`dataset.name`) | `polyvore` |
366
  | Identificativo dataset (`dataset.id`) | `mvasil/polyvore-outfits` |
367
- | Subset (`dataset.subset`) | `nondisjoint` |
368
  | Directory dataset nel training (`dataset.dataset_root`) | `datasets/polyvore-outfits` |
369
  | Cache dataset personalizzata (`dataset.cache_dir`) | `null` |
370
  | Directory embedding nel training (`dataset.embedding_root`) | `precomputed_embeddings/patrickjohncyh-fashion-clip` |
@@ -374,10 +569,10 @@ I valori di questa tabella sono comuni ai due run.
374
  | Encoder identificato nei manifest | `patrickjohncyh/fashion-clip` |
375
  | Feature allenabili (`features.trainable`) | `false`: gli encoder non vengono allenati in questi run |
376
 
377
- Il percorso degli embedding registrato è quello usato durante il training.
378
- In questa repository le cache si trovano direttamente in
379
- `precomputed_embeddings/nondisjoint/fashionCLIP/<split>/`. Per il training, disponi gli split scaricati come
380
- `<embedding-root>/nondisjoint/<split>/` e imposta `--embedding-root` su quella directory radice.
381
 
382
  ### Architettura
383
 
@@ -399,7 +594,7 @@ concatenazione delle due modalità.
399
  | Epsilon normalizzazione L2 (`normalization_epsilon`) | `1e-12` | `1e-12` |
400
  | Deviazione standard inizializzazione embedding (`embedding_initialization_std`) | `0.02` | `0.02` |
401
  | Numero massimo di item (`max_items`) | `16` | `16` |
402
- | LayerNorm finale aggiuntiva, verificata nei pesi | Presente: `cp.encoder.norm.*` | Assente: nessuna chiave `cir.encoder.norm.*` |
403
  | Dimensione embedding di retrieval (`model.cir.embedding_dim`) | Non applicabile | `128` |
404
  | Normalizzazione L2 degli embedding finali di retrieval (`model.cir.normalize_embeddings`) | Non applicabile | `false` |
405
  | Embedding di categoria (`model.use_category_embedding`) | Non applicabile | `false` |
@@ -427,23 +622,27 @@ concatenazione delle due modalità.
427
  | Early stopping, patience (`training.early_stopping_patience`) | `null`: disabilitato | `null`: disabilitato |
428
  | Miglioramento minimo (`training.early_stopping_min_delta`) | `0.0` | `0.0` |
429
  | Pesi per resume (`training.resume_weights`) | `null` | `null` |
430
- | Inizializzazione da CP (`training.pretrained_cp_weights`) | Non applicabile | `best.pt` |
431
- | Optimizer step per epoca (`training.optimizer_steps_per_epoch`) | `53` | `208` |
432
- | Optimizer step totali pianificati (`training.total_optimizer_steps`) | `10600` | `41600` |
433
 
434
  Per CIR il target è un item scelto casualmente a ogni accesso all'outfit. Come
435
  descritto nel README del training, la loss seleziona il negativo più difficile
436
  tra i positivi delle altre righe dello stesso microbatch: l'accumulo fino a 256
437
  esempi non amplia il gruppo di negativi del microbatch da 64.
438
 
439
- L'inizializzazione CIR registra soltanto il nome `best.pt` del checkpoint CP
440
- sorgente, senza percorso completo o hash. Questo dato da solo non identifica
441
- univocamente il file come il `cp_precomputed-flashionclip/best.pt` qui pubblicato.
 
 
 
 
442
 
443
  ### Scheduler
444
 
445
  Tutti i campi di questa tabella sono salvati in `training.scheduler` e hanno lo
446
- stesso valore nei due run.
447
 
448
  | Parametro | Valore |
449
  | --- | --- |
@@ -469,7 +668,7 @@ stesso valore nei due run.
469
  | Backend distribuito (`runtime.distributed_backend`) | Non registrato | `null` |
470
  | Mixed precision (`runtime.mixed_precision`) | Non registrata | `false` |
471
 
472
- Le tabelle coprono tutti i campi presenti nei due `config.json`. Impostazioni
473
  implicite non serializzate, come i beta e l'epsilon di AdamW, e dettagli quali
474
  modello di GPU e versioni software non sono documentati dagli artefatti letti.
475
 
@@ -489,9 +688,9 @@ del progetto inizializza un nuovo run a partire dai pesi salvati.
489
  Per caricare un checkpoint, usa i loader e i comandi della repository sorgente,
490
  con la configurazione e la versione dell'architettura usate durante il training.
491
  Per ciascun esperimento è utile riportare anche il commit Git del codice usato.
492
- Il checkpoint CP qui pubblicato contiene `cp.encoder.norm.*`, assente
493
- nell'architettura CP attuale. La gestione di questi checkpoint per
494
- l'inizializzazione di CIR è descritta nel
495
  [README CIR](https://github.com/FlorindoDev/OutfitTransformer/blob/main/training/CIR/README.md).
496
 
497
  Il caricamento sul Hub conserva il formato del progetto; non aggiunge
@@ -509,51 +708,73 @@ manifest**, mantenuti nella stessa cartella. Gli shard contengono `schema_versio
509
  gli identificativi `item_ids` e il tensore `embeddings`; il manifest descrive
510
  encoder, dataset, subset, split, dimensioni, precisione, fingerprint e shard.
511
 
512
- Nella procedura attuale, ogni embedding concatena le rappresentazioni di immagine
513
- e testo, normalizzate L2 separatamente. Con FashionCLIP e la configurazione
514
- predefinita, ogni vettore ha 1024 componenti: 512 visuali e 512 testuali.
515
- I valori effettivi della cache sono documentati nel relativo manifest.
 
516
 
517
  ### Parametri delle cache pubblicate
518
 
519
- | Parametro | Valore nei manifest |
520
- | --- | --- |
521
- | Versione del formato (`schema_version`) | `2` |
522
- | Dataset / subset | `mvasil/polyvore-outfits` / `nondisjoint` |
523
- | Modello encoder (`encoder.model_name`) | `patrickjohncyh/fashion-clip` |
524
- | Encoder visuale (`encoder.visual_encoder`) | `FashionCLIPVisualEncoder` |
525
- | Encoder testuale (`encoder.text_encoder`) | `FashionCLIPTextEncoder` |
526
- | Dimensione per modalità (`encoder.modality_dim`) | `512` |
527
- | Dimensione finale (`embedding_dim`) | `1024` |
528
- | Aggregazione (`encoder.aggregation`) | `concat_visual_then_text` |
529
- | Normalizzazione (`encoder.normalization`) | `l2_per_modality` |
530
- | Precisione salvata (`dtype`) | `float32` |
531
- | Limite al numero di articoli (`limit`) | `null` |
532
- | Commit encoder visuale / testuale (`encoder.visual_commit`, `encoder.text_commit`) | `null` / `null` |
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
533
 
534
  | Split | Articoli (`count`) | Shard | Manifest |
535
  | --- | --- | --- | --- |
536
- | Train | `204679` | `21` | [train/manifest.json](precomputed_embeddings/nondisjoint/fashionCLIP/train/manifest.json) |
537
- | Validation | `25132` | `3` | [validation/manifest.json](precomputed_embeddings/nondisjoint/fashionCLIP/validation/manifest.json) |
538
- | Test | `47854` | `5` | [test/manifest.json](precomputed_embeddings/nondisjoint/fashionCLIP/test/manifest.json) |
539
 
540
- Gli shard contengono 10000 articoli ciascuno, tranne gli ultimi: 4679 per train,
541
- 5132 per validation e 7854 per test. I conteggi indicano articoli con embedding,
542
- non outfit o esempi di training.
543
 
544
- Train e validation condividono il `model_fingerprint`
 
545
  `dfcff17f9fb9335b22792d610cb7e4ba8cd73afa2954b725aa5e2d993bc10c27`.
546
- La cache test registra invece
547
  `b00590d05bc4af1a3a5316ecb65dabea7315fa93adf0dcbdbec0b8399ec1e788`.
548
- Nome encoder e dimensioni coincidono, ma i fingerprint differiscono: questi
549
- metadati non attestano l'identità della configurazione di precomputazione tra
550
- test e gli altri split.
551
-
552
- Usa embedding coerenti con il checkpoint e con il dataset, il subset e lo split
553
- richiesti. I flussi di training verificano anche la corrispondenza del fingerprint
554
- degli encoder tra le cache di train e validation. Le cache contengono gli
555
- identificativi e i vettori; i dati necessari a costruire outfit, etichette e query
556
- restano quelli richiesti dal progetto.
 
 
557
 
558
  ## Riferimenti
559
 
 
26
 
27
  The source code, model configuration, and usage instructions are available on
28
  [GitHub](https://github.com/FlorindoDev/OutfitTransformer).
29
+ It includes **cp_precomputed-flashionclip** (Compatibility Prediction) and
30
+ **cir_precomputed-flashionclip** (Complementary Item Retrieval) checkpoints for
31
+ both Polyvore subsets, `nondisjoint` and `disjoint`. FashionCLIP embeddings
32
+ are available for both subsets, with Marqo FashionSigLIP embeddings also
33
+ included for `nondisjoint`. Each cache has train, validation, and test splits.
34
+
35
+ ## Results
36
+
37
+ Results on Polyvore, split `test`, with precomputed embeddings, grouped by
38
+ `nondisjoint` and `disjoint` subsets. Metrics use a 0–1 scale, rounded to four
39
+ decimal places.
40
+
41
+ ### Nondisjoint
42
+
43
+ | Metric / run detail | CP |
44
+ |---|---:|
45
+ | Checkpoint epoch | 76 |
46
+ | Evaluated examples | 20000 |
47
+ | Accuracy | 0.8478 |
48
+ | Precision | 0.9489 |
49
+ | Recall | 0.7352 |
50
+ | F1 | 0.8285 |
51
+ | ROC AUC | 0.9513 |
52
+
53
+ | Metric / run detail | CIR FITB |
54
+ |---|---:|
55
+ | Checkpoint epoch | 19 |
56
+ | Evaluated examples | 10000 |
57
+ | FITB accuracy | 0.6807 |
58
+ | MRR | 0.8169 |
59
+ | Recall@2 | 0.8782 |
60
+
61
+ CIR tests were run without `category_emb`.
62
+
63
+ ### Disjoint
64
+
65
+ | Metric / run detail | CP |
66
+ |---|---:|
67
+ | Checkpoint epoch | 76 |
68
+ | Evaluated examples | 30290 |
69
+ | Accuracy | 0.6904 |
70
+ | Precision | 0.9816 |
71
+ | Recall | 0.3880 |
72
+ | F1 | 0.5561 |
73
+ | ROC AUC | 0.9202 |
74
+
75
+ | Metric / run detail | CIR FITB |
76
+ |---|---:|
77
+ | Checkpoint epoch | 22 |
78
+ | Evaluated examples | 15145 |
79
+ | FITB accuracy | 0.6640 |
80
+ | MRR | 0.8063 |
81
+ | Recall@2 | 0.8664 |
82
+
83
+ CIR tests were run without `category_emb`.
84
 
85
  ## Contents and organization
86
 
 
92
  ├── README.md
93
  ├── .gitattributes
94
  ├── checkpoints/
95
+ │ ├── nondisjoint/
96
+ │ │ ├── cp_precomputed-flashionclip/
97
+ │ │ └── cir_precomputed-flashionclip/
98
+ │ └── disjoint/
99
  │ ├── cp_precomputed-flashionclip/
100
  │ └── cir_precomputed-flashionclip/
101
  └── precomputed_embeddings/
102
+ ├── fashionCLIP/
103
+ │ ├── nondisjoint/
104
+ │ │ ├── train/
105
+ │ │ ├── validation/
106
+ │ │ └── test/
107
+ │ └── disjoint/
108
+ │ ├── train/
109
+ │ ├── validation/
110
+ │ └── test/
111
+ └── fashionSigLIP/
112
+ └── nondisjoint/
113
+ ├── train/
114
+ ├── validation/
115
+ └── test/
116
  ```
117
 
118
  ## Parameters and hyperparameters of the published runs
119
 
120
+ Values come from the four saved configurations, checked against `run_config`
121
+ in their respective `best.pt` files. Progress and validation metrics come from
122
+ the local checkpoints; test results are listed separately above. Shared tables
123
+ apply to both subsets unless stated otherwise. `null` indicates an unset value;
 
 
124
  **not recorded** indicates a field absent from the saved configuration.
125
 
126
+ | Subset | CP | CIR |
127
+ | --- | --- | --- |
128
+ | `nondisjoint` | [config.json](checkpoints/nondisjoint/cp_precomputed-flashionclip/config.json) | [config.json](checkpoints/nondisjoint/cir_precomputed-flashionclip/config.json) |
129
+ | `disjoint` | [config.json](checkpoints/disjoint/cp_precomputed-flashionclip/config.json) | [config.json](checkpoints/disjoint/cir_precomputed-flashionclip/config.json) |
130
+
131
  ### Checkpoints and recorded progress
132
 
133
+ #### Nondisjoint
134
+
135
+ | Parameter | CP | CIR |
136
  | --- | --- | --- |
137
  | Run folder | `checkpoints/nondisjoint/cp_precomputed-flashionclip/` | `checkpoints/nondisjoint/cir_precomputed-flashionclip/` |
138
  | Checkpoint format version (`checkpoint_schema_version`) | `2` | `1` |
139
  | Configured maximum epochs (`training.epochs`) | `200` | `200` |
140
+ | Available epoch checkpoints | `77` (`1–77`) | `24` (`1–24`) |
141
+ | Latest available checkpoint | `epochs/cp_epoch_077.pt` | `epochs/cir_epoch_024.pt` |
142
+ | Epoch of `best.pt` | `76` | `19` |
143
+ | Selection metric (`training.best_metric`) | `val_auc` | `val_fitb_accuracy` |
144
+ | Validation metric in the best checkpoint | `0.95184712` | `0.6830` |
145
  | Training examples in the best epoch | `106612` | `53248` |
146
  | Validation examples in the best epoch | `10000` | `5000` |
147
 
148
+ #### Disjoint
149
+
150
+ | Parameter | CP | CIR |
151
+ | --- | --- | --- |
152
+ | Run folder | `checkpoints/disjoint/cp_precomputed-flashionclip/` | `checkpoints/disjoint/cir_precomputed-flashionclip/` |
153
+ | Checkpoint format version (`checkpoint_schema_version`) | `2` | `1` |
154
+ | Configured maximum epochs (`training.epochs`) | `200` | `200` |
155
+ | Available epoch checkpoints | `27` (`50–76`) | `22` (`1–22`) |
156
+ | Latest available checkpoint | `epochs/cp_epoch_076.pt` | `epochs/cir_epoch_022.pt` |
157
+ | Epoch of `best.pt` | `76` | `22` |
158
+ | Selection metric (`training.best_metric`) | `val_auc` | `val_fitb_accuracy` |
159
+ | Validation metric in the best checkpoint | `0.93390839` | `0.6723` |
160
+ | Training examples in the best epoch | `33990` | `16960` |
161
+ | Validation examples in the best epoch | `6000` | `3000` |
162
+
163
+ Selection metrics are maximized. The 200 epochs and total optimizer steps
164
+ describe the configured plan; available files document only the epochs
165
+ listed in the tables.
166
 
167
  ### Dataset and features
168
 
169
+ The values apply to all four runs; each run uses its own subset.
170
 
171
  | Parameter | Recorded value |
172
  | --- | --- |
173
  | Dataset (`dataset.name`) | `polyvore` |
174
  | Dataset identifier (`dataset.id`) | `mvasil/polyvore-outfits` |
175
+ | Subset (`dataset.subset`) | `nondisjoint` / `disjoint` |
176
  | Dataset directory during training (`dataset.dataset_root`) | `datasets/polyvore-outfits` |
177
  | Custom dataset cache (`dataset.cache_dir`) | `null` |
178
  | Embedding directory during training (`dataset.embedding_root`) | `precomputed_embeddings/patrickjohncyh-fashion-clip` |
 
182
  | Encoder identified in the manifests | `patrickjohncyh/fashion-clip` |
183
  | Trainable features (`features.trainable`) | `false`: the encoders are not trained in these runs |
184
 
185
+ The recorded embedding path is the one used during training. Current caches
186
+ are stored under `precomputed_embeddings/fashionCLIP/<subset>/<split>/`.
187
+ Set `--embedding-root <download-dir>/precomputed_embeddings/fashionCLIP` when
188
+ using the downloaded repository; the loader selects the subset and split.
189
 
190
  ### Architecture
191
 
 
207
  | L2 normalization epsilon (`normalization_epsilon`) | `1e-12` | `1e-12` |
208
  | Embedding initialization standard deviation (`embedding_initialization_std`) | `0.02` | `0.02` |
209
  | Maximum number of items (`max_items`) | `16` | `16` |
210
+ | Additional final LayerNorm, verified in the weights | Absent: no `cp.encoder.norm.*` keys | Absent: no `cir.encoder.norm.*` keys |
211
  | Retrieval embedding dimension (`model.cir.embedding_dim`) | Not applicable | `128` |
212
  | L2 normalization of final retrieval embeddings (`model.cir.normalize_embeddings`) | Not applicable | `false` |
213
  | Category embedding (`model.use_category_embedding`) | Not applicable | `false` |
 
235
  | Early stopping patience (`training.early_stopping_patience`) | `null`: disabled | `null`: disabled |
236
  | Minimum improvement (`training.early_stopping_min_delta`) | `0.0` | `0.0` |
237
  | Resume weights (`training.resume_weights`) | `null` | `null` |
238
+ | Initialization from CP (`training.pretrained_cp_weights`) | Not applicable | Subset-specific paths below |
239
+ | Optimizer steps per epoch (`training.optimizer_steps_per_epoch`) | nondisjoint: `53`; disjoint: `17` | nondisjoint: `208`; disjoint: `67` |
240
+ | Total planned optimizer steps (`training.total_optimizer_steps`) | nondisjoint: `10600`; disjoint: `3400` | nondisjoint: `41600`; disjoint: `13400` |
241
 
242
  For CIR, the target is an item chosen at random on every access to an outfit.
243
  As described in the training README, the loss selects the hardest negative
244
  among the positives from the other rows in the same microbatch: accumulating
245
  up to 256 examples does not expand the negative pool of the 64-example microbatch.
246
 
247
+ CIR configurations record these CP initialization paths:
248
+
249
+ - `nondisjoint`: `checkpoints/nondisjoint/cp_precomputed/best.pt`.
250
+ - `disjoint`: `checkpoints/disjoint/cp_fashionclip/best.pt`.
251
+
252
+ These paths describe the training layout; update them to the corresponding
253
+ local CP checkpoint when reproducing a run.
254
 
255
  ### Scheduler
256
 
257
  All fields in this table are saved under `training.scheduler` and have the same
258
+ values in all four runs.
259
 
260
  | Parameter | Value |
261
  | --- | --- |
 
281
  | Distributed backend (`runtime.distributed_backend`) | Not recorded | `null` |
282
  | Mixed precision (`runtime.mixed_precision`) | Not recorded | `false` |
283
 
284
+ The tables cover the fields present in the four `config.json` files. Implicit
285
  settings that were not serialized, such as AdamW betas and epsilon, and details
286
  such as the GPU model and software versions are not documented by the inspected
287
  artifacts.
 
301
  To load a checkpoint, use the loaders and commands from the source repository
302
  with the configuration and architecture version used during training. It is
303
  also useful to record the Git commit of the code used for each experiment.
304
+ The four checkpoints have no additional final Transformer LayerNorm
305
+ (`cp.encoder.norm.*` or `cir.encoder.norm.*`). Initialization of CIR from CP
306
+ is described in the
307
  [CIR README](https://github.com/FlorindoDev/OutfitTransformer/blob/main/training/CIR/README.md).
308
 
309
  Uploading to the Hub preserves the project's format; it does not automatically
 
321
  `item_ids` identifiers, and the `embeddings` tensor; the manifest describes
322
  the encoder, dataset, subset, split, dimensions, precision, fingerprint, and shards.
323
 
324
+ Each embedding concatenates image and text representations, each normalized
325
+ separately with L2 normalization. FashionCLIP produces 1024 components
326
+ (512 visual + 512 textual); Marqo FashionSigLIP produces 1536 (768 + 768).
327
+ The published checkpoints use FashionCLIP. FashionSigLIP caches require
328
+ models configured for their 1536-dimensional inputs.
329
 
330
  ### Parameters of the published caches
331
 
332
+ | Parameter | FashionCLIP | Marqo FashionSigLIP |
333
+ | --- | --- | --- |
334
+ | Format version (`schema_version`) | `2` | `2` |
335
+ | Dataset | `mvasil/polyvore-outfits` | `mvasil/polyvore-outfits` |
336
+ | Available subsets | `nondisjoint`, `disjoint` | `nondisjoint` |
337
+ | Encoder model (`encoder.model_name`) | `patrickjohncyh/fashion-clip` | `Marqo/marqo-fashionSigLIP` |
338
+ | Visual encoder (`encoder.visual_encoder`) | `FashionCLIPVisualEncoder` | `MarqoFashionSigLIPVisualEncoder` |
339
+ | Text encoder (`encoder.text_encoder`) | `FashionCLIPTextEncoder` | `MarqoFashionSigLIPTextEncoder` |
340
+ | Dimension per modality (`encoder.modality_dim`) | `512` | `768` |
341
+ | Final dimension (`embedding_dim`) | `1024` | `1536` |
342
+ | Aggregation (`encoder.aggregation`) | `concat_visual_then_text` | `concat_visual_then_text` |
343
+ | Normalization (`encoder.normalization`) | `l2_per_modality` | `l2_per_modality` |
344
+ | Saved precision (`dtype`) | `float32` | `float32` |
345
+ | Item count limit (`limit`) | `null` | `null` |
346
+ | Visual / text encoder commit | `null` / `null` | `c56244cc94f92419e8369fa71efdaf403b124ce8` / `c56244cc94f92419e8369fa71efdaf403b124ce8` |
347
+
348
+ #### fashionCLIP / nondisjoint
349
+
350
+ | Split | Items (`count`) | Shards | Manifest |
351
+ | --- | --- | --- | --- |
352
+ | Train | `204679` | `21` | [train/manifest.json](precomputed_embeddings/fashionCLIP/nondisjoint/train/manifest.json) |
353
+ | Validation | `25132` | `3` | [validation/manifest.json](precomputed_embeddings/fashionCLIP/nondisjoint/validation/manifest.json) |
354
+ | Test | `47854` | `5` | [test/manifest.json](precomputed_embeddings/fashionCLIP/nondisjoint/test/manifest.json) |
355
+
356
+ #### fashionCLIP / disjoint
357
 
358
  | Split | Items (`count`) | Shards | Manifest |
359
  | --- | --- | --- | --- |
360
+ | Train | `71967` | `8` | [train/manifest.json](precomputed_embeddings/fashionCLIP/disjoint/train/manifest.json) |
361
+ | Validation | `14657` | `2` | [validation/manifest.json](precomputed_embeddings/fashionCLIP/disjoint/validation/manifest.json) |
362
+ | Test | `70035` | `8` | [test/manifest.json](precomputed_embeddings/fashionCLIP/disjoint/test/manifest.json) |
363
 
364
+ #### fashionSigLIP / nondisjoint
 
 
365
 
366
+ | Split | Items (`count`) | Shards | Manifest |
367
+ | --- | --- | --- | --- |
368
+ | Train | `204679` | `21` | [train/manifest.json](precomputed_embeddings/fashionSigLIP/nondisjoint/train/manifest.json) |
369
+ | Validation | `25132` | `3` | [validation/manifest.json](precomputed_embeddings/fashionSigLIP/nondisjoint/validation/manifest.json) |
370
+ | Test | `47854` | `5` | [test/manifest.json](precomputed_embeddings/fashionSigLIP/nondisjoint/test/manifest.json) |
371
+
372
+ Shards contain at most 10000 items each; the last shard may be smaller.
373
+ Counts refer to items with embeddings.
374
+
375
+ FashionCLIP disjoint manifests and nondisjoint train/validation share the
376
+ `model_fingerprint`
377
  `dfcff17f9fb9335b22792d610cb7e4ba8cd73afa2954b725aa5e2d993bc10c27`.
378
+ FashionCLIP nondisjoint test instead records
379
  `b00590d05bc4af1a3a5316ecb65dabea7315fa93adf0dcbdbec0b8399ec1e788`.
380
+ All three FashionSigLIP caches share
381
+ `333a9948b0d676879fbac0938f4f8654eae108dbc00cfbf3f59552c051ac8802`.
382
+ Matching encoder names and dimensions do not establish identical
383
+ precomputation configurations when fingerprints differ.
384
+
385
+ Use `--embedding-root <download-dir>/precomputed_embeddings/fashionCLIP` or
386
+ `--embedding-root <download-dir>/precomputed_embeddings/fashionSigLIP`, according
387
+ to the model. The loader reads `<embedding-root>/<subset>/<split>/`.
388
+ Use caches matching the checkpoint, dataset, subset, and split; train and
389
+ validation must have matching fingerprints. The data needed to construct
390
+ outfits, labels, and queries are still those required by the project.
391
 
392
  ## References
393
 
 
411
 
412
  Il codice sorgente, la configurazione del modello e le istruzioni di utilizzo sono
413
  disponibili su [GitHub](https://github.com/FlorindoDev/OutfitTransformer).
414
+ Sono inclusi i checkpoint **cp_precomputed-flashionclip** (Compatibility Prediction)
415
+ e **cir_precomputed-flashionclip** (Complementary Item Retrieval) per entrambi
416
+ i subset Polyvore, `nondisjoint` e `disjoint`. Gli embedding FashionCLIP sono
417
+ disponibili per entrambi i subset; sono inclusi anche gli embedding Marqo
418
+ FashionSigLIP per `nondisjoint`. Ogni cache contiene train, validation e test.
419
+
420
+ ## Risultati
421
+
422
+ Risultati su Polyvore, split `test`, con embedding precomputati, suddivisi per
423
+ subset `nondisjoint` e `disjoint`. Metriche su scala 0–1, arrotondate a quattro
424
+ cifre decimali.
425
+
426
+ ### Nondisjoint
427
+
428
+ | Metrica / dettaglio esecuzione | CP |
429
+ |---|---:|
430
+ | Epoca del checkpoint | 76 |
431
+ | Esempi valutati | 20000 |
432
+ | Accuracy | 0.8478 |
433
+ | Precision | 0.9489 |
434
+ | Recall | 0.7352 |
435
+ | F1 | 0.8285 |
436
+ | ROC AUC | 0.9513 |
437
+
438
+ | Metrica / dettaglio esecuzione | CIR FITB |
439
+ |---|---:|
440
+ | Epoca del checkpoint | 19 |
441
+ | Esempi valutati | 10000 |
442
+ | FITB accuracy | 0.6807 |
443
+ | MRR | 0.8169 |
444
+ | Recall@2 | 0.8782 |
445
+
446
+ I test CIR sono stati eseguiti senza `category_emb`.
447
+
448
+ ### Disjoint
449
+
450
+ | Metrica / dettaglio esecuzione | CP |
451
+ |---|---:|
452
+ | Epoca del checkpoint | 76 |
453
+ | Esempi valutati | 30290 |
454
+ | Accuracy | 0.6904 |
455
+ | Precision | 0.9816 |
456
+ | Recall | 0.3880 |
457
+ | F1 | 0.5561 |
458
+ | ROC AUC | 0.9202 |
459
+
460
+ | Metrica / dettaglio esecuzione | CIR FITB |
461
+ |---|---:|
462
+ | Epoca del checkpoint | 22 |
463
+ | Esempi valutati | 15145 |
464
+ | FITB accuracy | 0.6640 |
465
+ | MRR | 0.8063 |
466
+ | Recall@2 | 0.8664 |
467
+
468
+ I test CIR sono stati eseguiti senza `category_emb`.
469
 
470
  ## Contenuto e organizzazione
471
 
 
478
  ├── README.md
479
  ├── .gitattributes
480
  ├── checkpoints/
481
+ │ ├── nondisjoint/
482
+ │ │ ├── cp_precomputed-flashionclip/
483
+ │ │ └── cir_precomputed-flashionclip/
484
+ │ └── disjoint/
485
  │ ├── cp_precomputed-flashionclip/
486
  │ └── cir_precomputed-flashionclip/
487
  └── precomputed_embeddings/
488
+ ├── fashionCLIP/
489
+ │ ├── nondisjoint/
490
+ │ │ ├── train/
491
+ │ │ ├── validation/
492
+ │ │ └── test/
493
+ │ └── disjoint/
494
+ │ ├── train/
495
+ │ ├── validation/
496
+ │ └── test/
497
+ └── fashionSigLIP/
498
+ └── nondisjoint/
499
+ ├── train/
500
+ ├── validation/
501
+ └── test/
502
  ```
503
 
504
  ## Parametri e iperparametri dei run pubblicati
505
 
506
+ I valori provengono dalle quattro configurazioni salvate, verificate con
507
+ `run_config` nei rispettivi `best.pt`. Avanzamento e metriche di validation
508
+ provengono dai checkpoint locali; i risultati di test sono riportati sopra.
509
+ Le tabelle comuni valgono per entrambi i subset salvo indicazione diversa.
510
+ `null` indica un valore non impostato; **non registrato** indica un campo
511
+ assente dalla configurazione salvata.
512
+
513
+ | Subset | CP | CIR |
514
+ | --- | --- | --- |
515
+ | `nondisjoint` | [config.json](checkpoints/nondisjoint/cp_precomputed-flashionclip/config.json) | [config.json](checkpoints/nondisjoint/cir_precomputed-flashionclip/config.json) |
516
+ | `disjoint` | [config.json](checkpoints/disjoint/cp_precomputed-flashionclip/config.json) | [config.json](checkpoints/disjoint/cir_precomputed-flashionclip/config.json) |
517
 
518
  ### Checkpoint e avanzamento registrato
519
 
520
+ #### Nondisjoint
521
+
522
+ | Parametro | CP | CIR |
523
  | --- | --- | --- |
524
  | Cartella del run | `checkpoints/nondisjoint/cp_precomputed-flashionclip/` | `checkpoints/nondisjoint/cir_precomputed-flashionclip/` |
525
  | Versione del formato checkpoint (`checkpoint_schema_version`) | `2` | `1` |
526
  | Epoche massime configurate (`training.epochs`) | `200` | `200` |
527
+ | Checkpoint di epoca disponibili | `77` (`1–77`) | `24` (`1–24`) |
528
+ | Ultimo checkpoint disponibile | `epochs/cp_epoch_077.pt` | `epochs/cir_epoch_024.pt` |
529
+ | Epoca di `best.pt` | `76` | `19` |
530
+ | Metrica di selezione (`training.best_metric`) | `val_auc` | `val_fitb_accuracy` |
531
+ | Metrica di validation nel best | `0.95184712` | `0.6830` |
532
  | Esempi train nell'epoca del best | `106612` | `53248` |
533
  | Esempi validation nell'epoca del best | `10000` | `5000` |
534
 
535
+ #### Disjoint
536
+
537
+ | Parametro | CP | CIR |
538
+ | --- | --- | --- |
539
+ | Cartella del run | `checkpoints/disjoint/cp_precomputed-flashionclip/` | `checkpoints/disjoint/cir_precomputed-flashionclip/` |
540
+ | Versione del formato checkpoint (`checkpoint_schema_version`) | `2` | `1` |
541
+ | Epoche massime configurate (`training.epochs`) | `200` | `200` |
542
+ | Checkpoint di epoca disponibili | `27` (`50–76`) | `22` (`1–22`) |
543
+ | Ultimo checkpoint disponibile | `epochs/cp_epoch_076.pt` | `epochs/cir_epoch_022.pt` |
544
+ | Epoca di `best.pt` | `76` | `22` |
545
+ | Metrica di selezione (`training.best_metric`) | `val_auc` | `val_fitb_accuracy` |
546
+ | Metrica di validation nel best | `0.93390839` | `0.6723` |
547
+ | Esempi train nell'epoca del best | `33990` | `16960` |
548
+ | Esempi validation nell'epoca del best | `6000` | `3000` |
549
+
550
+ Le metriche di selezione sono da massimizzare. Le 200 epoche e gli optimizer
551
+ step totali descrivono il piano configurato; i file disponibili documentano
552
+ soltanto le epoche indicate in tabella.
553
 
554
  ### Dataset e feature
555
 
556
+ I valori valgono per tutti e quattro i run; ogni run usa il proprio subset.
557
 
558
  | Parametro | Valore registrato |
559
  | --- | --- |
560
  | Dataset (`dataset.name`) | `polyvore` |
561
  | Identificativo dataset (`dataset.id`) | `mvasil/polyvore-outfits` |
562
+ | Subset (`dataset.subset`) | `nondisjoint` / `disjoint` |
563
  | Directory dataset nel training (`dataset.dataset_root`) | `datasets/polyvore-outfits` |
564
  | Cache dataset personalizzata (`dataset.cache_dir`) | `null` |
565
  | Directory embedding nel training (`dataset.embedding_root`) | `precomputed_embeddings/patrickjohncyh-fashion-clip` |
 
569
  | Encoder identificato nei manifest | `patrickjohncyh/fashion-clip` |
570
  | Feature allenabili (`features.trainable`) | `false`: gli encoder non vengono allenati in questi run |
571
 
572
+ Il percorso registrato è quello usato durante il training. Le cache attuali
573
+ si trovano in `precomputed_embeddings/fashionCLIP/<subset>/<split>/`.
574
+ Usa `--embedding-root <download-dir>/precomputed_embeddings/fashionCLIP` con la
575
+ repository scaricata; il loader seleziona il subset e lo split.
576
 
577
  ### Architettura
578
 
 
594
  | Epsilon normalizzazione L2 (`normalization_epsilon`) | `1e-12` | `1e-12` |
595
  | Deviazione standard inizializzazione embedding (`embedding_initialization_std`) | `0.02` | `0.02` |
596
  | Numero massimo di item (`max_items`) | `16` | `16` |
597
+ | LayerNorm finale aggiuntiva, verificata nei pesi | Assente: nessuna chiave `cp.encoder.norm.*` | Assente: nessuna chiave `cir.encoder.norm.*` |
598
  | Dimensione embedding di retrieval (`model.cir.embedding_dim`) | Non applicabile | `128` |
599
  | Normalizzazione L2 degli embedding finali di retrieval (`model.cir.normalize_embeddings`) | Non applicabile | `false` |
600
  | Embedding di categoria (`model.use_category_embedding`) | Non applicabile | `false` |
 
622
  | Early stopping, patience (`training.early_stopping_patience`) | `null`: disabilitato | `null`: disabilitato |
623
  | Miglioramento minimo (`training.early_stopping_min_delta`) | `0.0` | `0.0` |
624
  | Pesi per resume (`training.resume_weights`) | `null` | `null` |
625
+ | Inizializzazione da CP (`training.pretrained_cp_weights`) | Non applicabile | Percorsi per subset riportati sotto |
626
+ | Optimizer step per epoca (`training.optimizer_steps_per_epoch`) | nondisjoint: `53`; disjoint: `17` | nondisjoint: `208`; disjoint: `67` |
627
+ | Optimizer step totali pianificati (`training.total_optimizer_steps`) | nondisjoint: `10600`; disjoint: `3400` | nondisjoint: `41600`; disjoint: `13400` |
628
 
629
  Per CIR il target è un item scelto casualmente a ogni accesso all'outfit. Come
630
  descritto nel README del training, la loss seleziona il negativo più difficile
631
  tra i positivi delle altre righe dello stesso microbatch: l'accumulo fino a 256
632
  esempi non amplia il gruppo di negativi del microbatch da 64.
633
 
634
+ Le configurazioni CIR registrano questi percorsi di inizializzazione da CP:
635
+
636
+ - `nondisjoint`: `checkpoints/nondisjoint/cp_precomputed/best.pt`.
637
+ - `disjoint`: `checkpoints/disjoint/cp_fashionclip/best.pt`.
638
+
639
+ Questi percorsi descrivono il layout del training; aggiornali al checkpoint CP
640
+ locale corrispondente quando riproduci un run.
641
 
642
  ### Scheduler
643
 
644
  Tutti i campi di questa tabella sono salvati in `training.scheduler` e hanno lo
645
+ stesso valore nei quattro run.
646
 
647
  | Parametro | Valore |
648
  | --- | --- |
 
668
  | Backend distribuito (`runtime.distributed_backend`) | Non registrato | `null` |
669
  | Mixed precision (`runtime.mixed_precision`) | Non registrata | `false` |
670
 
671
+ Le tabelle coprono i campi presenti nei quattro `config.json`. Impostazioni
672
  implicite non serializzate, come i beta e l'epsilon di AdamW, e dettagli quali
673
  modello di GPU e versioni software non sono documentati dagli artefatti letti.
674
 
 
688
  Per caricare un checkpoint, usa i loader e i comandi della repository sorgente,
689
  con la configurazione e la versione dell'architettura usate durante il training.
690
  Per ciascun esperimento è utile riportare anche il commit Git del codice usato.
691
+ I quattro checkpoint non contengono una LayerNorm finale aggiuntiva del
692
+ Transformer (`cp.encoder.norm.*` o `cir.encoder.norm.*`). L'inizializzazione
693
+ di CIR da CP è descritta nel
694
  [README CIR](https://github.com/FlorindoDev/OutfitTransformer/blob/main/training/CIR/README.md).
695
 
696
  Il caricamento sul Hub conserva il formato del progetto; non aggiunge
 
708
  gli identificativi `item_ids` e il tensore `embeddings`; il manifest descrive
709
  encoder, dataset, subset, split, dimensioni, precisione, fingerprint e shard.
710
 
711
+ Ogni embedding concatena le rappresentazioni di immagine e testo, normalizzate
712
+ L2 separatamente. FashionCLIP produce 1024 componenti (512 visuali + 512
713
+ testuali); Marqo FashionSigLIP ne produce 1536 (768 + 768). I checkpoint
714
+ pubblicati usano FashionCLIP. Le cache FashionSigLIP richiedono modelli
715
+ configurati per input di dimensione 1536.
716
 
717
  ### Parametri delle cache pubblicate
718
 
719
+ | Parametro | FashionCLIP | Marqo FashionSigLIP |
720
+ | --- | --- | --- |
721
+ | Versione del formato (`schema_version`) | `2` | `2` |
722
+ | Dataset | `mvasil/polyvore-outfits` | `mvasil/polyvore-outfits` |
723
+ | Subset disponibili | `nondisjoint`, `disjoint` | `nondisjoint` |
724
+ | Modello encoder (`encoder.model_name`) | `patrickjohncyh/fashion-clip` | `Marqo/marqo-fashionSigLIP` |
725
+ | Encoder visuale (`encoder.visual_encoder`) | `FashionCLIPVisualEncoder` | `MarqoFashionSigLIPVisualEncoder` |
726
+ | Encoder testuale (`encoder.text_encoder`) | `FashionCLIPTextEncoder` | `MarqoFashionSigLIPTextEncoder` |
727
+ | Dimensione per modalità (`encoder.modality_dim`) | `512` | `768` |
728
+ | Dimensione finale (`embedding_dim`) | `1024` | `1536` |
729
+ | Aggregazione (`encoder.aggregation`) | `concat_visual_then_text` | `concat_visual_then_text` |
730
+ | Normalizzazione (`encoder.normalization`) | `l2_per_modality` | `l2_per_modality` |
731
+ | Precisione salvata (`dtype`) | `float32` | `float32` |
732
+ | Limite al numero di articoli (`limit`) | `null` | `null` |
733
+ | Commit encoder visuale / testuale | `null` / `null` | `c56244cc94f92419e8369fa71efdaf403b124ce8` / `c56244cc94f92419e8369fa71efdaf403b124ce8` |
734
+
735
+ #### fashionCLIP / nondisjoint
736
+
737
+ | Split | Articoli (`count`) | Shard | Manifest |
738
+ | --- | --- | --- | --- |
739
+ | Train | `204679` | `21` | [train/manifest.json](precomputed_embeddings/fashionCLIP/nondisjoint/train/manifest.json) |
740
+ | Validation | `25132` | `3` | [validation/manifest.json](precomputed_embeddings/fashionCLIP/nondisjoint/validation/manifest.json) |
741
+ | Test | `47854` | `5` | [test/manifest.json](precomputed_embeddings/fashionCLIP/nondisjoint/test/manifest.json) |
742
+
743
+ #### fashionCLIP / disjoint
744
+
745
+ | Split | Articoli (`count`) | Shard | Manifest |
746
+ | --- | --- | --- | --- |
747
+ | Train | `71967` | `8` | [train/manifest.json](precomputed_embeddings/fashionCLIP/disjoint/train/manifest.json) |
748
+ | Validation | `14657` | `2` | [validation/manifest.json](precomputed_embeddings/fashionCLIP/disjoint/validation/manifest.json) |
749
+ | Test | `70035` | `8` | [test/manifest.json](precomputed_embeddings/fashionCLIP/disjoint/test/manifest.json) |
750
+
751
+ #### fashionSigLIP / nondisjoint
752
 
753
  | Split | Articoli (`count`) | Shard | Manifest |
754
  | --- | --- | --- | --- |
755
+ | Train | `204679` | `21` | [train/manifest.json](precomputed_embeddings/fashionSigLIP/nondisjoint/train/manifest.json) |
756
+ | Validation | `25132` | `3` | [validation/manifest.json](precomputed_embeddings/fashionSigLIP/nondisjoint/validation/manifest.json) |
757
+ | Test | `47854` | `5` | [test/manifest.json](precomputed_embeddings/fashionSigLIP/nondisjoint/test/manifest.json) |
758
 
759
+ Gli shard contengono al massimo 10000 articoli ciascuno; l’ultimo shard può
760
+ essere più piccolo. I conteggi indicano articoli con embedding.
 
761
 
762
+ I manifest FashionCLIP disjoint e quelli nondisjoint train/validation condividono
763
+ il `model_fingerprint`
764
  `dfcff17f9fb9335b22792d610cb7e4ba8cd73afa2954b725aa5e2d993bc10c27`.
765
+ FashionCLIP nondisjoint test registra invece
766
  `b00590d05bc4af1a3a5316ecb65dabea7315fa93adf0dcbdbec0b8399ec1e788`.
767
+ Le tre cache FashionSigLIP condividono
768
+ `333a9948b0d676879fbac0938f4f8654eae108dbc00cfbf3f59552c051ac8802`.
769
+ Nome encoder e dimensioni uguali non attestano una configurazione identica
770
+ quando i fingerprint differiscono.
771
+
772
+ Usa `--embedding-root <download-dir>/precomputed_embeddings/fashionCLIP` oppure
773
+ `--embedding-root <download-dir>/precomputed_embeddings/fashionSigLIP`, secondo
774
+ il modello. Il loader legge `<embedding-root>/<subset>/<split>/`.
775
+ Usa cache coerenti con checkpoint, dataset, subset e split; train e validation
776
+ devono avere fingerprint corrispondenti. I dati per costruire outfit,
777
+ etichette e query restano quelli richiesti dal progetto.
778
 
779
  ## Riferimenti
780