欢迎参加我们的比赛。本仓库包含参赛者所需的工具,用于从我们的数据池下载数据、训练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]'
)。
要下载,请运行以下命令,将 $scale
替换为比赛规模(即 small
、medium
、large
或 xlarge
),将 $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
内创建两个目录:metadata
和 shards
。
除了图像和说明文字外,该脚本还将下载元数据,包括包含图像URL、说明文字和其他可能有用信息的 .parquet
文件,如经过训练的OpenAI CLIP模型给出的图像和说明文字之间的相似度。
如果使用 --download_npz
标志,脚本还将下载 .npz
文件,其中包含经过训练的OpenAI CLIP模型为每个样本提取的特征。
我们使用 img2dataset 下载图像数据,将其存储为 .tar
分片,包含图像和说明文字,以供 webdataset 使用。
下载完成后,数据将在 $data_dir/shards
中可用。
要仅下载元数据,请使用 --skip_shards
标志。
每个规模的磁盘需求如下所示。
元数据 (parquets) | 元数据 (npzs) | 数据 (tars) | |
---|---|---|---|
small 规模 | 3 GB | 75GB | 450 GB |
medium 规模 | 30 GB | 750GB | 4.5 TB |
large 规模 | 300 GB | 7.5TB | 45 TB |
xlarge 规模 | 3 TB | 75TB | 450 TB |
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
保留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数据集的筛选策略:对图像-文本对应用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分数(L/14)取前0.3比例
筛选和 基于图像
筛选。这是我们在 medium
、large
和 xlarge
规模上表现最佳的基线。我们在 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进行训练的示例脚本。
用于训练的超参数对于给定规模是固定的。对于 small
和 medium
规模,我们使用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账户,以及一个存储这些文件的仓库。请按以下步骤操作:
git-lfs
(如果未安装,运行 git lfs install
)huggingface-cli login
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}
}
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多 功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
字节跳动发布的AI编程神器IDE
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加 速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。
openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。
高分辨率纹理 3D 资产生成
Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。
一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。
3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号