ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

LAVIS 中 Conceptual Captions 数据集:从 CC3M/CC12M 的自动下载、标注构建到预训练接入全指南

LAVIS 中 Conceptual Captions 数据集:从 CC3M/CC12M 的自动下载、标注构建到预训练接入全指南 LAVIS 中 Conceptual Captions 数据集从 CC3M/CC12M 的自动下载、标注构建到预训练接入全指南【免费下载链接】LAVISLAVIS - A One-stop Library for Language-Vision Intelligence项目地址: https://gitcode.com/gh_mirrors/la/LAVIS导读本篇指南以 LAVIS 仓库中的 Conceptual Captions 数据集说明文档 为核心系统讲解 CC3M约 330 万条与 CC12M1200 万条图像-文本对数据集的来龙去脉它们为何特别适合视觉-语言预训练如何用仓库自带的脚本断点续传式下载图片、用 Notebook 生成 LAVIS 可用的 JSON 标注以及如何通过数据集构建器Builder和 YAML 配置接入 BLIP 等模型的预训练流程。读完本文你将掌握在 LAVIS 中从零落地 CC3M/CC12M 数据管线的完整实操路径并理解其底层实现原理。数据集是什么从网页 Alt-text 到大规模预训练语料CC3M 与 CC12M 的定位根据 dataset_card/conceptual_captions.md 的说明Conceptual Captions 家族包含两个常用版本Conceptual Captions 3MCC3M约 330 万张带描述的图片。与 COCO 那种人工精挑细选的标注风格不同CC3M 的图片和原始描述直接来自网页——具体来说原始描述来源于网页图片的Alt-text HTML 属性。为了让这些嘈杂的网页文本变成可用标注其构建过程采用了一条自动化流水线对候选的图片/描述对进行抽取、过滤和变换最终目标是让描述在**干净度cleanliness、信息量informativeness、流畅度fluency和可学习性learnability**之间取得平衡。Conceptual Captions 12MCC12M1200 万条图像-文本对专门为视觉-语言预训练设计。它的数据采集流水线是 CC3M 那条流水线的放宽版本relaxed version——过滤条件更宽松因此样本量更大、多样性更高但也因此引入了更多噪声。值得强调的是正是这种从网络中大规模采集的特性使得 CC 系列成为图像-文本预训练image-text pre-training的理想语料它比人工标注数据集如 COCO Caption规模大一个量级且覆盖了远为多样的图像风格和文本表述。数据集对应任务在 LAVIS 中CC 系列主要服务于两类任务见原文档 Task 一节图像-语言预训练Image-language pre-training这是 CC12M 的主要设计目标也贯穿于 LAVIS 的 BLIP 等模型的预训练阶段。图像描述Image captioning以图像 → 文本描述为基本学习目标。图片下载自带脚本的工程细节官方数据放置与目录约定下载前需要先到 Google 的 Conceptual Captions 页面下载原始的 TSV 清单文件清单文件需与脚本放在同一目录具体放置要求记录在 DownloadConceptualCaptions/README.mdCC3M 的训练清单Train_GCC-training.tsv约 3,318,333 条记录CC12M 的训练清单cc12m.tsv其中每行以 Tab 分隔两列caption与url。注意 CC3M 与 CC12M 两列的顺序恰好相反见 download_data_cc3m.py 的open_tsv中names[caption, url]与 download_data_cc12m.py 的names[url, caption]脚本内部已做适配按文档操作即可。下载命令原文档给出的标准下载命令如下CC3Mcd lavis/datasets/download_scripts/DownloadConceptualCaptions python download_data_cc3m.pyCC12Mcd lavis/datasets/download_scripts/DownloadConceptualCaptions python download_data_cc12m.py重要警告URL 时效性原文档明确提示该数据集通过请求 URL 逐张下载图片由于 URL 会随时间失效最终下载到的数据集必然是部分缺失的。这一点也得到仓库 README 的印证——README 提到验证集上大约8% 的图片已经消失且不少请求会返回网页而非图片需要后续清理见 DownloadConceptualCaptions/README.md。下载脚本的核心工程实现结合源码 download_data_cc3m.py 与 download_data_cc12m.py可以提炼出以下几点值得注意的实现细节1. 多进程 分块 断点续传两套脚本共享同一套df_multiprocess逻辑把 DataFrame 按images_per_part 100条一组切成若干 chunk交给multiprocessing.Pool并行下载CC3M 默认num_processes 32CC12M 默认num_processes 96。每个 chunk 的处理结果会被持久化到一个shelve临时文件命名形如cc3m_download_image_100_results.tmp中。重启脚本时会先扫描已完成的 chunk 并跳过从而实现断点续传README 中明确写到 You can stop and resume。需要注意修改images_per_part会重置进度因为续传索引依赖 chunk 编号。2. 伪装爬虫请求头下载时设置了User-Agent: Googlebot-Image/1.0与X-Forwarded-For头模拟搜索引擎图片爬虫以减少被站点拒绝的概率。README 也提示部分请求被站点拒绝可能与本请求头设置有关调整 User-Agent 有可能修复部分失败。3. 统一缩放与文件名去重下载到的图片会经resize_img用torchvision.transforms.functional.resize统一缩放至resize_size 384并转为 RGB文件名由行号 URL 的 CRC32 哈希拼接而成_file_name函数保证同名 URL 不会重复下载。README 提醒旧版脚本曾使用不同命名方案如果基于旧版本续传可能出现重复文件。4. 存储位置由配置驱动脚本并不把图片硬编码存到固定目录而是读取数据集配置config_path get_abs_path(configs/datasets/conceptual_caption/defaults_3m.yaml) storage_dir OmegaConf.load(config_path).datasets.conceptual_caption_3m.build_info.images.storage storage_dir Path(get_cache_path(storage_dir))也就是说图片最终落在 LAVIS 缓存目录下的conceptual_caption/imagesCC3M或conceptual_caption/images_12mCC12M。这保证了下游ImageTextPairDataset能按同一套缓存路径找到图片。5. 下载报告全部下载完成后脚本会把每条记录的状态HTTP 状态码、mimetype、文件大小、最终文件路径等写入downloaded_cc3m_report.tsv.gz/downloaded_cc12m_report.tsv.gz。这个报告文件正是下一步生成标注的输入。下载耗时与磁盘空间根据 DownloadConceptualCaptions/README.md 的说明训练数据完整下载大约需要一到两天期间需持续关注磁盘空间数百万张 384 分辨率 JPEG 的体量相当可观。建议在带宽充足、磁盘充裕的环境执行并可利用断点续传特性分段完成。生成标注Notebook 中的三步流水线下载完成后需要把下载报告 原始 TSV加工成 LAVIS 训练直接读取的 JSON 标注文件。原文档给出的方式是运行仓库内的 NotebookCC3Mlavis/datasets/download_scripts/DownloadConceptualCaptions/create_annotation_3m.ipynbCC12Mlavis/datasets/download_scripts/DownloadConceptualCaptions/create_annotation_12m.ipynb以 create_annotation_3m.ipynb 为例其核心步骤可以概括为第一步读取下载报告cc3m pd.read_csv( downloaded_cc3m_report.tsv.gz, compressiongzip, sep\t, names[caption, path, dataset, mimetype, size, status, url], )报告中的每一行对应一次下载尝试字段包括 caption、图片绝对路径、数据集名、mimetype、文件大小、HTTP 状态码与原始 URL。第二步过滤出真正存在的图片对报告中的path去重后逐条os.path.exists检查只保留本地确实存在的文件组装成[{image: 绝对路径, caption: 描述文本}, ...]形式的记录列表。Notebook 的输出显示原始约 331 万条记录经过去重与存在性过滤后实际得到约 275.9 万条有效记录——这也再次印证了下载必然是部分的这一警告。第三步按配置写回 JSON 标注从配置中读取标注文件的目标路径若不存在则把有效记录写入 JSONconfig_path get_abs_path(configs/datasets/conceptual_caption/defaults_3m.yaml) ann_path OmegaConf.load(config_path).datasets.conceptual_caption_3m.build_info.annotations.train.storage[0] ann_path get_cache_path(ann_path) if os.path.exists(ann_path): print({} already exists.format(ann_path)) else: with open(ann_path, w) as f: f.write(json.dumps(valid_records))这里读取的正是配置文件中annotations.train.storage声明的conceptual_caption/annotations/cc3m.json即 LAVIS 缓存目录下的conceptual_caption/annotations/cc3m.json。CC12M 对应的则是cc12m.json。数据集构建器与 LAVIS 配置接入注册的四个 Builder图片和标注就位后LAVIS 通过数据集构建器Builder把数据接入训练管线。在 image_text_pair_builder.py 中注册了四个与 CC 相关的构建器Builder 名称数据集类配置文件conceptual_caption_3mImageTextPairDatasetdefaults_3m.yamlconceptual_caption_3m_instructImageTextPairInstructDatasetdefaults_3m_instruct.yamlconceptual_caption_12mImageTextPairDatasetdefaults_12m.yamlconceptual_caption_12m_instructImageTextPairInstructDatasetdefaults_12m_instruct.yaml其中*_instruct变体用于指令微调instruct-tuning场景ImageTextPairInstructDataset在__getitem__中把文本描述同时作为text_output而text_input置为空字符串交给blip_instruction文本处理器生成指令式输入见 image_text_pair_datasets.py。基础配置详解非 instruct 版以 defaults_3m.yaml 为例配置结构如下datasets: conceptual_caption_3m: # data_dir: ${env.data_dir}/datasets data_type: images # [images|videos|features] build_info: # Be careful not to append minus sign (-) before split to avoid itemizing annotations: train: url: - /export/home/workspace/datasets/cc3m.json storage: - conceptual_caption/annotations/cc3m.json images: storage: conceptual_caption/images各字段含义data_type: images声明该数据集为图片模态可选值为 images / videos / features。build_info.annotations.train.url标注文件的来源路径。默认指向本机路径/export/home/workspace/datasets/cc3m.json实际使用时需要替换为你生成标注 JSON 的位置也可替换为 HTTP URL。build_info.annotations.train.storage标注文件在 LAVIS 缓存目录中的相对存放位置conceptual_caption/annotations/cc3m.json。build_info.images.storage图片目录在缓存目录中的相对路径conceptual_caption/images与下载脚本写入的目录一一对应。CC12M 的 defaults_12m.yaml 结构完全一致只是图片目录为conceptual_caption/images_12m。配置中注释提示不要在 split 名称train前加负号-否则会被解析器当作 list 展开导致字段结构错误。instruct 变体的处理器配置指令微调版本如 defaults_3m_instruct.yaml在基础配置上增加了视觉与文本处理器声明vis_processor: train: name: clip_image_train image_size: 224 eval: name: clip_image_eval image_size: 224 text_processor: train: name: blip_instruction task: caption modality: image eval: name: blip_caption视觉处理器采用 CLIP 风格训练用clip_image_train、评估用clip_image_eval输入尺寸统一为 224×224。文本处理器训练阶段使用blip_instruction并声明任务为caption、模态为image用于生成指令模板评估阶段退化为普通blip_caption。注意12M 的 instruct 配置 defaults_12m_instruct.yaml 中标注url直接指向了一个公开的 HTTP 地址https://storage.googleapis.com/.../x_instructblip_clean.json这说明标注文件既可以是本地路径也可以是远程 URL。数据集读取逻辑ImageTextPairDataset四个 Builder 最终都把训练样本交给 ImageTextPairDataset 读取其__getitem__逻辑为ann self.annotation[index] image_path os.path.join(self.vis_root, ann[image]) try: image Image.open(image_path).convert(RGB) except: return None image self.vis_processor(image) caption self.text_processor(ann[caption]) return {image: image, text_input: caption}要点图片路径 vis_root即配置中build_info.images.storage对应的缓存目录 标注 JSON 中记录的image字段。因此标注里的路径必须与图片实际存放位置一致这也是为什么生成标注的 Notebook 要直接用os.path.exists校验绝对路径。打不开的图片会被跳过返回None由 dataloader 的 collate 逻辑处理进一步容忍了 URL 失效带来的缺失。每个样本最终产出image张量与text_input文本两个字段直接对接预训练任务。在 BLIP 预训练中实际使用 CC3M/CC12MCC 系列在 LAVIS 中最典型的落地场景是 BLIP 的预训练。仓库中 BLIP 预训练任务的完整配置位于 pretrain_14m.yaml其中同时启用了coco_caption、conceptual_caption_3m、conceptual_caption_12m、vg_caption、sbu_caption五个数据集model: arch: blip_pretrain model_type: base load_pretrained: False queue_size: 57600 alpha: 0.4 datasets: coco_caption: vis_processor: train: name: blip_image_train image_size: 224 text_processor: train: name: blip_caption conceptual_caption_3m: # name of the dataset builder vis_processor: train: name: blip_image_train image_size: 224 text_processor: train: name: blip_caption conceptual_caption_12m: vis_processor: train: name: blip_image_train image_size: 224 text_processor: train: name: blip_caption # ... vg_caption, sbu_caption 略 run: task: image_text_pretrain init_lr: 3e-4 min_lr: 1e-6 warmup_lr: 1e-6 lr_decay_rate: 0.9 weight_decay: 0.05 max_epoch: 20 batch_size_train: 75 batch_size_eval: 75 num_workers: 4 warmup_steps: 3000 seed: 42 output_dir: output/BLIP/Pretrain amp: False evaluate: False train_splits: [train] device: cuda world_size: 1 dist_url: env:// distributed: True从中可以读出 CC 系列在预训练体系中的角色datasets一节以 Builder 名如conceptual_caption_3m为 key直接引用 defaults_3m.yaml 等默认配置预训练任务配置文件只需覆盖vis_processor/text_processor即可BLIP 预训练统一使用blip_image_train224 与blip_caption而非 instruct 变体中的 CLIP/指令处理器。任务被声明为image_text_pretrain对应 LAVIS 的 image_text_pretrain.py 任务实现BLIP 预训练使用 momentum queuequeue_size: 57600与 Image-Text Contrastive 损失的权衡系数alpha: 0.4。多卡启动方式参见 pretrain.shpython -m torch.distributed.run --nproc_per_node16 train.py --cfg-path lavis/projects/blip/train/pretrain_14m.yaml在实际运行前请务必确保三件事① CC3M/CC12M 的图片已下载到缓存目录conceptual_caption/images、conceptual_caption/images_12m② 标注 JSONcc3m.json/cc12m.json已按 Notebook 流程生成并落到缓存目录conceptual_caption/annotations/③ 各数据集默认配置中的url已改为实际标注文件路径可参考 12M instruct 配置直接使用 HTTP URL 亦可。常见问题与工程建议综合原文档警告、下载脚本与 Notebook 输出汇总几条实操经验下载一定是不完整的URL 时效性是 CC 系列的固有问题不要期待 100% 成功率。据 README 与 Notebook 输出训练集实际可用记录约在 270 万条级别约 83%。训练时容忍部分缺失即可LAVIS 的ImageTextPairDataset也会跳过无法打开的图片。善用断点续传下载中途可随时中断重启shelve临时文件会记录已完成 chunk脚本自动跳过。注意不要改动images_per_part100否则续传索引失效如果是从旧版脚本不同文件命名方案续传会产生重复文件建议清理后重下。预留充足时间与磁盘完整下载约需一到两天注意监控磁盘脚本默认并发较高CC12M 为 96 进程可依据机器配置调低num_processes。标注与图片路径必须一致Notebook 生成 JSON 时以绝对路径写入image字段读取时由vis_root拼接若迁移缓存目录或更换机器需重新生成标注或保证路径一致。区分普通与 instruct 两套配置预训练用非 instruct 配置ImageTextPairDatasetblip_caption指令微调用*_instruct配置ImageTextPairInstructDatasetblip_instruction/CLIP 处理器两者文本处理逻辑不同混用会导致样本结构不符合预期。参考数据集卡文档dataset_card/conceptual_captions.md本文主线来源下载脚本 download_data_cc3m.py、download_data_cc12m.py下载说明DownloadConceptualCaptions/README.md标注生成 Notebookcreate_annotation_3m.ipynb、create_annotation_12m.ipynb数据集构建器image_text_pair_builder.py数据集读取实现image_text_pair_datasets.py数据集配置defaults_3m.yaml、defaults_12m.yaml、defaults_3m_instruct.yaml、defaults_12m_instruct.yaml预训练配置与启动脚本pretrain_14m.yaml、pretrain.sh相关研究Edwin G. Ng, Bo Pang, Piyush Sharma and Radu Soricut, Understanding Guided Image Captioning Performance Across Domains, arXiv:2012.02339数据集卡引文【免费下载链接】LAVISLAVIS - A One-stop Library for Language-Vision Intelligence项目地址: https://gitcode.com/gh_mirrors/la/LAVIS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表