多模态人工智能深度学习NLP计算机视觉预训练【免费下载链接】mmfA modular framework for vision language multimodal research from Facebook AI Research (FAIR)项目地址https://gitcode.com/gh_mirrors/mm/mmf点击查看免费下载导读VinVL 是微软提出的视觉-语言预训练模型其核心贡献在于重新审视了**图像区域特征image region features**在视觉-语言VL模型中的关键作用——通过更强的目标检测表征显著提升下游 VL 任务表现。MMF 仓库完整集成了 VinVL 的 PyTorch 实现源自 microsoft/Oscar 代码库并提供了从特征提取、数据集包装到训练/微调的整套工具链。阅读本文后你将掌握VinVL 在 MMF 中的模型结构与数据流原理、如何用 MMF 脚本为任意图像目录提取 VinVL 特征、如何借助vinvl数据集包装器在任意数据集上做微调与预训练以及两条可直接运行的训练命令。一、VinVL 是什么模型背景与论文定位VinVL论文标题VinVL: Revisiting Visual Representations in Vision-Language ModelsZhang, P. 等人CVPR 2021的核心理念是在视觉-语言模型中视觉表征的质量比模型架构本身更能决定最终性能。VinVL 使用基于 Visual GenomeVG目标检测标签训练出的属性感知检测器AttrRCNN来提取图像区域特征再将这些特征与 BERT 文本编码融合完成预训练与下游微调。在 MMF 中VinVL 模型的 PyTorch 实现最初发布在 microsoft/Oscar 仓库随后被移植进 MMF作为独立的vinvl模型注册。使用时请引用以下两篇论文Zhang, P., Li, X., Hu, X., Yang, J., Zhang, L., Wang, L., ... Gao, J. (2021).VinVL: Revisiting visual representations in vision-language models. In Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (pp. 5579-5588).Li, X., Yin, X., Li, C., Hu, X., Zhang, P., Zhang, L., Wang, L., Hu, H., Dong, L., Wei, F., Choi, Y., Gao, J. (2020).Oscar: Object-Semantics Aligned Pre-training for Vision-Language Tasks. ECCV 2020.对应的 BibTeX 条目也完整保留在仓库文档 website/docs/projects/vinvl.md 中可直接复制引用。二、安装环境VinVL 模型的运行依赖 MMF 框架本身及其 BERT/Transformer 相关组件。安装方式与 MMF 通用安装流程一致请参考仓库内的安装指南 website/docs/getting_started/installation.mdx 完成环境配置。需要特别注意的是特征提取脚本依赖微软的scene_graph_benchmarkAttrRCNN代码库需要单独克隆并安装详见下文特征提取一节模型代码对transformers库做了兼容处理优先尝试transformers3.modeling_bert失败则回退到transformers.modeling_bert见 mmf/models/vinvl.py请确保安装的 transformers 版本满足要求。三、核心特性用更好的视觉表征喂饱 VL 模型VinVL 的主要贡献在于证明了图像区域特征对 VL 模型性能的巨大影响。在 MMF 中使用 VinVL 特征有两条路径3.1 路径一下载预提取特征并重映射如果目标数据集是热门数据集如 COCO、VQA2可以直接下载官方预提取的 VinVL 特征然后将它们重映射remapping到 MMF 数据集格式。这种方式的优点是不需要本地跑检测模型开箱即用。3.2 路径二用 MMF 脚本并行提取特征对于任意图像目录可以运行 MMF 自带的特征提取脚本 tools/scripts/features/extract_features_vinvl.pypython mmf/tools/scripts/features/extract_features_vinvl.py \ --model_name X-152-C4 \ --image_dir /path/to/image/directory \ --output_folder /path/to/output该脚本基于 scene-graph-benchmark 仓库的tools/demo/demo_image.py改造而来对应 commit8e14944oscar/vinvl 仓库版本4788a74其核心流程如下自动下载检测模型与配置脚本内置了X-152-C4模型的下载地址见 tools/scripts/features/extract_features_vinvl.py也可通过--model_file/--config_file指定本地权重构建 AttrRCNN 检测模型通过AttrRCNN(cfg)加载权重开启MODEL.ATTRIBUTE_ON、TEST.OUTPUT_FEATURE、TEST.OUTPUT_RELATION_FEATURE等配置输出 region 的类别、置信度、box 特征与关系特征见 tools/scripts/features/extract_features_vinvl.py批量推理将--batch_size张图像组成 image list 送入模型默认每张图提取--num_features100个区域特征特征归一化与落盘_norm_box将 bbox 归一化到 [0,1] 区间并拼接宽高差随后将box_features与归一化 bbox 拼接torch.cat([box_features, bbox], dim1)见 tools/scripts/features/extract_features_vinvl.py最终每个区域特征维度为20542048 视觉特征 6 维 bbox 信息这正是 VinVL 模型默认img_feature_dim2054的来源。每个图像输出name.npy特征与name_info.npy图像信息含 labels、attr_labels、bbox 等字段。脚本常用参数参数默认值说明--model_nameX-152-C4使用的检测模型--model_file/--config_fileNone指定本地权重与配置覆盖 model_name--image_dir必填图像目录或单个图像文件--output_folder./output特征输出目录--batch_size2推理批大小--num_features100每张图提取的区域特征数--start_index/--end_index0/None支持分片处理--exclude_list./list排除文件列表每行一个图像名--background关闭是否输出背景类预测提取完成后将 mmf/configs/datasets/ 下对应数据集的defaults.yaml中features路径指向新特征目录即可。例如 VQA2 的配置位于 mmf/configs/datasets/vqa2/defaults.yaml把features.train/val/test指向 VinVL 特征即可。更详细的分步教程可参考仓库文档 website/docs/tutorials/image_feature_extraction_vinvl.md。四、VinVL 数据集为任意数据集注入标签与属性信号4.1 设计动机VinVL 在微调finetuning和预训练pretraining阶段需要通用数据集不支持的独特输入目标检测标签文本、属性文本以及用于 3-way 对比损失的随机负样本。MMF 的解法是引入一个名为vinvl的数据集包装器——它本身不包含新图像或新文本而是在已有数据集称为 base dataset之上做样本增强。例如base dataset 是 VQA2普通情况下返回样本{image, text}而 VinVL 数据集请求一个样本时会返回{image, text, rand_caption, rand_label}其中text text labels原始问题文本拼接上该图的目标检测标签/属性文本rand_caption从数据集中随机抽取的另一个样本的文本用作对比学习的负样本候选rand_label随机样本的目标检测标签文本。4.2 使用前提与假设VinVL 数据集对 base dataset 和配置有以下硬性假设见 mmf/datasets/builders/vinvl/dataset.pybase dataset 返回的样本中包含字符串键text数据集配置中存在label_map的 JSON 文件路径该 JSON 包含idx_to_attribute与idx_to_label两个映射VinVL OD 使用 VG 标签映射文件为VG-SGG-dicts-vgoi6-clipped.json可从 VinVL model zoo 获取配置文件中的示例路径见 mmf/configs/datasets/vinvl/defaults.yamlfeatures_db指向由 VinVL 特征提取脚本生成的特征。4.3 底层实现Builder 与 Dataset 的协作模式从源码结构看vinvl的实现采用了一种新设计模式来解决处理器无法访问数据库的问题VinVLBuildermmf/datasets/builders/vinvl/builder.pyload()方法会实例化两个数据集——先根据base_dataset_name从 registry 获取 base dataset 的 builder 并构建 base dataset 实例然后将 VinVL 配置中的text_processorvinvl_text_tokenizer与label_map写回 base 配置最后调用vinvl_dataset.set_base_dataset(base_dataset)完成包装VinVLDatasetmmf/datasets/builders/vinvl/dataset.pyload_item(idx)先让 base dataset 加载原始样本再构造text_processor的输入参数{text, text_b, random_captions, random_labels}其中text_b由get_label_str()生成——它读取样本image_info_0中的labels与attr_labels字段通过idx_to_label和idx_to_attribute映射拼成标签字符串见 mmf/datasets/builders/vinvl/dataset.py。注意add_tags标志在测试集test下为 False即测试阶段不注入标签与随机负样本避免评测被污染。五、配置文件全解从数据集到模型5.1 数据集配置MMF 为 VinVL 提供了开箱即用的数据集配置 mmf/configs/datasets/vinvl/defaults.yaml它通过includes引入 VQA2 的默认配置作为 base datasetincludes: - ../vqa2/defaults.yaml dataset_config: vinvl: base_dataset_name: vqa2 label_map: /private/home/ryanjiang/winoground/pretrained_models/VG-SGG-dicts-vgoi6-clipped.json base_dataset: ${dataset_config.vqa2} processors: text_processor: type: vinvl_text_tokenizer params: mask_probability: 0关键字段字段说明base_dataset_namebase dataset 的注册名用于在 registry 中查找其 builderlabel_map含idx_to_attribute/idx_to_label的 JSON 路径base_datasetbase dataset 的完整 YAML 配置这里用${dataset_config.vqa2}引用processors.text_processor必须为vinvl_text_tokenizer其参数继承自 MaskedTokenProcessor 的配置模式5.2 文本处理器VinVLTextTokenizervinvl_text_tokenizer是 VinVL 专用的文本处理器注册名为vinvl_text_tokenizer见 mmf/datasets/processors/bert_processors.py它在 MaskedTokenProcessor 的基础上增加了双句拼接通过get_pair_text_tokens将text问题与text_b标签文本以[CLS] A [SEP] B [SEP]形式拼接见 mmf/datasets/processors/bert_processors.pyMLM 掩码mask_probability控制随机[MASK]替换概率输出input_ids_masked与lm_label_ids供 MLM 头使用对比学习输入当corrupt_probability 0时从random_captions/random_labels中按corrupt_caption_probability构造损坏样本输出input_ids_corrupt、input_mask_corrupt、segment_ids_corrupt与contrastive_label3 分类0匹配1损坏文本2损坏标签见 mmf/datasets/processors/bert_processors.py。若不使用对比损失将corrupt_probability设为 0 即可。常用参数from_pretrained默认bert-base-uncased、max_seq_length默认 70、mask_probability默认 0、corrupt_probability默认 0。5.3 模型配置模型默认配置位于 mmf/configs/models/vinvl/defaults.yamlmodel_config: vinvl: heads: test: type: mlp freeze: false lr_multiplier: 1.0 in_dim: 768 hidden_size: 1536 num_labels: 3129 pooler_name: bert_pooler bert_model_name: bert-base-uncased img_feature_dim: 2054 img_feature_type: frcnn use_img_layernorm: 1 img_layer_norm_eps: 1e-12 max_img_seq_len: 70与源码中VinVL.Config数据类mmf/models/vinvl.py一一对应配置项默认值源码含义bert_model_namebert-base-uncased基础 BERT 权重用于初始化文本侧与预训练img_feature_dim2054图像特征维度2048 视觉特征 6 维 bboximg_feature_typefrcnn特征类型标识use_img_layernormTrue图像嵌入投影后是否加 LayerNormimg_layer_norm_eps1e-12图像 LayerNorm 的 epsilonmax_img_seq_len70最大图像区域序列长度do_pretrainingFalse切换分类微调 / 预训练两种构建路径5.4 完整训练配置示例VQA2 的完整训练配置在 projects/vinvl/configs/vqa2/defaults.yaml要点model_config: vinvl: do_pretraining: false heads: vqa2: type: mlp num_labels: 3129 dataset_config: vinvl: base_dataset_name: vqa2 processors: text_processor: type: vinvl_text_tokenizer params: from_pretrained: bert-base-uncased corrupt_probability: 0 tokenizer_config: type: bert-base-uncased params: do_lower_case: true mask_probability: 0 training: clip_gradients: false lr_scheduler: true max_updates: 44000 checkpoint_interval: 4000 evaluation_interval: 4000 batch_size: 256 # 32 per GPU * 8 GPU find_unused_parameters: false log_interval: 1000 optimizer: type: adam_w params: lr: 1e-4 eps: 1e-8 weight_decay: 1e-2 scheduler: type: warmup_cosine params: num_warmup_steps: 4400 num_training_steps: ${training.max_updates} evaluation: metrics: - type: vqa_accuracy datasets: - vqa2要点解读do_pretraining: false表示走分类微调路径heads.vqa2配置 MLP 分类头num_labels: 3129对应 VQA2 的答案类别数corrupt_probability: 0表示微调阶段不启用对比学习负采样训练采用 AdamW warmup cosine 调度共 44000 步更新batch size 2568 卡 × 32评估指标为 VQA 准确率。六、训练与微调实战6.1 从零训练完成特征提取并重定向数据集配置后在 VQA2.0 上从头训练 VinVLmmf_run configprojects/vinvl/configs/vqa2/defaults.yaml run_typetrain datasetvinvl modelvinvl6.2 微调预训练模型从 MMF 模型动物园加载预训练权重并微调mmf_run configprojects/vinvl/configs/vqa2/defaults.yaml run_typetrain datasetvinvl modelvinvl checkpoint.resume_zoovinvl.pretrainedcheckpoint.resume_zoovinvl.pretrained会从模型动物园 mmf/configs/zoo/models.yaml 拉取vinvl.pretrained资源版本1.0_2020_11_29。动物园中还提供了vinvl.finetuned.coco_irCOCO 图像检索微调权重可作为对照。七、源码级原理模型如何消费这些特征7.1 VinVLBaseBERT 编码器的视觉化包装VinVLBasemmf/models/vinvl.py是 VinVL 的核心骨干本质是对BertEncoder的薄包装额外处理图像特征输入图像嵌入投影nn.Linear(img_dim, hidden_size)将 2054 维区域特征投影到 BERT hidden size768可选叠加 LayerNorm 与 Dropoutuse_img_layernorm序列拼接embedding_output torch.cat((text_embedding_output, img_embedding_output), 1)将文本与图像特征拼接成一个序列送入 BERT encoder——这正是文本 图像区域联合建模的关键一步掩码扩展_get_attention_maskmmf/models/vinvl.py将文本 padding mask 与图像有效区域 mask由image_info.max_features生成拼接保证注意力只作用在真实 token 与有效区域上。从测试用例 tests/models/test_vinvl.py 可以看到当img_feature_dim2054、batch 8 时输出张量形状为[8, 95, 768]95 25 文本 token 70 图像区域。7.2 双模式分类微调与预训练VinVL模型类mmf/models/vinvl.py根据do_pretraining构建两种子模型VinVLForClassificationVinVLBase MLP 分类头交叉熵损失forward输出scores与losses.ceVinVLForPretrainingVinVLBaseMLM 头ThreeWayContrastive 头。MLM 头负责掩码语言建模对文本 token 计算 masked LM loss图像位置标签置 -1ThreeWayContrastive 头做 3-way 对比分类——0 表示图文匹配、1 表示文本被损坏、2 表示标签被损坏见 mmf/models/vinvl.py。预训练前向需要同时提供input_ids_maskedMLM 用与input_ids_corrupt对比用。测试 tests/models/test_vinvl.py 验证了预训练前向会同时产出masked_lm_loss与three_way_contrastive_loss。7.3 一条完整的推荐链路综合上述内容在 MMF 中使用 VinVL 的推荐流程为用 tools/scripts/features/extract_features_vinvl.py 为目标图像集提取 2054 维区域特征修改 mmf/configs/datasets/ 下对应数据集的defaults.yaml将features指向新特征目录以vinvl为 dataset 名底层由 mmf/datasets/builders/vinvl/builder.py 完成对 base dataset 的包装配置label_map与vinvl_text_tokenizer运行mmf_run进行从头训练或checkpoint.resume_zoovinvl.pretrained微调。八、测试与验证仓库为 VinVL 提供了较完整的单元测试可作为验证环境与理解行为的参考tests/models/test_vinvl.py覆盖VinVLBase前向输出形状、分类前向含ce损失、预训练前向含masked_lm_loss与three_way_contrastive_loss、以及通过配置构建VinVL模型的全流程tests/datasets/test_bert_processors.py覆盖vinvl_text_tokenizer的 tokenization、MLM 掩码输出、corrupt_probability0时无 corrupt 字段等行为。这些测试同时印证了前文对配置字段、输入张量结构与损失组成的描述读者可据此快速搭建自己的 VinVL 实验。赞分享多模态人工智能深度学习NLP计算机视觉预训练【免费下载链接】mmfA modular framework for vision language multimodal research from Facebook AI Research (FAIR)项目地址https://gitcode.com/gh_mirrors/mm/mmf点击查看免费下载相关推荐为什么OCR总是认错字uvdoc-npu昇腾NPU文档图像矫正模型完全入门指南为什么OCR总是认错字uvdoc npu昇腾NPU文档图像矫正模型完全入门指南 uvdoc npu 是一个可以直接在华为昇腾 NPU 上运行的 文档图像矫正模人工智能计算机视觉图像处理OCRAscendMMF 中的 ViLT 模型无卷积与区域监督的视觉语言 Transformer 训练与微调实战MMF 中的 ViLT 模型无卷积与区域监督的视觉语言 Transformer 训练与微调实战 ViLTVision and Language Transf多模态人工智能深度学习NLP计算机视觉预训练Windows Precision Touchpad 驱动终极指南让苹果触控板在 Windows 上原生级工作Windows Precision Touchpad 驱动终极指南让苹果触控板在 Windows 上原生级工作 你是否曾在 Windows 系统中使用苹果 M驱动开发系统底层硬件开发上一篇揭秘Feather图标库核心团队分享开源项目的愿景与未来规划下一篇REA 中的 JavaScript/Electron 应用工件分析从 ASAR 静态重建到版本与导出形状对比创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考