ml-4m:基于多模态掩码建模的任意到任意基础模型框架项目

4M: Massively Multimodal Masked Modeling

分支1Tags0
当前项目代码仓暂无内容

4M:大规模多模态掩码建模

用于训练任意到任意多模态基础模型的框架。
可扩展。开源。跨越数十种模态和任务。

EPFL - Apple

官网 | BibTeX引用 | 🤗演示

以下为官方实现和预训练模型:

4M:大规模多模态掩码建模,NeurIPS 2023(精选论文)
David Mizrahi(个人主页)*, Roman Bachmann(个人主页)*, Oğuzhan Fatih Kar(个人主页),Teresa Yeo(个人主页),Mingfei Gao(个人主页),Afshin Dehghan(个人主页),Amir Zamir(个人主页

4M-21:面向数十种任务和模态的任意到任意视觉模型,NeurIPS 2024
Roman Bachmann(个人主页)*, Oğuzhan Fatih Kar(个人主页)*, David Mizrahi(个人主页)*, Ali Garjani(个人主页),Mingfei Gao(个人主页),David Griffiths(个人主页),Jiaming Hu(个人主页),Afshin Dehghan(个人主页),Amir Zamir(个人主页


4M 主图 4M 主图

4M 是一个用于训练 "任意到任意" 基础模型的框架,通过标记化和掩码技术扩展到众多不同的模态。使用 4M 训练的模型能够执行广泛的视觉任务,能够很好地迁移到未见过的任务和模态,并且是灵活且可引导的多模态生成模型。我们发布了 "4M:大规模多模态掩码建模"(以下简称 4M-7)以及 "4M-21:面向数十种任务和模态的任意到任意视觉模型"(以下简称 4M-21)的代码和模型。

目录

使用说明

安装

  1. 克隆这个仓库并导航到根目录:
git clone https://github.com/apple/ml-4m
cd ml-4m
  1. 创建一个新的 conda 环境,然后安装该软件包及其依赖项:
conda create -n fourm python=3.9 -y
conda activate fourm
pip install --upgrade pip  # enable PEP 660 support
pip install -e .
  1. 在 Python shell 中执行以下代码,以验证 PyTorch 中是否提供了 CUDA 支持:
# Run in Python shell
import torch
print(torch.cuda.is_available())  # Should return True

如果CUDA不可用,请按照官方安装指南重新安装PyTorch。同理,如果您希望安装xFormers(可选,用于更快的分词器),请遵循其README以确保CUDA版本正确。

  1. (可选)将新的conda环境作为内核暴露给Jupyter笔记本:
pip install ipykernel
python -m ipykernel install --user --name fourm --display-name "4M (fourm)"

开始使用

我们提供了一个演示包装器,以帮助您快速开始使用4M模型,进行RGB转全模态或者{标题,边界框}转全模态的生成任务。 例如,要从给定的RGB输入生成所有模态,可以调用:

from fourm.demo_4M_sampler import Demo4MSampler, img_from_url
sampler = Demo4MSampler(fm='EPFL-VILAB/4M-21_XL').cuda()
img = img_from_url('https://storage.googleapis.com/four_m_site/images/demo_rgb.png') # 1x3x224x224 ImageNet-standardized PyTorch Tensor
preds = sampler({'rgb@224': img.cuda()}, seed=None) 
sampler.plot_modalities(preds, save_path=None)

您应该期望看到如下所示的输出:

4M 演示采样器输出 - 暗模式 4M 演示采样器输出 - 亮模式

对于执行从标题到全模态生成的操作,您可以替换采样器输入,如下所示:preds = sampler({'caption': 'A lake house with a boat in front [S_1]'})。 关于可用的 4M 模型列表,请见下方的模型库,更多生成操作指南请查看 README_GENERATION.md

数据

关于如何准备对齐的多模态数据集,请查看 README_DATA.md

分词

关于如何训练特定模态的分词器,请查看 README_TOKENIZATION.md

4M 训练

关于如何训练 4M 模型,请查看 README_TRAINING.md

生成

关于如何使用 4M 模型进行推理/生成,请查看 README_GENERATION.md。我们还提供了一个生成笔记本,其中包含 4M 推理的示例,尤其是执行条件图像生成和常见的视觉任务(例如 RGB 到全模态)。

模型库

我们提供了 4M 和分词器的 checkpoints 作为 safetensors,并通过 Hugging Face Hub 提供了简便的加载方式。

4M 模型

模型 # 模态 数据集 # 参数 配置 权重
4M-B 7 CC12M 198M 配置 Checkpoint / HF Hub
4M-B 7 COYO700M 198M 配置 Checkpoint / HF Hub
4M-B 21 CC12M+COYO700M+C4 198M 配置 Checkpoint / HF Hub
4M-L 7 CC12M 705M 配置 Checkpoint / HF Hub
4M-L 7 COYO700M 705M 配置 Checkpoint / HF Hub
4M-L 21 CC12M+COYO700M+C4 705M 配置 Checkpoint / HF Hub
4M-XL 7 CC12M 2.8B 配置 Checkpoint / HF Hub
4M-XL 7 COYO700M 2.8B 配置 Checkpoint / HF Hub
4M-XL 21 CC12M+COYO700M+C4 2.8B 配置 Checkpoint / HF Hub

要从 Hugging Face Hub 加载模型:

from fourm.models.fm import FM

fm7b_cc12m  = FM.from_pretrained('EPFL-VILAB/4M-7_B_CC12M')
fm7b_coyo   = FM.from_pretrained('EPFL-VILAB/4M-7_B_COYO700M')
fm21b       = FM.from_pretrained('EPFL-VILAB/4M-21_B')

fm7l_cc12m  = FM.from_pretrained('EPFL-VILAB/4M-7_L_CC12M')
fm7l_coyo   = FM.from_pretrained('EPFL-VILAB/4M-7_L_COYO700M')
fm21l       = FM.from_pretrained('EPFL-VILAB/4M-21_L')

fm7xl_cc12m = FM.from_pretrained('EPFL-VILAB/4M-7_XL_CC12M')
fm7xl_coyo  = FM.from_pretrained('EPFL-VILAB/4M-7_XL_COYO700M')
fm21xl      = FM.from_pretrained('EPFL-VILAB/4M-21_XL')

要手动加载检查点,首先从以上链接下载 safetensors 文件,然后调用:

from fourm.utils import load_safetensors
from fourm.models.fm import FM

ckpt, config = load_safetensors('/path/to/checkpoint.safetensors')
fm = FM(config=config)
fm.load_state_dict(ckpt)

4M 文本到图像专业模型

这些模型基于标准的4M-7 CC12M模型初始化,但继续采用一种向文本输入严重倾斜的模态混合进行训练。它们仍然能够执行所有其他任务,但在文本到图像生成方面,相较于未经微调的模型表现更佳。

模型名称 模态数量 数据集 参数量 配置 权重
4M-T2I-B 7 CC12M 198M 配置 检查点 / Hugging Face Hub
4M-T2I-L 7 CC12M 705M 配置 检查点 / Hugging Face Hub
4M-T2I-XL 7 CC12M 2.8B 配置 检查点 / Hugging Face Hub

从 Hugging Face Hub 加载模型:

from fourm.models.fm import FM

fm7b_t2i_cc12m  = FM.from_pretrained('EPFL-VILAB/4M-7-T2I_B_CC12M')
fm7l_t2i_cc12m  = FM.from_pretrained('EPFL-VILAB/4M-7-T2I_L_CC12M')
fm7xl_t2i_cc12m  = FM.from_pretrained('EPFL-VILAB/4M-7-T2I_XL_CC12M')

手动从检查点加载与上述基础4M模型的方法相同。

4M超分辨率模型

模型 修改次数 数据集 参数量 配置文件 权重
4M-SR-L 7 CC12M 198M 配置 检查点 / Hugging Face Hub

要从Hugging Face Hub加载模型:

from fourm.models.fm import FM

fm7l_sr_cc12m  = FM.from_pretrained('EPFL-VILAB/4M-7-SR_L_CC12M')

手动从检查点加载基础4M模型的方式与上述相同。

分词器

模态 分辨率 词汇量 代码本大小 扩散解码器 权重
RGB 224-448 196-784 16k 检查点 / HF Hub
深度 224-448 196-784 8k 检查点 / HF Hub
法线 224-448 196-784 8k 检查点 / HF Hub
边缘 (Canny, SAM) 224-512 196-1024 8k 检查点 / HF Hub
COCO 语义分割 224-448 196-784 4k 检查点 / HF Hub
CLIP-B/16 224-448 196-784 8k 检查点 / HF Hub
DINOv2-B/14 224-448 256-1024 8k 检查点 / HF Hub
DINOv2-B/14 (全局) 224 16 8k 检查点 / HF Hub
ImageBind-H/14 224-448 256-1024 8k 检查点 / HF Hub
ImageBind-H/14 (全局) 224 16 8k 检查点 / HF Hub
SAM 实例 - 64 1k 检查点 / HF Hub
3D 人体姿态 - 8 1k 检查点 / HF Hub

从 Hugging Face Hub 加载模型的步骤如下:

from fourm.vq.vqvae import VQVAE, DiVAE

# 4M-7 modalities
tok_rgb = DiVAE.from_pretrained('EPFL-VILAB/4M_tokenizers_rgb_16k_224-448')
tok_depth = DiVAE.from_pretrained('EPFL-VILAB/4M_tokenizers_depth_8k_224-448')
tok_normal = DiVAE.from_pretrained('EPFL-VILAB/4M_tokenizers_normal_8k_224-448')
tok_semseg = VQVAE.from_pretrained('EPFL-VILAB/4M_tokenizers_semseg_4k_224-448')
tok_clip = VQVAE.from_pretrained('EPFL-VILAB/4M_tokenizers_CLIP-B16_8k_224-448')

# 4M-21 modalities
tok_edge = DiVAE.from_pretrained('EPFL-VILAB/4M_tokenizers_edge_8k_224-512')
tok_dinov2 = VQVAE.from_pretrained('EPFL-VILAB/4M_tokenizers_DINOv2-B14_8k_224-448')
tok_dinov2_global = VQVAE.from_pretrained('EPFL-VILAB/4M_tokenizers_DINOv2-B14-global_8k_16_224')
tok_imagebind = VQVAE.from_pretrained('EPFL-VILAB/4M_tokenizers_ImageBind-H14_8k_224-448')
tok_imagebind_global = VQVAE.from_pretrained('EPFL-VILAB/4M_tokenizers_ImageBind-H14-global_8k_16_224')
sam_instance = VQVAE.from_pretrained('EPFL-VILAB/4M_tokenizers_sam-instance_1k_64')
human_poses = VQVAE.from_pretrained('EPFL-VILAB/4M_tokenizers_human-poses_1k_8')

要手动加载检查点,首先从上述链接下载 safetensors 文件,然后调用:

from fourm.utils import load_safetensors
from fourm.vq.vqvae import VQVAE, DiVAE

ckpt, config = load_safetensors('/path/to/checkpoint.safetensors')
tok = VQVAE(config=config) # Or DiVAE for models with a diffusion decoder
tok.load_state_dict(ckpt)

许可证

此代码仓库中的代码遵循 Apache 2.0 许可证发布,该许可证内容可在 LICENSE 文件中找到。

此代码仓库中的模型权重遵循示例代码许可证发布,该许可证内容可在 LICENSE_WEIGHTS 文件中找到。

引用

如果您觉得这个代码仓库对您有所帮助,请考虑引用我们的工作成果:

@inproceedings{4m,
    title={{4M}: Massively Multimodal Masked Modeling},
    author={David Mizrahi and Roman Bachmann and O{\u{g}}uzhan Fatih Kar and Teresa Yeo and Mingfei Gao and Afshin Dehghan and Amir Zamir},
    booktitle={Thirty-seventh Conference on Neural Information Processing Systems},
    year={2023},
}

@article{4m21,
    title={{4M-21}: An Any-to-Any Vision Model for Tens of Tasks and Modalities},
    author={Roman Bachmann and O{\u{g}}uzhan Fatih Kar and David Mizrahi and Ali Garjani and Mingfei Gao and David Griffiths and Jiaming Hu and Afshin Dehghan and Amir Zamir},
    journal={arXiv 2024},
    year={2024},
}

当然,我会根据您的要求进行翻译。请您提供需要翻译的文本,我将为您转换成通俗、专业、优雅且流畅的中文内容,同时保持原始的 Markdown 格式。

项目介绍

4M:大规模多模态掩码建模【此简介由AI生成】

定制我的领域
321.81 K113访问 GitHub