MMF 框架中的 M4C 模型:基于 Pointer-Augmented Multimodal Transformers 的 TextVQA 迭代答案预测实战指南
多模态人工智能深度学习NLP计算机视觉预训练【免费下载链接】mmfA modular framework for vision language multimodal research from Facebook AI Research (FAIR)项目地址https://gitcode.com/gh_mirrors/mm/mmf点击查看免费下载本篇技术指南以 MMFFacebook AI Research 开源的视觉与语言多模态研究框架仓库中 M4C 项目文档 为骨架系统讲解 M4CIterative Answer Prediction with Pointer-Augmented Multimodal Transformers模型在 TextVQA、ST-VQA、OCR-VQA 三个数据集上的数据准备、预训练模型使用、训练与评估命令并结合 mmf/models/m4c.py 源码剖析其固定词表分类 OCR 指针复制的迭代解码原理。读完本文你将掌握 M4C 在 MMF 中的完整使用流程从安装到 EvalAI 预测文件生成并理解其底层多模态 Transformer 与指针网络的关键实现。一、M4C 模型是什么M4C 出自论文Iterative Answer Prediction with Pointer-Augmented Multimodal Transformers for TextVQAR. Hu, A. Singh, T. Darrell, M. Rohrbach发表于 CVPR 2020论文 BibTeX 引用如下inproceedings{hu2020iterative, title{Iterative Answer Prediction with Pointer-Augmented Multimodal Transformers for TextVQA}, author{Hu, Ronghang and Singh, Amanpreet and Darrell, Trevor and Rohrbach, Marcus}, booktitle{Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition}, year{2020} }在 MMF 仓库中M4C 通过 mmf/models/m4c.py 中的registry.register_model(m4c)注册为名为m4c的模型模型类为M4C(BaseModel)其默认配置路径为configs/models/m4c/defaults.yaml。与早期只做固定词表分类的 VQA 模型如 LoRRA不同M4C 的核心思路是用**多模态 TransformerMMT**同时建模问题文本、图像物体区域Faster R-CNN 特征和 OCR 文本 token用**指针网络OCR Pointer Network**在迭代解码的每一步动态地复制某个 OCR token 作为答案的一部分从而可以回答出词表之外的、图片中实际存在的文字例如招牌、标签、路牌上的文字输出分数由固定答案词表分类分数与动态 OCR 复制分数拼接而成见 mmf/models/m4c.py 的_forward_output。二、安装与依赖M4C 随 MMF 一起安装。按照 MMF 的 安装指南 安装 MMF 即可安装过程会一并解决 M4C 的所有依赖transformers用于文本 BERT 编码与多模态 Transformer 的底层实现TextBert、MMT均继承自BertPreTrainedModel见 mmf/models/m4c.pyeditdistance用于 ST-VQA 的 ANLS 指标计算见 mmf/utils/m4c_evaluators.py 中的STVQAANLSEvaluatorPHOC 特征的 Python 接口mmf/utils/phoc/下的 C 扩展会在安装时编译用于生成 OCR token 的 PHOCPyramidal Histogram of Characters特征。三、数据说明TextVQA / ST-VQA / OCR-VQA本仓库支持 M4C 在三个数据集上的训练与评估TextVQA、ST-VQA和OCR-VQA。运行命令时数据集与相应依赖会通过 MMF 的 zoo 机制自动下载对应dataset_config.dataset.zoo_requirements配置见下文配置文件小节。3.1 ST-VQA 的图片质量问题官方发现下载的 ST-VQA 数据中有约1/3的图片来自 COCO-Text且这些图片不知何故被缩放为 256×256导致图像质量下降、宽高比失真。因此官方在发布物体与 OCR 特征时用 COCO-Text 中的原始版本图片替换了这些被缩放的图片再输入到物体检测与 OCR 系统中提取特征。3.2 imdb 格式说明官方发布的 imdb 中包含OCR 识别结果OCR tokens归一化边界框范围在[0,1]内每个检测物体在obj_normalized_boxes键下每个 OCR token 在ocr_normalized_boxes键下。另外ST-VQA 与 OCR-VQA 的 imdb 中答案被平铺duplicated为每题 10 个答案以与 TextVQA imdb 的格式保持一致TextVQA 每题天然有 10 个标注答案评测时也按 10 个答案计算 soft score见 mmf/utils/m4c_evaluators.py。3.3 TextVQA 的 OCR 版本TextVQA 下载的文件同时包含两类 imdbRosetta-en OCR性能更好本文预训练模型表中的默认选择Rosetta-ml OCR与此前 LoRRA 模型使用的 OCR 结果一致。请下载与 OCR 版本对应的 OCR 特征文件textvqa/ocr_enRosetta-en或textvqa/ocr_mlRosetta-ml。3.4 特征提取脚本物体 Faster R-CNN 特征由 tools/scripts/features/extract_features_vmb.py 提取VMB vqa-maskrcnn-benchmarkOCR Faster R-CNN 特征由 projects/m4c/scripts/extract_ocr_frcn_feature.py 提取。该脚本依赖vqa-maskrcnn-benchmark可从 ronghanghu 的 fork 安装接收--detection_cfg、--detection_model、--imdb_file、--image_dir、--save_dir参数对每个 imdb 条目按ocr_normalized_boxes还原出像素坐标的 OCR 框送入检测模型得到每个 OCR 框的 2048 维 fc6 特征并保存_info.npy含 OCR 框与 token。四、预训练模型官方在三个数据集上发布了以下预训练 M4C 模型。配置文件的基准目录是projects/m4c/configs/数据集配置文件位于projects/m4c/configs预训练模型 Key指标备注TextVQAtextvqatextvqa/joint_with_stvqa.yaml文档中写作join_with_stvqa.yaml仓库实际文件名为joint_with_stvqa.yamlm4c.textvqa.with_stvqaval accuracy - 40.55%test accuracy - 40.46%Rosetta-en OCR以 ST-VQA 为额外数据官方最佳模型TextVQAtextvqatextvqa/defaults.yamlm4c.textvqa.aloneval accuracy - 39.40%test accuracy - 39.01%Rosetta-en OCRTextVQAtextvqatextvqa/ocr_ml.yamlm4c.textvqa.ocr_mlval accuracy - 37.06%Rosetta-ml OCRST-VQAstvqastvqa/defaults.yamlm4c.stvqa.defaultsval ANLS - 0.472accuracy - 38.05%test ANLS - 0.462Rosetta-en OCROCR-VQAocrvqaocrvqa/defaults.yamlm4c.ocrvqa.defaultsval accuracy - 63.52%test accuracy - 63.87%Rosetta-en OCR这些模型在 MMF 的模型 zoo 中都有对应记录见 mmf/configs/zoo/models.yaml每个资源项都带版本号与 SHA-256 hashcode例如m4c.textvqa.with_stvqa的版本为1.0_2020_06_30。注意这些预训练模型都依赖detectron.vmb_weightsVMB Faster R-CNN 权重加载时会通过zoo_requirements自动补齐。五、训练与评估训练、评估流程与 MMF 通用流程一致参见 快速开始 的 Training 一节。mmf_run与mmf_predict是安装后由 setup.py 注册的两个命令行入口。5.1 在 TextVQA 训练集上训练mmf_run datasettextvqa \ modelm4c \ configprojects/m4c/configs/textvqa/defaults.yaml \ env.save_dir./save/m4c将datasettextvqa换成stvqa/ocrvqa、将config换成表 1 中对应的配置文件即可切换到其他数据集与配置env.save_dir可改成你偏好的任意保存路径。5.2 用预训练模型在本地验证集上评估以评估m4c.textvqa.with_stvqa为例mmf_run datasettextvqa \ modelm4c \ configprojects/m4c/configs/textvqa/defaults.yaml \ env.save_dir./save/m4c \ run_typeval \ checkpoint.resume_zoom4c.textvqa.with_stvqa同样可以按需替换dataset、config与checkpoint.resume_zoo。注意要评估你自己训练出的 checkpoint应改用checkpoint.resumeTrue且checkpoint.resume_bestTrue而不是checkpoint.resume_zoo...。更细粒度的 checkpoint 加载/恢复机制可参考 checkpointing 教程。5.3 为 TextVQA 测试集生成 EvalAI 预测文件mmf_predict datasettextvqa \ modelm4c \ configprojects/m4c/configs/textvqa/defaults.yaml \ env.save_dir./save/m4c \ run_typetest \ checkpoint.resume_zoom4c.textvqa.with_stvqa要在val 集上生成预测把run_typetest换成run_typeval要对自己训练的 checkpoint 生成预测同样把checkpoint.resume_zoo...换成checkpoint.resumeTrue且checkpoint.resume_bestTrue要为表 1 中其他 TextVQA 预训练模型生成预测替换config与checkpoint.resume_zoo即可。5.4 ST-VQA 联合训练配置官方最佳 TextVQA 模型m4c.textvqa.with_stvqa使用 projects/m4c/configs/textvqa/joint_with_stvqa.yaml 配置。它通过includes: - ./defaults.yaml继承 TextVQA 默认配置然后在zoo_requirements中追加stvqa.defaults与stvqa.ocr_en训练特征同时包含 TextVQA 与 ST-VQA 两套textvqa/defaults/features/open_images/detectron.lmdb,textvqa/ocr_en/features/ocr_en_frcn_features.lmdb与stvqa/defaults/features/detectron.lmdb,stvqa/ocr_en/features/ocr_en_frcn_features.lmdb训练标注同样拼接imdb_train_ocr_en.npy与imdb_subtrain.npy。textvqa/ocr_ml.yaml则把特征与标注整体切换到 Rosetta-ml 版本textvqa/ocr_ml/features/ocr_ml_frcn_features.lmdb与imdb_*_ocr_ml.npy。六、源码架构M4C 是如何工作的M4C 的build()方法将模型拆成五个组件依次构建mmf/models/m4c.py文本编码_build_txt_encodingTextBert3 层 BERT默认num_hidden_layers: 3可由text_bert_init_from_bert_base: true从bert-base-uncased初始化并挂入finetune_modules使用更小的学习率lr_scale_text_bert: 0.1。若其输出维度768与 MMT 的hidden_size不一致则插入一个线性投影层。物体编码_build_obj_encoding物体外观用finetune_faster_rcnn_fpn_fc7图像编码器把 2048 维 Faster R-CNN fc6 特征映射为 fc7物体位置用 4 维归一化 bbox 坐标。两者经线性层 LayerNorm 后相加再经 Dropout 得到obj_mmt_inmmf/models/m4c.py。OCR 编码_build_ocr_encoding每个 OCR token 的特征由四段拼接而成mmf/models/m4c.py300 维FastText词向量context_feature_0604 维PHOC特征context_feature_1由 mmf/datasets/processors/processors.py 的PhocProcessor调用mmf/utils/phoc生成2048 维OCR Faster R-CNN fc7外观特征image_feature_150 维 OCR order 向量LoRRA 遗留置零代码注释明确建议 TODO 移除。配置文件里的ocr.mmt_in_dim: 3002正是300 604 2048 50。另外可通过remove_ocr_fasttext / remove_ocr_phoc / remove_ocr_frcn / remove_ocr_semantics / remove_ocr_bbox五个开关做消融实验置零对应特征。多模态 Transformer_build_mmtMMT4 层 BERT encoder。其forward将txt_emb、obj_emb、ocr_emb、dec_emb上一步预测的嵌入拼接成长序列并使用类似prefix LM的注意力掩码编码区元素彼此可互相 attend解码区元素只能 causal 地 attend 自身及其之前的解码步mmf/models/m4c.py。输出层_build_outputOcrPtrNet查询来自 MMT 解码输出mmt_dec_output键来自mmt_ocr_output用点积缩放除以sqrt(query_key_size)加掩码后得到动态 OCR 分数mmf/models/m4c.py固定词表分类器ClassifierLayer输出维度为num_choices - classifier.ocr_max_num即从固定词表 最多 50 个 OCR 槽位的总空间中扣除 OCR 复制维度最终scores cat([fixed_scores, dynamic_ocr_scores], dim-1)mmf/models/m4c.py。6.1 迭代解码与教师强制_forward_mmt_and_outputmmf/models/m4c.py训练时从train_prev_inds取上一步预测索引由M4CAnswerProcessor在线采样一条答案解码序列见 mmf/datasets/processors/processors.py即教师强制teacher-forcing推理时先以BOS_IDX填充第 0 步然后贪心解码——重复前向 MMT → 计算分数 →argmax选出词表或 OCR 中得分最高者 → 写回prev_inds这一循环直到解码步数用尽max_copy_steps: 12。6.2 上一步预测的嵌入PrevPredEmbeddingsmmf/models/m4c.py把固定词表嵌入表 OCR 嵌入表拼接后用_batch_gather按prev_inds取出上一步预测的嵌入再加上位置嵌入与类型嵌入token_type_ids prev_inds.ge(ans_num)即 0 表示词表、1 表示 OCR最后 LayerNorm Dropout 得到解码嵌入。这里固定的最大解码长度为 100、类型数为 5。6.3 损失函数M4C 默认使用m4c_decoding_bce_with_mask损失注册于 mmf/modules/losses.py对scores与targets逐元素计算 BCEbinary_cross_entropy_with_logits再乘以train_loss_mask只对有效解码步施加损失最后除以 mask 和作为归一化。该 mask 与prev_inds一样由M4CAnswerProcessor在数据管线中生成。七、核心配置文件逐段解读7.1 模型配置 mmf/configs/models/m4c/defaults.yaml配置键默认值说明lr_scale_frcn0.1Faster R-CNN fc7 层的学习率缩放预训练部分用小学习率微调lr_scale_text_bert0.1文本 BERT 的学习率缩放lr_scale_mmt1.0多模态 Transformer 的学习率缩放不缩放text_bert_init_from_bert_basetrue是否从bert-base-uncased初始化文本编码text_bert.num_hidden_layers3文本 BERT 层数obj.mmt_in_dim2048物体外观特征维度obj.dropout_prob0.1物体编码 Dropoutocr.mmt_in_dim3002OCR 特征维度300 FastText 604 PHOC 2048 Faster R-CNN 50 遗留ocr.dropout_prob0.1OCR 编码 Dropoutmmt.hidden_size768多模态 Transformer 隐层维度mmt.num_hidden_layers4多模态 Transformer 层数classifier.typelinear固定词表分类器类型classifier.ocr_max_num50OCR 复制槽位上限在总输出维度中扣除classifier.ocr_ptr_net.hidden_size/query_key_size768 / 768指针网络的查询与键维度model_data_dir${env.data_dir}Faster R-CNN fc7 权重目录这些lr_scale_*会在get_optimizer_parametersmmf/models/m4c.py中生效把挂入finetune_modules的模块参数按base_lr * lr_scale单独分组其余参数使用默认学习率。7.2 数据集配置以 projects/m4c/configs/textvqa/defaults.yaml 为例关键点zoo_requirementstextvqa.defaults与textvqa.ocr_en运行时自动下载数据与特征featurestrain/val/test 均为textvqa/defaults/features/open_images/detectron.lmdb,textvqa/ocr_en/features/ocr_en_frcn_features.lmdb逗号分隔物体特征与 OCR 特征两个 lmdbprocessors 管线与 mmf/datasets/processors/processors.py 中的注册处理器一一对应bert_tokenizer问题分词max_seq_length: 20m4c_answer答案迭代解码目标构造max_length: 50、max_copy_steps: 12、num_answers: 10词表为fixed_answer_vocab_textvqa_5k.txt5k 固定答案M4CAnswerProcessor内部保证PAD_IDX 0、BOS_IDX/EOS_IDX/UNK_IDX均有效mmf/datasets/processors/processors.pycopyOCR token 索引复制max_length: 100phocPHOC 特征max_length: 50fasttextOCR FastText 词向量model_file: wiki.en.bin首次使用会从缓存目录下载ocr_token_processorsimple_word与bbox归一化 bboxmax_length: 50开关return_features_info: true、use_ocr: true、use_ocr_info: true、use_order_vectors: true优化器Adamlr: 1e-4eps: 1e-8weight_decay: 0训练计划max_updates: 24000、batch_size: 128、num_workers: 4梯度裁剪max_grad_l2_norm: 0.25clip_norm_mode: all学习率在lr_steps: [14000, 19000]处以lr_ratio: 0.1衰减并启用 warmupwarmup_factor: 0.2warmup_iterations: 1000评估指标TextVQA 用textvqa_accuracyST-VQA 用stvqa_accuracystvqa_anlsOCR-VQA 用ocrvqa_accuracyearly_stop.criteria分别指向对应指标。ST-VQA 与 OCR-VQA 的配置结构完全相同仅词表fixed_answer_vocab_stvqa_5k.txt/fixed_answer_vocab_ocrvqa_82.txt、特征路径与max_updatesOCR-VQA 为 48000lr_steps: [28000, 38000]不同。八、评估指标实现TextVQA accuracymmf/utils/m4c_evaluators.py按 EvalAI 的 soft score 计算——对 10 个标注答案去重后每个唯一答案的分数为min(1, 匹配数/3)的平均预测答案命中该分数即得 accST-VQA accuracymmf/utils/m4c_evaluators.py预测答案与任一 GT 完全匹配得 1 分否则 0ST-VQA ANLSmmf/utils/m4c_evaluators.pyANLS 1 - edit_distance / max(len(s1), len(s2))低于 0.5 的相似度计为 0最终取对每个 GT 的最大值并求平均——这也是 M4C 安装依赖中包含editdistance的原因。九、常见问题与建议配置文件名差异文档中的textvqa/join_with_stvqa.yaml在仓库中的实际文件名为textvqa/joint_with_stvqa.yaml使用时以仓库实际文件名为准OCR 版本必须匹配用ocr_ml.yaml训练/评估就必须使用textvqa.ocr_ml预训练模型与 Rosetta-ml 特征混用 Rosetta-en/ml 会导致指标不一致显存与速度MMT 输入序列为问题≤20 物体≤100 OCR≤50 解码步≤12batch_size 128、num_workers 4 为官方默认训练配置实际可依据硬件调整消融实验可通过model_config.m4c.ocr.remove_ocr_*五个开关分别关闭 FastText、PHOC、OCR 外观、OCR 语义与 OCR bbox 特征验证各模态对最终精度的贡献。通过本文的配置表与源码解读你可以直接从mmf_run datasettextvqa modelm4c起步完成 M4C 的复现与实验也可以进一步阅读 mmf/models/m4c.py 与各数据集配置深入定制模型。赞分享多模态人工智能深度学习NLP计算机视觉预训练【免费下载链接】mmfA modular framework for vision language multimodal research from Facebook AI Research (FAIR)项目地址https://gitcode.com/gh_mirrors/mm/mmf点击查看免费下载相关推荐MMF 中的 M4C 模型面向 TextVQA 的指针增强多模态 Transformer 实战指南MMF 中的 M4C 模型面向 TextVQA 的指针增强多模态 Transformer 实战指南 本篇技术指南围绕 MMF 框架内实现的 M4CItera多模态人工智能深度学习NLP计算机视觉预训练MMF 实战用 M4C 模型参加 TextVQA Challenge 的完整训练、评估与提交指南MMF 实战用 M4C 模型参加 TextVQA Challenge 的完整训练、评估与提交指南 TextVQA Challenge 是一项要求模型「阅读」图多模态人工智能深度学习NLP计算机视觉预训练MMF 快速上手指南使用 M4C 模型在 TextVQA 数据集上完成训练与推理MMF 快速上手指南使用 M4C 模型在 TextVQA 数据集上完成训练与推理 本指南以 MMFFacebook AI Research 开源的视觉与语言多模态人工智能深度学习NLP计算机视觉预训练上一篇openeuler/rockchip镜像构建终极指南支持RK3399/RK3588的完整步骤下一篇rpmdepsearch开发者指南如何贡献代码和扩展功能创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考