datacomp

datacomp

多模态预训练数据集构建的创新竞赛

DataComp是一项聚焦于多模态预训练数据集设计的竞赛。参赛者需从海量未筛选的图像-文本对中构建高质量数据集,以提升CLIP模型在下游任务的表现。竞赛设有两个赛道和四个规模,适应不同计算资源需求。项目提供完整工具包,涵盖数据获取、模型训练和评估等环节,支持参与者进行数据集创新。

DataCompCLIP模型数据集图像文本对机器学习Github开源项目

DataComp

[ 论文 ] [ 网站 ] [ 博客 ]

欢迎参加我们的比赛。本仓库包含参赛者所需的工具,用于从我们的数据池下载数据、训练CLIP模型、在下游任务上评估模型并提交到我们的排行榜。

概述

DataComp是一个关于设计数据集以预训练CLIP模型的比赛。 与传统基准测试中迭代模型设计和超参数调优不同,在DataComp中,你的任务是策划一个多模态预训练数据集,其中包含能在下游任务中产生高准确率的图像-文本对。 模型架构和超参数是固定的,让参赛者可以专注于创新数据集设计。 作为基准的一部分,我们提供了一个大型未经策划的图像-文本对集合,这些数据是从公共互联网上爬取的。

我们的基准提供两个赛道:一个要求参赛者只使用我们提供的数据池中的样本("筛选"),另一个允许参赛者使用外部数据,包括我们池中的样本(自带数据,"BYOD")。

DataComp的结构适应不同计算资源水平的参赛者:每个赛道分为四个规模,对计算需求有不同要求。

下面是我们基准测试和参赛者工作流程的概览。更多信息请查看我们的论文网站

<p align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/7e9101b0-b1e0-47f6-a951-f33e68086074.png" alt="参赛者工作流程" width="100%"/> </p>

安装依赖

运行:

bash create_env.sh

激活环境:

conda activate datacomp

如果使用云存储服务(如AWS S3),你需要安装额外的依赖(例如 pip install 'cloudpathlib[s3]')。

下载CommonPool

要下载,请运行以下命令,将 $scale 替换为比赛规模(即 smallmediumlargexlarge),将 $data_dir 替换为你希望存储数据的输出目录。

python download_upstream.py --scale $scale --data_dir $data_dir

我们的比赛有四个规模:

  • small:12.8M池大小,12.8M样本数
  • medium:128M池大小,128M样本数
  • large:1.28B池大小,1.28B样本数
  • xlarge:12.8B池大小,12.8B样本数

该脚本将在 $data_dir 内创建两个目录:metadatashards

除了图像和说明文字外,该脚本还将下载元数据,包括包含图像URL、说明文字和其他可能有用信息的 .parquet 文件,如经过训练的OpenAI CLIP模型给出的图像和说明文字之间的相似度。 如果使用 --download_npz 标志,脚本还将下载 .npz 文件,其中包含经过训练的OpenAI CLIP模型为每个样本提取的特征。

我们使用 img2dataset 下载图像数据,将其存储为 .tar 分片,包含图像和说明文字,以供 webdataset 使用。 下载完成后,数据将在 $data_dir/shards 中可用。

要仅下载元数据,请使用 --skip_shards 标志。

每个规模的磁盘需求如下所示。

元数据 (parquets)元数据 (npzs)数据 (tars)
small 规模3 GB75GB450 GB
medium 规模30 GB750GB4.5 TB
large 规模300 GB7.5TB45 TB
xlarge 规模3 TB75TB450 TB

下载DataComp-1B

download_upstream.py 脚本可用于下载我们发布的 DataComp-1B 数据集,这是我们从 xlarge 池中筛选出的表现最佳的子集。要下载它,请使用以下命令:

python download_upstream.py --scale datacomp_1b --data_dir $data_dir

上述命令将在 $data_dir 下创建相同的目录结构,并可以按上述方式修改。

下载外部数据

download_upstream.py 脚本也可以用于下载其他图像-文本数据集,使用 img2dataset。 给定包含图像URL和说明文字的parquet文件,你可以使用此脚本下载图像,通过使用 --metadata_dir 标志指向存储parquet文件的目录。 默认情况下,我们还会下载与我们提供的池对应的parquet文件,这些元数据存储在 $data_dir 的子文件夹中。

优化下载

使用img2dataset时,有几种方法可以优化下载过程,例如在分布式环境中使用多个节点或设置DNS解析器以提高图像下载成功率。有关如何优化下载过程的进一步说明,以及下载过程中可能出现的问题的信息,请参见 img2dataset仓库

在筛选赛道中选择样本

在训练之前,你需要选择你想使用的样本子集。给定一组选定的样本,我们会创建只包含这些样本的新分片,然后训练代码会使用这些分片。对于每个规模,模型都会训练固定数量的步骤,无论选择的提供池的子集大小如何。

我们池中的每个样本都有一个唯一标识符,它存在于元数据parquet文件中,以及 .tar 分片内的 json 文件中。

描述样本子集的格式应该是一个 dtype 为 numpy.dtype("u8,u8") 的 numpy 数组(即一个由无符号64位整数对组成的结构化数组),形状为 (subset_size,),包含按字典序排序uid 列表(来自parquet文件的128位哈希值),以 npy 格式内存映射格式保存到磁盘。

例如,如果你有一个uid列表 uids = ['139e4a9b22a614771f06c700a8ebe150', '6e356964a967af455c8016b75d691203'],你可以通过运行以下Python代码来存储它们:

processed_uids = np.array([(int(uid[:16], 16), int(uid[16:32], 16)) for uid in uids], np.dtype("u8,u8"))
processed_uids.sort()
np.save(out_filename, processed_uids)

创建子集后,你可以调用重新分片器在 $output_dir 中构建子集分片,如下所示:

python resharder.py -i $download_dir -o $output_dir -s $subset_file

如果需要,重新分片器可以在多个节点上并行运行。最简单的方法是将输入目录分割成包含较少分片的较小子文件夹,并为每个子文件夹运行单独的重新分片器作业,每个作业都有单独的输出目录。

基线

这里我们提供了论文表3中主要筛选基线的命令行,以及简短描述。每个基线都读取 .parquet 元数据文件(在需要时也读取 .npz 文件),选择一个 uid 子集,对它们进行排序,并将它们保存到一个 .npy 子集文件中。然后可以将此文件输入到上述重新分片器中,以创建仅包含所选池子集的webdataset。

注意--num_workers 标志控制读入内存并并行处理的元数据文件数量。默认设置为核心数量,但对于核心数量多而内存有限的机器来说,这可能太多了。对于除图像筛选之外的基线,每个工作进程至少需要256MB的内存。

无筛选

这里我们加载所有元数据 uid,不进行任何额外筛选。

python baselines.py --metadata_dir path/to/metadata --save_path path/to/no_filter.npy --name no_filter

基本筛选

对说明文字长度、检测到的说明文字语言是否为英语、图像大小和图像纵横比进行简单检查。

python baselines.py --metadata_dir path/to/metadata --save_path path/to/basic_filter.npy --name basic_filter

CLIP分数筛选

保留L/14 CLIP分数最高的前k=0.3比例的池。

python baselines.py --metadata_dir path/to/metadata --save_path path/to/clip_score_l14_30_percent.npy --name clip_score --arch l14 --fraction 0.3

保留B/32 CLIP分数高于0.25的所有样本。

python baselines.py --metadata_dir path/to/metadata --save_path path/to/clip_score_b32_25_threshold.npy --name clip_score --arch b32 --threshold 0.25

LAION-2B筛选

复制用于创建LAION-2B数据集的筛选策略:对图像-文本对应用B/32 CLIP分数筛选,保留分数高于0.28的样本,并使用gcld3模型进行英语筛选以检测语言。

python baselines.py --metadata_dir path/to/metadata --save_path path/to/laion.npy --name laion2b

基于文本的筛选

一个文本筛选器,筛选包含ImageNet-21k同义词集中词语的说明文字。

python baselines.py --metadata_dir path/to/metadata --save_path path/to/text_based.npy --name text_based

基于图像的筛选

一种基于图像聚类的方法,保留图像内容接近ImageNet-1k训练图像的样本,通过图像的L/14 CLIP嵌入的最近邻聚类中心来衡量。

注意:这个基线使用GPU资源。默认情况下,它会尝试使用所有GPU。要控制使用哪些GPU,请设置 CUDA_VISIBLE_DEVICES 环境变量。

python baselines.py --metadata_dir path/to/metadata --save_path path/to/image_based.npy --name image_based --image_based_scale small --batch_size 512

注意:这个基线需要预先计算的图像聚类中心,第一次运行时会自动下载。 如果你想自己生成中心点,请参阅 baselines/image_based_clustering.md 获取说明。

基于图像和CLIP分数筛选的交集

同时应用 CLIP分数(L/14)取前0.3比例 筛选和 基于图像 筛选。这是我们在 mediumlargexlarge 规模上表现最佳的基线。我们在 xlarge 规模上使用这种策略创建了 DataComp-1B 数据集。

注意:这个基线使用GPU资源。默认情况下,它会尝试使用所有GPU。要控制使用哪些GPU,请设置 CUDA_VISIBLE_DEVICES 环境变量。

python baselines.py --metadata_dir path/to/metadata --save_path path/to/image_based_intersect_clip_score_l14_30_percent.npy --name image_based_intersect_clip_score --image_based_scale small --batch_size 512 --arch l14 --fraction 0.3

训练

要进行训练,请运行以下命令:

torchrun --nproc_per_node $num_gpus train.py --scale $scale --data_dir $data_dir --output_dir $output_dir --exp_name $exp_name

我们支持使用多个不同的数据目录。例如,如果你的数据在 /path/to/dir/1/path/to/dir/2,你可以使用标志 --data_dir=/path/to/dir/1::/path/to/dir/2

tools/slurm_train.sh 中提供了一个使用SLURM进行训练的示例脚本。

超参数

用于训练的超参数对于给定规模是固定的。对于 smallmedium 规模,我们使用ViT-B/32模型,对于 large 规模,使用Vi

关于运行差异的说明

我们观察到,在更改随机种子时,性能存在小幅(但非零)差异,通常在ImageNet上的准确率差异范围为0.2个百分点,平均差异最高可达0.006。 我们还注意到,即使设置相同的随机种子,某些因素也可能导致运行结果不确定(例如,在流式传输数据时随机网络故障可能导致重新运行时形成不同的批次,另见 https://pytorch.org/docs/stable/notes/randomness.html)。

评估

[可选] 预先下载评估数据集

如果您有稳定的网络连接,预先下载评估数据集是可选的;默认情况下,数据将直接从Hugging Face Hub流式传输。如果您希望下载数据,请运行以下命令,将 $download_dir 替换为您想要的下载路径:

python download_evalsets.py $download_dir

进行评估

要进行评估,请运行以下命令:

python evaluate.py  --train_output_dir $train_output_dir/$exp_name

如果您已经下载了数据集,可以使用 --data_dir 标志指向存储数据的路径。 默认情况下,评估脚本输出到与 $train_output_dir 相同的目录。可以通过评估脚本的 --output_dir 标志更改此设置。

注意: 除非您传递 --submit 标志,否则这不会提交到我们的排行榜。

提交

要提交,您需要使用一些额外的标志运行评估脚本。

提交脚本将上传文件到Hugging Face Hub(如模型检查点和指定样本ID的文件),您需要一个Hugging Face账户,以及一个存储这些文件的仓库。请按以下步骤操作:

  1. 确保已安装 git-lfs(如果未安装,运行 git lfs install
  2. https://huggingface.co/join 创建一个Hugging Face账户。
  3. 登录您的Hugging Face账户:huggingface-cli login
  4. 创建一个存储数据的仓库:huggingface-cli repo create <REPO_NAME> --type model

准备好提交后,使用一些额外的标志运行评估脚本,例如:

python evaluate.py \
    --track=filtering \
    --train_output_dir=$train_output_dir \
    --samples=$sample_files \
    --dataset-size=1234568 \
    --submit \
    --method_name="[您的方法名称,请尽量描述清楚!]" \
    --author="[您的姓名]" \
    --email="[your@email.com]" \
    --hf_username=$hf_username \
    --hf_repo_name=$hf_repo_name

请注意,您的方法名称和作者(不包括其他信息)将在我们的排行榜上公开显示。请务必替换所有字段为正确的信息。

如果您有论文或博客文章,并希望在我们的排行榜上链接,可以使用 --writeup 标志添加该信息。

重要: 我们强烈建议用户使用 --samples 标志指定用于训练模型的样本。这可以是包含我们样本池中样本uid的文件,和/或指定池外图像URL和标题的其他文件。您可以使用 :: 分隔符指定多个文件,例如 --samples=/path/to/sample_ids.npy::/path/to/custom_data.parquet。 我们还强烈鼓励参与者使用 --upload-checkpoint 标志上传他们训练的模型检查点。

检查点

我们在OpenCLIP中发布了主要基线的检查点。更多详情可以在 https://github.com/mlfoundations/open_clip/blob/main/docs/datacomp_models.md 找到。

引用

如果您觉得这个仓库、我们的论文或数据有用,请考虑引用:

@article{datacomp,
  title={DataComp: In search of the next generation of multimodal datasets},
  author={Samir Yitzhak Gadre, Gabriel Ilharco, Alex Fang, Jonathan Hayase, Georgios Smyrnis, Thao Nguyen, Ryan Marten, Mitchell Wortsman, Dhruba Ghosh, Jieyu Zhang, Eyal Orgad, Rahim Entezari, Giannis Daras, Sarah Pratt, Vivek Ramanujan, Yonatan Bitton, Kalyani Marathe, Stephen Mussmann, Richard Vencu, Mehdi Cherti, Ranjay Krishna, Pang Wei Koh, Olga Saukh, Alexander Ratner, Shuran Song, Hannaneh Hajishirzi, Ali Farhadi, Romain Beaumont, Sewoong Oh, Alex Dimakis, Jenia Jitsev, Yair Carmon, Vaishaal Shankar, Ludwig Schmidt},
  journal={arXiv preprint arXiv:2304.14108},
  year={2023}
}

编辑推荐精选

Vora

Vora

免费创建高清无水印Sora视频

Vora是一个免费创建高清无水印Sora视频的AI工具

Refly.AI

Refly.AI

最适合小白的AI自动化工作流平台

无需编码,轻松生成可复用、可变现的AI自动化工作流

酷表ChatExcel

酷表ChatExcel

大模型驱动的Excel数据处理工具

基于大模型交互的表格处理系统,允许用户通过对话方式完成数据整理和可视化分析。系统采用机器学习算法解析用户指令,自动执行排序、公式计算和数据透视等操作,支持多种文件格式导入导出。数据处理响应速度保持在0.8秒以内,支持超过100万行数据的即时分析。

AI工具酷表ChatExcelAI智能客服AI营销产品使用教程
TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
AIWritePaper论文写作

AIWritePaper论文写作

AI论文写作指导平台

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

AI辅助写作AI工具AI论文工具论文写作智能生成大纲数据安全AI助手热门
博思AIPPT

博思AIPPT

AI一键生成PPT,就用博思AIPPT!

博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。

AI办公办公工具AI工具博思AIPPTAI生成PPT智能排版海量精品模板AI创作热门
潮际好麦

潮际好麦

AI赋能电商视觉革命,一站式智能商拍平台

潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。

iTerms

iTerms

企业专属的AI法律顾问

iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。

SimilarWeb流量提升

SimilarWeb流量提升

稳定高效的流量提升解决方案,助力品牌曝光

稳定高效的流量提升解决方案,助力品牌曝光

Sora2视频免费生成

Sora2视频免费生成

最新版Sora2模型免费使用,一键生成无水印视频

最新版Sora2模型免费使用,一键生成无水印视频

下拉加载更多