Project Icon

MetaCLIP

CLIP模型数据处理优化工具

MetaCLIP是一个改进CLIP模型数据处理的开源项目。它提出了一种新的数据筛选算法,无需依赖现有模型即可从头整理数据。该项目强调数据质量,提供了可扩展到CommonCrawl全数据集的方法。MetaCLIP公开训练数据分布,提高了透明度,并为CLIP模型提供标准化的实验设置,便于控制实验和公平比较。

解密CLIP数据

Hugging Face Spaces Open In Colab

本仓库包含了MetaCLIP的代码,该方法在论文《解密CLIP数据》中被描述,将CLIP数据整理过程形式化为一个简单的算法。主要贡献包括:

  • 从头开始整理数据,无需通过先前模型进行筛选(与现有的开源努力不同,后者使用原始CLIP模型作为教师来筛选学生数据)。
  • 使训练数据更加透明,我们发布了我们的训练数据分布元数据
  • 在数据管道中运行的可扩展算法,允许将数据池扩展到整个CommonCrawl (CC),包含3000多亿图像-文本对。我们观察到数据质量比数量更加重要(与现有的开源努力ALIGN主要扩展数量不同);
  • 标准CLIP训练设置用于受控实验和在固定训练和模型配置下进行公平比较。

我们得出以下结论:

  • 有效的预训练数据应该最大限度地保留信号并减轻噪声,而不是通过黑盒过滤器硬性去除噪声,后者会导致未知的分布
  • 我们的算法更简单,可扩展到整个互联网的数据整理
  • 开源不仅仅是提供训练好的模型检查点,更重要的是预训练数据分布

MetaCLIP使用经过人脸模糊处理的图像进行训练。

@inproceedings{xu2023metaclip,
   title={Demystifying CLIP Data},
   author={Hu Xu, Saining Xie, Xiaoqing Ellen Tan, Po-Yao Huang, Russell Howes, Vasu Sharma, Shang-Wen Li, Gargi Ghosh, Luke Zettlemoyer and Christoph Feichtenhofer},
   journal={arXiv preprint arXiv:2309.16671},
   year={2023}
}

更新

快速链接

快速开始

预训练的MetaCLIP模型可在以下位置获取:

[Huggingface](https://huggingface.co/models?other=metaclip)
from PIL import Image
from transformers import AutoProcessor, AutoModel

processor = AutoProcessor.from_pretrained("facebook/metaclip-b32-400m")
model = AutoModel.from_pretrained("facebook/metaclip-b32-400m")

image = Image.open("docs/CLIP.png")
inputs = processor(text=["一张图表", "一只狗", "一只猫"], images=image, return_tensors="pt", padding=True)

with torch.no_grad():
  outputs = model(**inputs)
  logits_per_image = outputs.logits_per_image  # 这是图像-文本相似度得分
  text_probs = logits_per_image.softmax(dim=-1)
print("标签概率:", text_probs)
[OpenCLIP](https://github.com/mlfoundations/open_clip)(或本仓库)
import torch
from PIL import Image
import open_clip

model, _, preprocess = open_clip.create_model_and_transforms('ViT-B-32-quickgelu', pretrained='metaclip_400m')  # 对于2.5B模型,在OpenCLIP中使用'metaclip_fullcc',或在本仓库中使用'metaclip_2_5b'

image = preprocess(Image.open("docs/CLIP.png")).unsqueeze(0)
text = open_clip.tokenize(["一张图表", "一只狗", "一只猫"])

with torch.no_grad():
    image_features = model.encode_image(image)
    text_features = model.encode_text(text)
    image_features /= image_features.norm(dim=-1, keepdim=True)
    text_features /= text_features.norm(dim=-1, keepdim=True)

    text_probs = (100.0 * image_features @ text_features.T).softmax(dim=-1)

print("标签概率:", text_probs)

预训练模型

所有MetaCLIP模型都遵循OpenAI CLIP的训练设置:我们希望在"CLIP时代的ImageNet"中恢复受控实验。具体来说,我们对所有模型配置使用OpenAI CLIP的quickgelu激活函数(这在较早版本的OpenCLIP中缺失,主要使用nn.GELU代替)。我们在本仓库中添加了ViT-B-16-quickgeluViT-L-14-quickgeluViT-H-14-quickgeluViT-bigG-14-quickgelu

模型名称预训练数据卡已见图像-文本对数量分辨率GPU数量IN零样本准确率
ViT-B-32-quickgelumetaclip_400m数据卡128亿22464 x V10065.5
ViT-B-16-quickgelumetaclip_400m数据卡128亿22464 x V10070.8
ViT-L-14-quickgelumetaclip_400m数据卡128亿224128 x V10076.2
ViT-B-32-quickgelumetaclip_2_5b数据卡128亿22464 x V10067.6
ViT-B-16-quickgelumetaclip_2_5b数据卡128亿22464 x V10072.1
ViT-L-14-quickgelumetaclip_2_5b数据卡128亿224128 x V10079.2
ViT-H-14-quickgelumetaclip_2_5b数据卡128亿224256 x A10080.5
ViT-bigG-14-quickgelumetaclip_2_5b数据卡128亿224256 x A10082.1

开发

此代码是基于 OpenCLIP 定制的,将单独维护用于 MetaCLIP 的研究。以下命令应安装 OpenCLIP 的requirements和本仓库使用的 submitit=1.2.1

conda create -n metaclip python=3.10 pytorch torchvision pytorch-cuda=11.7 tqdm ftfy braceexpand regex pandas submitit=1.2.1 \
    -c pytorch-nightly \
    -c nvidia \
    -c conda-forge \
    -c anaconda

元数据

MetaCLIP 使用 500,000 个查询作为元数据,将训练数据与维基百科/WordNet 术语的高质量写作分布对齐。这些元数据还允许我们将已发布模型的训练数据分布作为数据卡发布。

如何进行数据整理?

我们有一个演示笔记本来展示提出的算法如何工作。

我已经有一个(头部分布的)数据集

CLIP 整理仍然可以作为在线平衡帮助(论文中的表 6)。我们将 CLIP 整理包装在两个关键函数中:子串匹配(建议离线运行)和平衡(可离线或在线,请查看 metaclip.balancing:main)。

import json
import numpy as np
from metaclip.substr_matching import substr_matching
from metaclip.balancing import balance_sampling

with open("metadata.json") as f:
  metadata = json.load(f)
# 我们的 1.6B(池) -> 400M(整理)的条目计数;请检查 balance_sampling:main 并在您自己的数据上进行子串匹配和计数。
with open("metaclip/entry_counts_400m.json") as f:
  entry_count_json = json.load(f)
entry_count = np.array([entry_count_json[entry] for entry in metadata], dtype=np.uint64)  # 使用 uint64 以确保安全缩放。

t = 20000
entry_count[entry_count < t] = t
entry_prob = t / entry_count

for text in ["jacksons chameleon", "battery plate"]:
  matched_entry_ids = substr_matching(text, metadata)  # 这是为了演示目的重新进行子串匹配;请参阅 metaclip/README.md。
  curation_prob = min(entry_prob[matched_entry_ids].sum(), 1.0)
  curated = balance_sampling(matched_entry_ids, entry_prob)
  print(f"[curation_prob={curation_prob:.3f}, curated={curated}] {text}")

我想从头开始整理数据

我们发布了一个用于从 CommonCrawl WAT 或 WARC 进行子串匹配平衡的骨架代码。详情请查看这里

Numpy 实现

算法的 Numpy 实现可以在 metaclip.pipeline 中找到,接近论文中使用的实现。

训练

python submitit_openclip.py b32_400m

请在 run_configs_400m.py 中配置相应的 training_data

构建您自己的元数据

考虑从我们用于构建 CLIP 的 500k 元数据的代码开始。

错误或问题?

如果您有任何与代码或论文相关的问题,请随时发邮件给 Hu Xu(huxu@meta.com)。

引用

如果 MetaCLIP 对您的工作有帮助,请引用我们的论文(被 ICLR2024 接受为聚光报告):

@inproceedings{xu2023metaclip,
   title={Demystifying CLIP Data},
   author={Hu Xu, Saining Xie, Xiaoqing Ellen Tan, Po-Yao Huang, Russell Howes, Vasu Sharma, Shang-Wen Li, Gargi Ghosh, Luke Zettlemoyer and Christoph Feichtenhofer},
   journal={arXiv preprint arXiv:2309.16671},
   year={2023}
}

参考

训练代码基于 OpenCLIP 开发,修改为原始 CLIP 训练设置。

待办事项

  • v0.1 代码发布;
  • 重构 openclip 为 v0.2;
  • pip 安装;
  • (欢迎您的用例或建议以定期更新此代码库)

许可证

MetaCLIP 的大部分内容均根据 CC-BY-NC 许可,但项目的某些部分可根据单独的许可条款使用:open_clip 根据 https://github.com/mlfoundations/open_clip 许可证授权。

致谢

我们衷心感谢 OpenCLIP 团队提供初始 CLIP 代码库和集成,以及 NielsRogge 将其集成到 Huggingface 中。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号