Upload folder using huggingface_hub
Browse files
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
|
| 30 |
-
**cir_precomputed-flashionclip** (Complementary Item Retrieval)
|
| 31 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 |
-
│
|
|
|
|
|
|
|
|
|
|
| 44 |
│ ├── cp_precomputed-flashionclip/
|
| 45 |
│ └── cir_precomputed-flashionclip/
|
| 46 |
└── precomputed_embeddings/
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 52 |
```
|
| 53 |
|
| 54 |
## Parameters and hyperparameters of the published runs
|
| 55 |
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
| 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 |
-
|
|
|
|
|
|
|
| 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 | `
|
| 72 |
-
| Latest available checkpoint | `epochs/
|
| 73 |
-
| Epoch of `best.pt` | `
|
| 74 |
-
| Selection metric (`training.best_metric`) | `val_auc`
|
| 75 |
-
|
|
| 76 |
| Training examples in the best epoch | `106612` | `53248` |
|
| 77 |
| Validation examples in the best epoch | `10000` | `5000` |
|
| 78 |
|
| 79 |
-
|
| 80 |
-
|
| 81 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 82 |
|
| 83 |
### Dataset and features
|
| 84 |
|
| 85 |
-
The values
|
| 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.
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
|
| 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 |
|
| 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 |
|
| 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
|
| 164 |
-
|
| 165 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 166 |
|
| 167 |
### Scheduler
|
| 168 |
|
| 169 |
All fields in this table are saved under `training.scheduler` and have the same
|
| 170 |
-
values in
|
| 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
|
| 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
|
| 217 |
-
|
| 218 |
-
|
| 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 |
-
|
| 237 |
-
|
| 238 |
-
|
| 239 |
-
|
|
|
|
| 240 |
|
| 241 |
### Parameters of the published caches
|
| 242 |
|
| 243 |
-
| Parameter |
|
| 244 |
-
| --- | --- |
|
| 245 |
-
| Format version (`schema_version`) | `2` |
|
| 246 |
-
| Dataset
|
| 247 |
-
|
|
| 248 |
-
|
|
| 249 |
-
|
|
| 250 |
-
|
|
| 251 |
-
|
|
| 252 |
-
|
|
| 253 |
-
|
|
| 254 |
-
|
|
| 255 |
-
|
|
| 256 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 257 |
|
| 258 |
| Split | Items (`count`) | Shards | Manifest |
|
| 259 |
| --- | --- | --- | --- |
|
| 260 |
-
| Train | `
|
| 261 |
-
| Validation | `
|
| 262 |
-
| Test | `
|
| 263 |
|
| 264 |
-
|
| 265 |
-
train, 5132 for validation, and 7854 for test. These counts refer to items with
|
| 266 |
-
embeddings, not outfits or training examples.
|
| 267 |
|
| 268 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 269 |
`dfcff17f9fb9335b22792d610cb7e4ba8cd73afa2954b725aa5e2d993bc10c27`.
|
| 270 |
-
|
| 271 |
`b00590d05bc4af1a3a5316ecb65dabea7315fa93adf0dcbdbec0b8399ec1e788`.
|
| 272 |
-
|
| 273 |
-
|
| 274 |
-
|
| 275 |
-
|
| 276 |
-
|
| 277 |
-
|
| 278 |
-
|
| 279 |
-
|
| 280 |
-
|
|
|
|
|
|
|
| 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
|
| 305 |
-
**cir_precomputed-flashionclip** (Complementary Item Retrieval)
|
| 306 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 |
-
│
|
|
|
|
|
|
|
|
|
|
| 320 |
│ ├── cp_precomputed-flashionclip/
|
| 321 |
│ └── cir_precomputed-flashionclip/
|
| 322 |
└── precomputed_embeddings/
|
| 323 |
-
|
| 324 |
-
|
| 325 |
-
|
| 326 |
-
|
| 327 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 328 |
```
|
| 329 |
|
| 330 |
## Parametri e iperparametri dei run pubblicati
|
| 331 |
|
| 332 |
-
I valori
|
| 333 |
-
|
| 334 |
-
|
| 335 |
-
|
| 336 |
-
|
| 337 |
-
|
| 338 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 339 |
|
| 340 |
### Checkpoint e avanzamento registrato
|
| 341 |
|
| 342 |
-
|
|
|
|
|
|
|
| 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 | `
|
| 348 |
-
| Ultimo checkpoint disponibile | `epochs/
|
| 349 |
-
| Epoca di `best.pt` | `
|
| 350 |
-
| Metrica di selezione (`training.best_metric`) | `val_auc`
|
| 351 |
-
|
|
| 352 |
| Esempi train nell'epoca del best | `106612` | `53248` |
|
| 353 |
| Esempi validation nell'epoca del best | `10000` | `5000` |
|
| 354 |
|
| 355 |
-
|
| 356 |
-
|
| 357 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 358 |
|
| 359 |
### Dataset e feature
|
| 360 |
|
| 361 |
-
I valori
|
| 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
|
| 378 |
-
|
| 379 |
-
`
|
| 380 |
-
|
| 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 |
|
| 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 |
|
| 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 |
-
|
| 440 |
-
|
| 441 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 442 |
|
| 443 |
### Scheduler
|
| 444 |
|
| 445 |
Tutti i campi di questa tabella sono salvati in `training.scheduler` e hanno lo
|
| 446 |
-
stesso valore nei
|
| 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
|
| 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 |
-
|
| 493 |
-
|
| 494 |
-
|
| 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 |
-
|
| 513 |
-
|
| 514 |
-
|
| 515 |
-
|
|
|
|
| 516 |
|
| 517 |
### Parametri delle cache pubblicate
|
| 518 |
|
| 519 |
-
| Parametro |
|
| 520 |
-
| --- | --- |
|
| 521 |
-
| Versione del formato (`schema_version`) | `2` |
|
| 522 |
-
| Dataset
|
| 523 |
-
|
|
| 524 |
-
|
|
| 525 |
-
| Encoder
|
| 526 |
-
|
|
| 527 |
-
| Dimensione
|
| 528 |
-
|
|
| 529 |
-
|
|
| 530 |
-
|
|
| 531 |
-
|
|
| 532 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 533 |
|
| 534 |
| Split | Articoli (`count`) | Shard | Manifest |
|
| 535 |
| --- | --- | --- | --- |
|
| 536 |
-
| Train | `204679` | `21` | [train/manifest.json](precomputed_embeddings/nondisjoint/
|
| 537 |
-
| Validation | `25132` | `3` | [validation/manifest.json](precomputed_embeddings/nondisjoint/
|
| 538 |
-
| Test | `47854` | `5` | [test/manifest.json](precomputed_embeddings/nondisjoint/
|
| 539 |
|
| 540 |
-
Gli shard contengono 10000 articoli ciascuno
|
| 541 |
-
|
| 542 |
-
non outfit o esempi di training.
|
| 543 |
|
| 544 |
-
|
|
|
|
| 545 |
`dfcff17f9fb9335b22792d610cb7e4ba8cd73afa2954b725aa5e2d993bc10c27`.
|
| 546 |
-
|
| 547 |
`b00590d05bc4af1a3a5316ecb65dabea7315fa93adf0dcbdbec0b8399ec1e788`.
|
| 548 |
-
|
| 549 |
-
|
| 550 |
-
|
| 551 |
-
|
| 552 |
-
|
| 553 |
-
|
| 554 |
-
|
| 555 |
-
|
| 556 |
-
|
|
|
|
|
|
|
| 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 |
|