Este repositorio está diseñado para evaluar Marqo-FashionCLIP y Marqo-FashionSigLIP en siete conjuntos de datos de referencia públicos. Lea más sobre los modelos en nuestro blog.
Promediamos el rendimiento de tres tareas comunes en los conjuntos de datos: texto a imagen, categoría a producto y subcategoría a producto. Como se demuestra a continuación, Marqo-FashionCLIP y Marqo-FashionSigLIP superan tanto a los modelos OpenCLIP previamente entrenados como a los modelos CLIP de moda de última generación. Para obtener una comparación de rendimiento más completa, consulte la TABLA DE LÍDERES.
Texto a imagen (promediado en 6 conjuntos de datos)
Modelo | Recordatorio promedio | Recordar@1 | Recordar@10 | MRR |
---|---|---|---|---|
Marqo-FashionSigLIP | 0.231 | 0.121 | 0.340 | 0,239 |
Marqo-ModaCLIP | 0,192 | 0.094 | 0.290 | 0.200 |
ModaCLIP2.0 | 0.163 | 0,077 | 0.249 | 0.165 |
AbrirModaCLIP | 0,132 | 0.060 | 0.204 | 0,135 |
ViT-B-16-laion2b_s34b_b88k | 0,174 | 0,088 | 0.261 | 0.180 |
ViT-B-16-SigLIP-webli | 0.212 | 0.111 | 0.314 | 0.214 |
Categoría a producto (promedio de 5 conjuntos de datos)
Modelo | promedio | P@1 | P@10 | MRR |
---|---|---|---|---|
Marqo-FashionSigLIP | 0,737 | 0,758 | 0,716 | 0.812 |
Marqo-ModaCLIP | 0.705 | 0.734 | 0,676 | 0,776 |
ModaCLIP2.0 | 0,684 | 0,681 | 0,686 | 0,741 |
AbrirModaCLIP | 0,646 | 0,653 | 0,639 | 0.720 |
ViT-B-16-laion2b_s34b_b88k | 0,662 | 0,673 | 0,652 | 0.743 |
ViT-B-16-SigLIP-webli | 0,688 | 0.690 | 0,685 | 0,751 |
Subcategoría a producto (promediado en 4 conjuntos de datos)
Modelo | promedio | P@1 | P@10 | MRR |
---|---|---|---|---|
Marqo-FashionSigLIP | 0,725 | 0,767 | 0,683 | 0.811 |
Marqo-ModaCLIP | 0.707 | 0,747 | 0,667 | 0,772 |
ModaCLIP2.0 | 0,657 | 0,676 | 0,638 | 0,733 |
AbrirModaCLIP | 0,598 | 0,619 | 0,578 | 0,689 |
ViT-B-16-laion2b_s34b_b88k | 0,638 | 0,651 | 0,624 | 0.712 |
ViT-B-16-SigLIP-webli | 0,643 | 0,643 | 0,643 | 0,726 |
Lanzamos nuestros modelos en HuggingFace: Marqo-FashionCLIP y Marqo-FashionSigLIP. También tenemos una demostración de Hugging Face Space de nuestros modelos en acción: Clasificación con Marqo-FashionSigLIP.
Puedes cargar los modelos con transformers
mediante
from transformers import AutoModel , AutoProcessor
model = AutoModel . from_pretrained ( 'Marqo/marqo-fashionCLIP' , trust_remote_code = True )
processor = AutoProcessor . from_pretrained ( 'Marqo/marqo-fashionCLIP' , trust_remote_code = True )
y
from transformers import AutoModel , AutoProcessor
model = AutoModel . from_pretrained ( 'Marqo/marqo-fashionSigLIP' , trust_remote_code = True )
processor = AutoProcessor . from_pretrained ( 'Marqo/marqo-fashionSigLIP' , trust_remote_code = True )
Entonces,
import torch
from PIL import Image
image = [ Image . open ( "docs/fashion-hippo.png" )]
text = [ "a hat" , "a t-shirt" , "shoes" ]
processed = processor ( text = text , images = image , padding = 'max_length' , return_tensors = "pt" )
with torch . no_grad ():
image_features = model . get_image_features ( processed [ 'pixel_values' ], normalize = True )
text_features = model . get_text_features ( processed [ 'input_ids' ], normalize = True )
text_probs = ( 100.0 * image_features @ text_features . T ). softmax ( dim = - 1 )
print ( "Label probs:" , text_probs )
Publicamos este artículo que ilustra una búsqueda simple de comercio electrónico con un conjunto de datos de moda si desea ver el modelo en acción.
Puedes cargar los modelos con open_clip
haciendo
import open_clip
model , preprocess_train , preprocess_val = open_clip . create_model_and_transforms ( 'hf-hub:Marqo/marqo-fashionCLIP' )
tokenizer = open_clip . get_tokenizer ( 'hf-hub:Marqo/marqo-fashionCLIP' )
y
import open_clip
model , preprocess_train , preprocess_val = open_clip . create_model_and_transforms ( 'hf-hub:Marqo/marqo-fashionSigLIP' )
tokenizer = open_clip . get_tokenizer ( 'hf-hub:Marqo/marqo-fashionSigLIP' )
Entonces,
import torch
from PIL import Image
image = preprocess_val ( Image . open ( "docs/fashion-hippo.png" )). unsqueeze ( 0 )
text = tokenizer ([ "a hat" , "a t-shirt" , "shoes" ])
with torch . no_grad (), torch . cuda . amp . autocast ():
image_features = model . encode_image ( image , normalize = True )
text_features = model . encode_text ( text , normalize = True )
text_probs = ( 100.0 * image_features @ text_features . T ). softmax ( dim = - 1 )
print ( "Label probs:" , text_probs )
Para implementar en Marqo Cloud (recomendado):
Regístrate en Marqo Cloud.
Instale Marqo y el cliente Python de Marqo:
pip install marqo
import marqo
settings = {
"type" : "unstructured" ,
"model" : "marqo-fashion-clip" , # model name
"modelProperties" : {
"name" : "ViT-B-16" , # model architecture
"dimensions" : 512 , # embedding dimensions
"url" : "https://marqo-gcl-public.s3.us-west-2.amazonaws.com/marqo-fashionCLIP/marqo_fashionCLIP.pt" , # model weights
"type" : "open_clip" # loading library
},
}
api_key = "your_api_key" # replace with your api key (https://www.marqo.ai/blog/finding-my-marqo-api-key)
mq = marqo . Client ( "https://api.marqo.ai" , api_key = api_key )
mq . create_index ( "fashion-index" , settings_dict = settings )
# triggers model download
mq . index ( "fashion-index" ). search ( "black dress" )
Consulte la documentación completa para obtener más detalles sobre cómo agregar documentos y buscar.
Instale PyTorch primero y ejecútelo
pip install -r requirements.txt
Para evaluar Marqo-FashionCLIP, ejecute este comando
python eval.py
--dataset-config ./configs/ ${DATASET} .json
--model-name Marqo/marqo-fashionCLIP
--run-name Marqo-FashionCLIP
DATASET
puede ser uno de ['deepfashion_inshop', 'deepfashion_multimodal', 'fashion200k', 'KAGL', 'atlas', 'polyvore' 'iMaterialist']Para evaluar Marqo-FashionSigLIP, ejecute este comando
python eval.py
--dataset-config ./configs/ ${DATASET} .json
--model-name Marqo/marqo-fashionSigLIP
--run-name Marqo-FashionSigLIP
DATASET
puede ser uno de ['deepfashion_inshop', 'deepfashion_multimodal', 'fashion200k', 'KAGL', 'atlas', 'polyvore' 'iMaterialist']Los scripts para evaluar otros modelos, incluidos FashionCLIP 2.0 y OpenFashionCLIP, se pueden encontrar en el directorio de scripts.
Recopilamos 7 conjuntos de datos públicos de moda multimodal y los subimos a HuggingFace: Atlas, DeepFashion (In-shop), DeepFashion (Multimodal), Fashion200k, iMaterialist, KAGL y Polyvore. Cada conjunto de datos tiene diferentes metadatos disponibles. Por lo tanto, las tareas para cada conjunto de datos se almacenan como archivos json en el directorio de scripts. Consulte nuestro blog para obtener más información sobre cada conjunto de datos.
Para renovar LEADERBOARD.md y resumir los resultados de diferentes modelos localmente, ejecute este comando
python summarize_results.py
@software{Jung_Marqo-FashionCLIP_and_Marqo-FashionSigLIP_2024,
author = {Jung, Myong Chol and Clark, Jesse},
month = aug,
title = {{Marqo-FashionCLIP and Marqo-FashionSigLIP}},
url = {https://github.com/marqo-ai/marqo-FashionCLIP},
version = {1.0.0},
year = {2024}
}