创新交错图文生成模型
MM-Interleaved是一种新型交错图文生成模型,采用创新的多模态特征同步器MMFS。它能分析高分辨率图像 的多尺度特征,生成精确文本描述和匹配图像。该模型在多模态理解和生成任务中表现出色,可适用于多种应用场景。
这是MM-Interleaved的官方代码库:一个用于交错图像-文本数据的端到端生成模型。
MM-Interleaved是一个新的端到端生成模型,用于交错图像-文本建模。它引入了一种新颖的细粒度多模态特征同步器MMFS,使其能够识别多张图像中的多尺度高分辨率特征,以自回归方式生成准确的文本描述和视觉一致的图像。更多技术细节请参阅我们的论文。
该模型在多个公开可用的数据集上进行预训练,在各种多模态理解和生成的评估基准上取得了优异的零样本性能。它可以进一步针对不同的下游任务进行微调,如视觉问答、图像描述、指代表达定位、文本到图像生成、分割到图像转换和视觉故事讲述。
第1步 ,克隆仓库并使用pip
安装所有必需的包。
git clone https://github.com/OpenGVLab/MM-Interleaved cd MM-Interleaved pip install -r requirements.txt # 安装`MultiScaleDeformableAttention`模块 cd mm_interleaved/models/utils/ops python setup.py install
第2步,通过运行以下命令从huggingface下载所有预训练模型组件到assets/
目录:
python mm_interleaved/scripts/download_hf_models.py
MM-Interleaved的预训练模型权重(不包括指令调优或SFT)可在此链接获取,遵循Llama的模型许可。您可以将它们下载到OUTPUT/mm_interleaved_pretrain
并用于进一步的推理、零样本评估或微调任务。
对于推理,我们提供了一个示例推理脚本./inference.py
和相应的配置文件./mm_interleaved/configs/release/mm_inference.yaml
,原生支持交错图像和文本生成。只需运行以下命令:
python -u inference.py --config_file=mm_interleaved/configs/release/mm_inference.yaml
生成结果将自动保存在./OUTPUT/mm_inference
目录下。
交错输入数据默认来自./docs/examples/annt.json
。您可以随意修改它以进行自定义生成。以下是交错输入上下文的示例:
{
// 输入文本句子列表
"sentences": [
"厨房里展示了各种各样的物品摆放在柜台上。"
],
// 输入图像路径列表
"images": [
"./assets/dataset/coco/val2014/COCO_val2014_000000384213.jpg"
],
// "images"对应的句子索引列表
"sentence_ixs": [
0
],
// 图像及其对应句子的相对顺序列表
"image_first": [
false
],
// 第一次迭代的初始生成模式,可以是"generate_images"或"generate_texts"
"generate_mode": "generate_images",
// 总迭代次数
"num_iter": 1
}
请注意,如果"generate_mode"
设置为"generate_images"
,则应在最后一个句子之后附加一个填充图像作为占位符。目前,输入应至少包含1张图像(包括填充图像,如果存在)。
我们提供了脚本./evaluate.py
和相应的配置文件./mm_interleaved/configs/release/mm_eval.yaml
,用于对我们预训练模型在论文中提到的所有基准上进行零样本评估。我们还上传了所有注释文件在此处以便于访问。
评估默认在slurm分布式环境下进行。请首先下载预训练模型权重和配置文件中指定的相同路径下的每个数据集的评估数据。然后运行以下命令:
bash slurm_run.sh ${GPUS} ${GPUS_PER_NODE} ${JOB_NAME} ${QUOTATYPE} ${PARATITION} evaluate.py ./mm_interleaved/configs/release/mm_eval.yaml
所有评估数据集的文件结构预期如下:
├── coco
│ ├── annotations
│ │ ├── captions_val2014.json
│ │ ├── captions_val2017.json
│ │ ├── coco_karpathy_test_gt.json
│ │ ├── coco_karpathy_test.json
│ │ ├── coco_karpathy_val_gt.json
│ │ └── coco_karpathy_val.json
│ ├── test2014
│ ├── val2014
│ └── val2017
├── flickr30k
│ ├── flickr30k-images
│ └── test1k.token.coco_format
├── image2paragraph
│ ├── annotations
│ │ ├── paragraphs_coco.json
│ │ ├── paragraphs_v1.json
│ │ ├── test_split.json
│ │ └── val_split.json
│ └── images
├── lncoco
│ ├── coco_val_captions.jsonl
├── nocaps
│ ├── images
│ └── nocaps_val_4500_captions.json
├── OK-VQA
│ ├── mscoco_val2014_annotations.json
│ └── OpenEnded_mscoco_val2014_questions.json
├── textvqa
│ ├── textvqa_val_annotations.json
│ ├── textvqa_val_questions.json
│ └── train_images
├── visdial
│ ├── visdial_1.0_val_dense_annotations.json
│ ├── visdial_1.0_val.json
│ └── VisualDialog_val2018
├── VizWiz
│ ├── val
│ └── val.json
└── VQAv2
├── v2_mscoco_val2014_annotations.json
└── v2_OpenEnded_mscoco_val2014_questions.json
我们还提供了预训练脚本./train.py
和相应的配置文件mm_interleaved/configs/release/mm_pretrain.yaml
。默认情况下,我们使用DeepSpeed ZeRO-1在slurm环境下进行高效的分布式训练。训练引擎基于huggingface的trainer实现。
我们使用webdataset进行高效的数据加载。对于MMC4数据集,只需将所有图像和注释文件下载到配置文件中指定的同一目录下即可。带有.jsonl.zip
后缀的原始注释文件可以直接处理,无需进一步修改。对于LAION-COCO和LAION-En等图像-文本对数据集,每个注释文件预计有约10,000行图像-文本对数据。每行是一个json字典,包含两个键值对,即"image"和相应的"caption"。在./docs/examples/0000001.txt
中提供了一个示例注释文件。准备好所有预训练数据后,请修改配置文件中的数据路径以及其他相关参数。
此外,我们还支持在训练期间对多个数据集进行零样本评估。为此,修改训练配置文件的data.val
部分,并包含您想要在训练过程中实时监控的评估数据集的配置。
预训练命令为:
bash slurm_run.sh ${GPUS} ${GPUS_PER_NODE} ${JOB_NAME} ${QUOTATYPE} ${PARATITION} train.py ./mm_interleaved/configs/release/mm_pretrain.yaml
我们感谢来自OpenFlamingo