- 人工智能
- 大模型
- 多模态
- 计算机视觉
- NLP
- 微调
- AI 应用
【免费下载链接】MiniGPT-4
Open-sourced codes for MiniGPT-4 and MiniGPT-v2 (https://minigpt-4.github.io, https://minigpt-v2.github.io/)
导读
本篇指南围绕 dataset/README_2_STAGE.md 讲解 MiniGPT-4 第二阶段(对齐微调)训练数据的下载、解压与路径配置全流程:下载官方提供的cc_sbu_align对齐数据集、将其放置到本地任意目录,并在 align.yaml 中正确指向该目录。同时,本文将结合仓库源码(数据集构建器与 Dataset 实现)说明该数据集在训练时究竟如何被加载,并串联第一阶段预训练数据的准备步骤,帮助你打通从原始语料到可训练数据管线的完整链路。读完本文,你将能独立完成 MiniGPT-4 两阶段训练所需全部数据的准备与配置。
一、两阶段训练与第二阶段数据的角色
MiniGPT-4 的训练分为两个阶段:
- 第一阶段(预训练):在大规模图文对数据(CC3M、CC12M、SBU、LAION115M)上对齐视觉编码器与 LLM 的投影层,让模型学会"看图说话"。对应配置见 train_configs/minigpt4_stage1_pretrain.yaml。
- 第二阶段(对齐微调):在人工筛选的高质量图文对齐数据上进行微调,让模型输出更像自然对话。本文的主角
cc_sbu_align正是这一阶段使用的数据集。
cc_sbu_align由官方提供(下载链接见 dataset/README_2_STAGE.md 正文第一段),它包含过滤后的图像与对应描述,是保证第二阶段训练效果的基础。
二、第二阶段数据集结构
从官方链接下载压缩包并解压后,你会得到一个具有如下结构的文件夹:
cc_sbu_align ├── filter_cap.json └── image ├── 2.jpg ├── 3.jpg ...各部分作用如下:
| 路径 | 作用 |
|---|---|
cc_sbu_align/filter_cap.json | 过滤后的图文标注文件,每条记录包含image_id与caption字段,用于训练时提供文本监督 |
cc_sbu_align/image/ | 图像文件目录,文件名形如2.jpg、3.jpg,与filter_cap.json中的image_id一一对应 |
将整个cc_sbu_align文件夹放置到任意你希望存放的路径即可,无需固定在仓库内。
三、配置数据集路径:align.yaml
第二步是让训练框架知道数据放在哪里。在数据集配置文件 minigpt4/configs/datasets/cc_sbu/align.yaml 的第 5 行(build_info.storage字段)填入你的实际路径:
datasets: cc_sbu_align: data_type: images build_info: storage: /path/to/cc_sbu_align/例如,若你将数据解压到了/data/datasets/cc_sbu_align,则第 5 行应写为:
storage: /data/datasets/cc_sbu_align/注意:这里storage指向的是cc_sbu_align文件夹本身(而非其内部的image子目录),因为源码会在此基础上自动拼接filter_cap.json与image两个子路径(详见下文)。
四、源码视角:cc_sbu_align 是如何被加载的
理解配置项的含义,最直接的方式是查看数据是如何被读取的。
4.1 构建器:从 storage 派生标注与图像路径
在 minigpt4/datasets/builders/image_text_pair_builder.py 中,CCSBUAlignBuilder读取build_info.storage并拼接出两个关键路径:
storage_path = build_info.storage datasets['train'] = dataset_cls( vis_processor=self.vis_processors["train"], text_processor=self.text_processors["train"], ann_paths=[os.path.join(storage_path, 'filter_cap.json')], vis_root=os.path.join(storage_path, 'image'), )可以看到:
- 标注文件:
{storage}/filter_cap.json; - 图像根目录:
{storage}/image。
这与上面提到的cc_sbu_align目录结构完全对应,也解释了为什么align.yaml的storage要填到cc_sbu_align/这一层而不是image/层。同时,构建器会检查storage_path是否存在,若不存在会打印warnings.warn("storage path {} does not exist."),方便你排查路径写错的问题。
4.2 Dataset 实现:按 image_id 拼接图像路径
在 minigpt4/datasets/datasets/cc_sbu_dataset.py 中,CCSBUAlignDataset继承自CaptionDataset,其__getitem__逻辑为:
ann = self.annotation[index] img_file = '{}.jpg'.format(ann["image_id"]) image_path = os.path.join(self.vis_root, img_file) image = Image.open(image_path).convert("RGB") image = self.vis_processor(image) caption = ann["caption"] return {"image": image, "answer": caption, "image_id": self.img_ids[ann["image_id"]]}即:每条样本依据filter_cap.json中的image_id在image/目录下找到对应{image_id}.jpg文件,读取后经视觉处理器(vis_processor)变换,与caption组成训练样本。因此filter_cap.json与image/必须保持同步,二者缺一不可。
4.3 与第一阶段的加载方式差异
值得对比的是:第一阶段数据(laion、cc_sbu)走的是WebDataset管线(minigpt4/datasets/datasets/laion_dataset.py 与 cc_sbu_dataset.py),通过wds.ResampledShards加载 tar 分片、wds.shuffle(1000)打乱、wds.to_tuple("jpg", "json")取出图像与标注;而第二阶段cc_sbu_align使用常规的CaptionDataset逐条索引读取。这一差异也反映在配置上:第一阶段配置指向{00000..01255}.tar这样的分片通配符,第二阶段配置则指向普通目录。
五、完整流程:从第一阶段数据到第二阶段数据的端到端准备
虽然本文聚焦第二阶段,但 MiniGPT-4 的两阶段训练是一体化的,第一阶段数据的准备步骤同样记录在同目录文档 dataset/README_1_STAGE.md 中。为保证整体流程完整可复现,这里一并整理。
5.1 下载第一阶段过滤标注
第一阶段使用 BLIP 过滤后的合成标题(synthetic captions)。所需 JSON 标注文件(ccs_synthetic_filtered_large.json与laion_synthetic_filtered_large.json)的下载地址见 dataset/README_1_STAGE.md 中的表格。请注意:完整存放 CC3M+CC12M+SBU 与 LAION115M 数据集约需2.3 TB存储空间,请提前规划磁盘。
5.2 分步准备命令
以下命令序列来自 dataset/README_1_STAGE.md,展示了从整理目录到最终生成数据集的完整操作:
# 1) 设置数据集根目录,并移动标注文件 export MINIGPT4_DATASET=/YOUR/PATH/FOR/LARGE/DATASET/ mkdir ${MINIGPT4_DATASET}/cc_sbu mkdir ${MINIGPT4_DATASET}/laion mv ccs_synthetic_filtered_large.json ${MINIGPT4_DATASET}/cc_sbu mv laion_synthetic_filtered_large.json ${MINIGPT4_DATASET}/laion # 2) 将仓库中的转换脚本与下载脚本复制到数据目录 cp convert_cc_sbu.py ${MINIGPT4_DATASET}/cc_sbu cp download_cc_sbu.sh ${MINIGPT4_DATASET}/cc_sbu cp convert_laion.py ${MINIGPT4_DATASET}/laion cp download_laion.sh ${MINIGPT4_DATASET}/laion # 3) 将标注转换为 img2dataset 可识别的 TSV 格式 cd ${MINIGPT4_DATASET}/cc_sbu python convert_cc_sbu.py cd ${MINIGPT4_DATASET}/laion python convert_laion.py # 4) 使用 img2dataset 下载图像并打包为 tar/parquet 分片 cd ${MINIGPT4_DATASET}/cc_sbu sh download_cc_sbu.sh cd ${MINIGPT4_DATASET}/laion sh download_laion.sh其中转换脚本就位于仓库 dataset/convert_cc_sbu.py 与 dataset/convert_laion.py:它们将 BLIP 的 JSON 标注读取后,用csv.writer(delimiter='\t')写出带表头的 TSV 文件(ccs_synthetic_filtered_large.tsv/laion_synthetic_filtered_large.tsv),供 img2dataset 消费。
5.3 第一阶段最终目录结构
完成上述步骤后,你的数据目录应呈现如下结构:
. ├── ${MINIGPT4_DATASET} │ ├── cc_sbu │ ├── convert_cc_sbu.py │ ├── download_cc_sbu.sh │ ├── ccs_synthetic_filtered_large.json │ ├── ccs_synthetic_filtered_large.tsv │ └── cc_sbu_dataset │ ├── 00000.tar │ ├── 00000.parquet │ ... │ ├── laion │ ├── convert_laion.py │ ├── download_laion.sh │ ├── laion_synthetic_filtered_large.json │ ├── laion_synthetic_filtered_large.tsv │ └── laion_dataset │ ├── 00000.tar │ ├── 00000.parquet │ ... ...5.4 配置第一阶段数据集路径
随后在 minigpt4/configs/datasets/laion/defaults.yaml 的第 5 行填入 LAION 分片通配路径:
storage: ${MINIGPT4_DATASET}/laion/laion_dataset/{00000..10488}.tar并在 minigpt4/configs/datasets/cc_sbu/defaults.yaml 的第 5 行填入 CC/SBU 分片通配路径:
storage: ${MINIGPT4_DATASET}/cc_sbu/cc_sbu_dataset/{00000..01255}.tar这里的花括号{00000..10488}是 WebDataset 的分片序号通配语法,对应wds.ResampledShards(location)需要接收的分片列表模式,路径中的${MINIGPT4_DATASET}需替换为你实际设置的绝对路径。
六、训练配置中数据集的使用方式
数据就绪后,第一阶段训练配置 train_configs/minigpt4_stage1_pretrain.yaml 中会同时挂载laion与cc_sbu两个数据集:
datasets: laion: batch_size: 64 vis_processor: train: name: "blip2_image_train" image_size: 224 text_processor: train: name: "blip_caption" sample_ratio: 115 cc_sbu: batch_size: 64 vis_processor: train: name: "blip2_image_train" image_size: 224 text_processor: train: name: "blip_caption" sample_ratio: 14要点解读:
sample_ratio:laion为 115、cc_sbu为 14,表示两个数据集在训练时的采样配比,用于平衡 LAION115M 与 CC3M+CC12M+SBU 的数量级差异;vis_processor:使用blip2_image_train,输入图像统一缩放到 224×224,与 blip_processors.py 中定义的 BLIP2 图像处理器对应;text_processor:使用blip_caption处理文本监督信号。
第二阶段(对齐微调)则通过 minigpt4_stage2_finetune.yaml 引用cc_sbu_align数据集,其路径来源正是本文第三节配置的 align.yaml。
七、配置检查清单
完成两阶段数据准备后,请逐项核对:
- 目录结构:
cc_sbu_align/下同时存在filter_cap.json与image/,且filter_cap.json中每条记录的image_id都能在image/下找到同名{image_id}.jpg; - 路径层级:
align.yaml的storage指向cc_sbu_align/根目录(不是image/),因为 CCSBUAlignBuilder 会自动拼接filter_cap.json与image; - 分片通配符:第一阶段 defaults.yaml 的 storage 必须写成
{00000..01255}.tar形式的通配路径,与下载得到的实际分片数量匹配,否则wds.ResampledShards无法定位数据; - 磁盘空间:第一阶段全套数据约需 2.3 TB,第二阶段
cc_sbu_align较小,但仍需确认剩余空间充足; - 相对路径问题:训练时使用的所有路径建议写成绝对路径,避免工作目录切换导致找不到数据。
按照上述流程完成下载、解压、路径配置后,即可在train.py中启动对应阶段的训练,让数据管线(构建器 → Dataset → 处理器)按预期工作。
- 人工智能
- 大模型
- 多模态
- 计算机视觉
- NLP
- 微调
- AI 应用
【免费下载链接】MiniGPT-4
Open-sourced codes for MiniGPT-4 and MiniGPT-v2 (https://minigpt-4.github.io, https://minigpt-v2.github.io/)
相关推荐
OpenMetadata 连接器审计实战:元数据覆盖度与摄取完整度(Prompt 1 全解)
OpenMetadata 连接器审计实战:元数据覆盖度与摄取完整度(Prompt 1 全解) 本篇指南以 OpenMetadata 仓库内 skills/con
人工智能大模型多模态计算机视觉NLP微调AI 应用PaddleNLP 的 PPO RLHF 对齐训练实战指南:数据、三阶段流程与 3D 分布式配置
PaddleNLP 的 PPO RLHF 对齐训练实战指南:数据、三阶段流程与 3D 分布式配置 本文围绕 PaddleNLP 仓库中基于强化学习 PPO(Pr
人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLPFiftyOne Enterprise Auto Labeling 准备阶段实战:数据集加载与 GPU 计算编排集群配置
FiftyOne Enterprise Auto Labeling 准备阶段实战:数据集加载与 GPU 计算编排集群配置 Auto Labeling(自动标注)
AI 应用计算机视觉媒体生成
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考