You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于VisualBERT的掩码图文建模如何提升目标词cat预测得分

问题描述

当前代码实现大量参考Huggingface Transformers库中视觉问答任务的VisualBERT官方示例,实现流程如下:

  • 文本侧:向BERT输入序列时使用[MASK]令牌完成输入掩码操作,为掩码位置配套对应监督标签
  • 视觉侧:通过RCNN提取视觉嵌入,共得到36个ROI特征向量,对36个向量取均值聚合,聚合代码如下:
features = torch.mean(output_dict.get("roi_features"), axis=1).reshape(1,1,2048)
  • 建模推理:将聚合后的特征输入预训练VisualBERT模型完成掩码图文建模,模型输出prediction_logits。对预测logits在最后一个维度取argmax的结果如下:
prediction_logits[0].argmax(-1)
# 输出
>> tensor([1012, 1037, 6302, 1997, 1037, 5723, 1012, 2003])

结合分词器词表将上述预测ID转换为对应词汇,输出为:

.
a
photo
of
a
bathroom
.
is

掩码位置的预期预测结果应为cat或语义相近词汇,但实际预测得分最高的词汇为bathroom(得分9.5069),cat的预测得分仅为6.3830,二者分差明显,需要通过调整让cat成为掩码位置的最优预测结果。

可行调整方案
  • 第一优先级修正视觉特征聚合逻辑:绝对不要对36个ROI特征做全局均值池化。预训练VisualBERT的训练范式是接收全量36个ROI区域特征,搭配每个区域对应的位置编码作为视觉侧输入,从来不是单个均值向量。均值池化会把猫、浴室墙面、地板、洁具的所有特征混合抹平,模型根本无法定位到猫对应的视觉信息,自然会优先预测图像里占比更大的场景类词汇。直接把原始形状为(batch_size, 36, 2048)的ROI特征输入模型即可,不需要做均值和reshape操作。
  • 核对视觉特征提取器匹配度:确认用来提取ROI特征的RCNN模型,和当前使用的VisualBERT预训练权重配套的视觉特征提取器完全一致。如果用了不同训练数据集、不同输出逻辑的RCNN提取特征,视觉嵌入和预训练的文本嵌入空间不对齐,模型无法正确理解视觉内容。
  • 对齐预训练文本输入格式:VisualBERT做掩码图文预训练时的通用文本模板是"a photo of a [MASK].",当前预测结果末尾多了is,说明文本输入拼接逻辑和预训练时的输入分布不一致,会直接干扰预测结果,需要删掉多余拼接的token。
  • 过滤无效背景ROI:如果36个ROI里大部分是墙面、地面、洁具这类浴室背景区域,猫对应的区域特征占比太低,会被背景信息稀释。可以先根据RCNN输出的区域类别置信度,过滤掉背景类ROI,只保留实体类区域特征再输入模型,降低背景干扰。
  • 核对掩码位置是否错位:确认最终取预测结果的索引位置,确实对应[MASK]令牌的位置,避免错位取到其他token的预测结果。

内容的提问来源于stack exchange,提问作者lazytux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 21:36:24