FashionCLIP
快速开始
更新(2023年3月10日):我们更新了模型!我们发现 laion/CLIP-ViT-B-32-laion2B-s34B-b79K 检查点(感谢 Bin!)在时尚领域的表现优于原始的 OpenAI CLIP。因此,我们微调了一个更新(且更好!)的 FashionCLIP 版本(以下简称 FashionCLIP 2.0),同时保持架构不变。我们推测 laion/CLIP-ViT-B-32-laion2B-s34B-b79K
带来的性能提升是由于增加了训练数据(是 OpenAI CLIP 数据的5倍)。然而,我们的论文结论保持不变——在我们的时尚数据集上微调 laion/CLIP
改善了我们基准测试中的零样本性能。请参见下表,比较各模型的加权宏观 F1 分数。
模型 | FMNIST | KAGL | DEEP |
---|---|---|---|
OpenAI CLIP | 0.66 | 0.63 | 0.45 |
FashionCLIP | 0.74 | 0.67 | 0.48 |
Laion CLIP | 0.78 | 0.71 | 0.58 |
FashionCLIP 2.0 | 0.83 | 0.73 | 0.62 |
我们现已登陆 Hugging Face!模型可在此处获取。
我们现已发表在 Nature Scientific Reports!
引用
@Article{Chia2022,
title="Contrastive language and vision learning of general fashion concepts",
author="Chia, Patrick John
and Attanasio, Giuseppe
and Bianchi, Federico
and Terragni, Silvia
and Magalh{\~a}es, Ana Rita
and Goncalves, Diogo
and Greco, Ciro
and Tagliabue, Jacopo",
journal="Scientific Reports",
year="2022",
month="Nov",
day="08",
volume="12",
number="1",
pages="18958",
abstract="The steady rise of online shopping goes hand in hand with the development of increasingly complex ML and NLP models. While most use cases are cast as specialized supervised learning problems, we argue that practitioners would greatly benefit from general and transferable representations of products. In this work, we build on recent developments in contrastive learning to train FashionCLIP, a CLIP-like model adapted for the fashion industry. We demonstrate the effectiveness of the representations learned by FashionCLIP with extensive tests across a variety of tasks, datasets and generalization probes. We argue that adaptations of large pre-trained models such as CLIP offer new perspectives in terms of scalability and sustainability for certain types of players in the industry. Finally, we detail the costs and environmental impact of training, and release the model weights and code as open source contribution to the community.",
issn="2045-2322",
doi="10.1038/s41598-022-23052-9",
url="https://doi.org/10.1038/s41598-022-23052-9"
}
信息
我们正在等待 Farfetch 数据集的官方发布,届时微调后的模型权重、预处理的图像和文本向量将公开。与此同时,我们目前使用 Hugging Face 实现的 CLIP
,并可以使用来自 OpenAI 的模型权重,遵循标准的 Hugging Face 命名约定(即 fclip = FashionCLIP('<username>/<repo_name>', ... )
)。我们还支持私有仓库(即 fclip = FashionCLIP('<username>/<repo_name>', auth_token=<AUTH_TOKEN>, ... )
)。
详情请参见下文!
概述
FashionCLIP
是一个为时尚行业微调的类 CLIP 模型。我们在 Farfetch 数据集1的超过 70 万对<图像, 文本>对上微调了 CLIP
(Radford et al., 2021)。
我们通过将 FashionCLIP 应用于行业中的开放问题(如检索、分类和时尚解析)来评估其性能。我们的结果表明,微调有助于捕捉特定领域的概念,并在零样本场景中泛化这些概念。我们还补充了定量测试和定性分析,并对视觉空间中的概念如何解锁语言泛化提供了初步见解。更多详情请参阅我们的论文。
在这个仓库中,你会找到一个用于与 FashionCLIP
交互的 API 和一个使用 streamlit 构建的交互式演示(即将推出!),展示了 FashionCLIP
的功能。
API 和演示
快速使用指南
需要快速生成嵌入向量?想要测试检索性能?
首先,你应该能够使用 pip 快速安装。
$ pip install fashion-clip
如果你有文本列表和图像路径,生成嵌入向量非常简单:
from fashion_clip.fashion_clip import FashionCLIP
fclip = FashionCLIP('fashion-clip')
# 我们创建图像嵌入和文本嵌入
image_embeddings = fclip.encode_images(images, batch_size=32)
text_embeddings = fclip.encode_text(texts, batch_size=32)
# 我们将嵌入向量归一化为单位范数(这样我们可以使用点积而不是余弦相似度进行比较)
image_embeddings = image_embeddings/np.linalg.norm(image_embeddings, ord=2, axis=-1, keepdims=True)
text_embeddings = text_embeddings/np.linalg.norm(text_embeddings, ord=2, axis=-1, keepdims=True)
使用我们的 colab 笔记本查看更多功能。
Hugging Face API
from PIL import Image
import requests
from transformers import CLIPProcessor, CLIPModel
model = CLIPModel.from_pretrained("patrickjohncyh/fashion-clip")
processor = CLIPProcessor.from_pretrained("patrickjohncyh/fashion-clip")
image = Image.open("images/image1.jpg")
inputs = processor(text=["a photo of a red shoe", "a photo of a black shoe"],
images=image, return_tensors="pt", padding=True)
outputs = model(**inputs)
logits_per_image = outputs.logits_per_image # 这是图像-文本相似度分数
probs = logits_per_image.softmax(dim=1)
print(probs)
image.resize((224, 224))
额外的内部 FashionCLIP API
安装
从项目根目录,本地安装 fashion-clip
包:
$ pip install -e .
有两个主要的抽象概念可以方便地使用 FashionCLIP
。
首先是 FCLIPDataset
类,它封装了与给定目录相关的信息,并公开了 FashionCLIP
的关键信息。此外,它还提供了快速探索和可视化数据的辅助函数。主要的初始化参数如下:
name: str -> 数据集名称
image_source_path: str -> 图像的绝对路径(可以是本地或 s3)
image_source_type: str -> 源类型(即本地或 s3)
catalog: List[dict] = None -> 字典列表,至少包含 ['id', 'image', 'caption'] 键
为了便于使用,API 还提供了访问论文中用于训练 FashionCLIP
的数据集(一旦正式发布)的方法,只需指定相应的目录名称即可。
预包含的数据集
from fashion_clip import FCLIPDataset
dataset = FCLIPDataset(name='FF',
image_source_path='path/to/images',
image_source_type='local')
自定义数据集
from fashion_clip import FCLIPDataset
my_catalog = [{'id': 1, 'image': 'x.jpg', 'caption': 'image x'}]
dataset = FCLIPDataset(name='my_dataset',
image_source_path='path/to/images',
image_source_type='local',
catalog=my_catalog)
第二个抽象是 FashionCLIP
类,它接受一个 Hugging Face CLIP 模型名称和一个 FCLIPDataset
,并提供方便的函数来执行多模态检索、零样本分类和定位等任务。FashionCLIP
的初始化参数如下:
model_name: str -> 模型名称或本地模型路径
dataset: FCLIPDataset -> 数据集
normalize: bool -> 是否将嵌入向量转换为单位范数的选项
approx: bool -> 是否使用近似最近邻的选项
与 FCLIPDataset
抽象类似,我们包含了一个来自论文的预训练 FashionCLIP
模型,托管在这里。如果收到未知的数据集和模型组合,图像和标题向量将在对象实例化时生成,否则将从 S3 拉取预计算的向量/嵌入。
from fashion_clip import FCLIPDataset, FashionCLIP
dataset = FCLIPDataset(name='FF',
image_source_path='path/to/images',
image_source_type='local')
fclip = FashionCLIP('fashion-clip', ff_dataset)
有关如何使用该包的更多详细信息,请参阅随附的笔记本!
有趣的相关项目!
- 查看 RustEmbed,了解如何使用 gRPC 创建 FashionCLIP 嵌入的应用。
Footnotes
-
等待官方发布。 ↩