1 Star 1 Fork 0

百度开源 / ernie-vil

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

English | 简体中文

ERNIE-ViL: Knowledge Enhanced Vision-Language Representations Through Scene Graph

关于算法的详细描述,请参见我们的论文

ERNIE-ViL:Knowledge Enhanced Vision-Language Representations Through Scene Graph

Fei Yu*, Jiji Tang*, Weichong Yin, Yu Sun, Hao Tian, Hua Wu, Haifeng Wang (* : equal contribution)

Preprint June 2020

ERNIE-ViLVQA VCR RefCOCO IRTR


ERNIE-ViL 是面向视觉-语言任务的知识增强预训练框架,首次在视觉-语言预训练中引入了结构化的知识。ERNIE-ViL利用场景图中的结构化知识,构建了物体预测,属性预测,关系预测三种预训练任务,精细地刻画了视觉-语言模态之间细粒度语义的对齐,从而获得了更好的视觉-语言联合表示。

模型框架

基于文本中解析出的场景图,ERNIE-ViL提出了三个多模态场景图预测任务:

  • 物体预测:随机选取图中的一部分物体,然后对其在句子中对应的词进行掩码和预测;
  • 属性预测:对于场景图中的属性-物体组合,随机选取一部分词对其中属性词进行掩码和预测;
  • 关系预测:对于场景图中的物体-关系-物体三元组,对其中的关系词进行掩码和预测。

ernie_vil_struct

ERNIE-ViL 场景图预训练任务结构

预训练模型

ERNIE-ViL使用大规模图文对齐数据作为预训练数据,基于Conceptual CaptionsSBU Captions两个out-of-domain数据集,训练两种参数规模模型如下:

  • ERNIE-ViL base (lowercased | 12-text-stream-layer, 6-visual-stream-layer)
  • ERNIE-ViL large (lowercased | 24-text-stream-layer, 6-visual-stream-layer)

基于两个out-of-domian数据集(Conceptual CaptionsSBU Captions)和两个in-domain数据集(MS-COCOVisual-Genome)训练了large参数规模的模型:

下游任务

ERNIE-ViL在五个视觉语言下游任务进行了实验,包括视觉常识推理视觉问答跨模态图片检索跨模态文本检索引用表达式理解,与主流模型的效果对比可以参考开源论文。

视觉常识推理

  • 数据集合

    • 训练、验证和测试集合相关数据可以由视觉常识推理官网获取;
    • 视觉端特征的组织方式借鉴ViLBERT, 因此项目直接使用ViLBERT中的数据,数据下载地址;
    • 将所有获取的文件放在 data/vcr 目录下;
  • 任务预训练: 基于ERNIE-ViL的out-of-domain模型,在视觉推理任务中进行了任务预训练,预训练获得模型如下

  • 效果: ERNIE-ViL在视觉常识推理任务上的效果对比如下:

    模型 Q->A QA->R Q->AR
    ERNIE-ViL (task-pretrain) base 76.37(77.0) 79.65(80.3) 61.24(62.1)
    ERNIE-ViL (task-pretrain) large 78.52(79.2) 83.37(83.5) 65.81(66.3)

    注:括号外表示验证集效果,括号内表示测试集效果,测试集效果提交到VCR榜单获得。

视觉问答

  • 数据集合

    • 原始图片、问题和答案可以由视觉问答官网获取。
    • 视觉端特征使用bottom-up attention中的工具提取,提取的box动态值为100-100。
    • 训练 & 测试数据按照如下方式组织:
      question_id, question, answer_label, answer_score, image_w, image_h, number_box, image_loc, image_embeddings
      多个答案的label和score用 ‘|’ 分隔,和image相关的项均可以从bottom up attention的工具提取。
  • 效果:ERNIE-ViL的三种预训练模型在视觉问答任务下的效果如下表

    模型 test-dev test-std
    ERNIE-ViL base 73.18 73.36
    ERNIE-ViL large 73.78 73.96
    ERNIE-ViL-Out&in-domain large 74.95 75.10

跨模态检索

  • 数据集合

    • 原始图片和文本描述相关的数据,可以从这里获取。
    • 视觉端特征使用bottom-up attention提取,提取的box动态值为0-36。
    • 文本相关的数据可以参见data/flickr给出的示例 flickr.dev.data,图片端特征组织方式为
      image_w, image_h, number_box, image_loc, image_embeddings
  • 效果

    • ERNIE-ViL的三种预训练模型在**跨模态图片检索(Flickr30k 数据集)**上的效果如下表

      模型 R@1 R@5 R@10
      ERNIE-ViL base 74.44 92.72 95.94
      ERNIE-ViL large 75.10 93.42 96.26
      ERNIE-ViL-Out&in-domain large 76.66 94.16 96.76
    • ERNIE-ViL的三种预训练模型在**跨模态文本检索(Flickr30k 数据集)**任务上的效果如下表

      模型 R@1 R@5 R@10
      ERNIE-ViL base 86.70 97.80 99.00
      ERNIE-ViL large 88.70 97.30 99.10
      ERNIE-ViL-Out&in-domain large 89.20 98.50 99.20

引用表达式理解

  • 数据集合
    • 视觉端特征参考了MAttNet的提取方式。
    • 单条训练 & 验证 数据的组织方式为
      expressions, image_w, image_h, number_box, number_boxes_gt, image_loc, image_embeddings, box_label, label
  • 效果
    • ERNIE-ViL的三种预训练模型在引用表达式理解任务上的效果如下表:

      模型 val testA testB
      ERNIE-ViL base 74.02 80.33 64.74
      ERNIE-ViL large 74.24 80.97 64.70
      ERNIE-ViL-Out&in-domain large 75.89 82.39 66.91

使用说明

安装飞桨

ERNIE-ViL代码基于Paddle Fluid 1.8 和 Python 2.7, 依赖的其他模块也列举在 requirements.txt,可以通过下面的指令安装:

     pip install -r requirements.txt

运行微调

在运行 ERNIE-ViL 微调前,需要将 CUDA 、cuDNN 、NCCL2 的动态库路径添加到 LD_LIBRARY_PATH 。 我们把下游任务的参数配置文件放到了 conf/ ,可以简单地通过配置文件运行。 例如,您可以通过下面的指令在各个下游任务上进行微调:

    sh run_finetuning.sh $task_name(vqa/flickr/refcoco_plus/vcr) conf/${task_name}/model_conf_${task_name} $vocab_file $ernie_vil_config $pretrain_models_params

前面提供的模型链接中包含了所有需要的文件, 包含词表文件,配置文件和预训练参数。微调相关的模型配置和参数配置可以通过conf/ 目录下的文件找到,这里对论文最优结果(large模型)的一些关键参数进行汇总:

Tasks Batch Size Learning Rate # of Epochs GPUs Layer Decay rate Hidden dropout
VCR 16(x4) 1e-4 6 4x V100 0.9 0.1
VQA 2.0 64(x4) 1e-4 15 4x V100 0.9 0.1
RefCOCO+ 64(x2) 1e-4 30 2x V100 0.9 0.2
Flickr 8(x8) 2e-5 40 8x V100 0.0 0.1

所有的下游任务的微调实验是在 32 GB 的英伟达V100 GPU上运行,如果您的GPU显存不够,可以考虑更多张卡运行或者减小配置中的batch_size。

预测

基于已经训练的模型,您可以通过下面的命令测试下游任务的效果(相关的配置文件可以从之前下载的包获得)

VCR

   Task Q->A: sh run_inference.sh vcr qa $split(val/test) conf/vcr/model_conf_vcr $vocab_file $ernie_vil_config $model_params $res_file
   Task Q->AR: sh run_inference.sh vcr qar $split(val/test) conf/vcr/model_conf_vcr $vocab_file $ernie_vil_config $model_params $res_file

VCR的测试可以在一张32GB的英伟达V100 GPU上运行,测试的结果包含Q->A 任务、QA->R任务和Q->AR任务,其中Q->AR任务由前两个任务结果合并所得.

VQA

     sh run_inference.sh vqa eval $split(val/test_dev/test_std) conf/vqa/model_conf_vqa $vocab_file $ernie_vil_config $model_params $res_file

注:VQA的测试样本没有label信息,需要将结果文件提交到VQA网站查看结果。

RefCOCO+

     sh run_inference.sh refcoco_plus eval $split(val/test_A/test_B) conf/refcoco_plus/model_conf_refcoco_plus $vocab_file $ernie_vil_config $model_params $res_file

Flickr

     sh run_inference.sh flickr eval $split(dev/test) conf/flickr/model_conf_flickr $vocab_file $ernie_vil_config $model_params $res_file

注:Flickr的结果是一个预测结果文件,可以参考 tools/get_recall.py 统计一下最终结果。

引用

可以按下面的格式引用我们的论文:

@article{yu2020ernie,
  title={ERNIE-ViL: Knowledge Enhanced Vision-Language Representations Through Scene Graph},
  author={Yu, Fei and Tang, Jiji and Yin, Weichong and Sun, Yu and Tian, Hao and Wu, Hua and Wang, Haifeng},
  journal={arXiv preprint arXiv:2006.16934},
  year={2020}
}

空文件

简介

融合场景图知识的跨模态预训练模型 展开 收起
Python 等 2 种语言
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/baidu/ernie-vil.git
git@gitee.com:baidu/ernie-vil.git
baidu
ernie-vil
ernie-vil
master

搜索帮助