总代码readme.md

先决条件

软硬件要求

您可能需要一台至少配备1 个 GPU (>= 8GB)、20GB 内存和50GB 可用磁盘空间的机器。我们强烈建议使用 SSD 驱动器来保证高速 I/O。
您应该首先安装一些必要的软件包:

  1. 安装Python >= 3.5
  2. 安装Cuda >= 9.0 和cuDNN
  3. 使用 CUDA安装PyTorch >= 0.4.1(也支持 PyTorch 1.x)
  4. 安装SpaCy并初始化 GloVe 如下:
$ pip install -r requirements.txt
$ wget https://github.com/explosion/spacy-models/releases/download/en_vectors_web_lg-2.1.0/en_vectors_web_lg-2.1.0.tar.gz -O en_vectors_web_lg-2.1.0.tar.gz
$ pip install en_vectors_web_lg-2.1.0.tar.gz

设置

图像特征是使用自下而上的注意力策略提取的,每张图像都表示为一个动态数量(从 10 到 100)的 2048-D 特征。我们将每个图像的特征存储在一个.npz文件中。您可以自行准备视觉特征,也可以从OneDrive或百度云下载提取的特征。下载的文件包含三个文件:train2014.tar.gz、val2014.tar.gz和test2015.tar.gz,分别对应VQA-v2的train/val/test图像的特征。您应该按如下方式放置它们:

|-- datasets|-- coco_extract|  |-- train2014.tar.gz|  |-- val2014.tar.gz|  |-- test2015.tar.gz

此外,我们使用来自视觉基因组数据集的 VQA 样本来扩展训练样本。与现有策略类似,我们通过两个规则对样本进行了预处理:

  1. 选择 QA 对,相应的图像出现在 MSCOCO 训练和val分割中。
  2. 选择答案出现在已处理答案列表中的 QA 对(在整个VQA-v2答案中出现 8 次以上)。

为方便起见,我们提供了我们处理过的vg问题和注释文件,您可以从OneDrive或百度云下载,放置如下:

|-- datasets|-- vqa|  |-- VG_questions.json|  |-- VG_annotations.json

之后,您可以运行以下脚本来设置实验所需的所有配置

$ sh setup.sh

运行脚本将:

下载VQA-v2的 QA 文件。
解压自下而上的功能
最后,datasets文件夹将具有以下结构:

|-- datasets|-- coco_extract|  |-- train2014|  |  |-- COCO_train2014_...jpg.npz|  |  |-- ...|  |-- val2014|  |  |-- COCO_val2014_...jpg.npz|  |  |-- ...|  |-- test2015|  |  |-- COCO_test2015_...jpg.npz|  |  |-- ...|-- vqa|  |-- v2_OpenEnded_mscoco_train2014_questions.json|  |-- v2_OpenEnded_mscoco_val2014_questions.json|  |-- v2_OpenEnded_mscoco_test2015_questions.json|  |-- v2_OpenEnded_mscoco_test-dev2015_questions.json|  |-- v2_mscoco_train2014_annotations.json|  |-- v2_mscoco_val2014_annotations.json|  |-- VG_questions.json|  |-- VG_annotations.json

训练

以下脚本将使用默认超参数开始训练:

$ python3 run.py --RUN= 'train'

所有检查点文件将保存到:

ckpts/ckpt_<VERSION>/epoch<EPOCH_NUMBER>.pkl

训练日志文件将放置在:

results/log/log_run_<VERSION>.txt

加上:

  1. –VERSION=str,例如–VERSION='small_model’为您的这个模型指定一个名称。
  2. –GPU=str,例如–GPU='2’在指定的 GPU 设备上训练模型。
  3. –NW=int,例如–NW=8加快 I/O 速度。
  4. –MODEL={‘small’, ‘large’} (警告:大模型会消耗更多的 GPU 内存,如果你想用有限的 GPU 内存训练模型,多 GPU 训练和梯度累积可能会有所帮助。)
  5. –SPLIT={‘train’, ‘train+val’, ‘train+val+vg’}可以根据需要组合训练数据集。默认的训练分割是’train+val+vg’。设置–SPLIT=‘train’ 将触发评估脚本在每个 epoch 后自动运行验证分数。
  6. –RESUME=True使用保存的检查点参数开始训练。在这个阶段,你应该分配检查点版本–CKPT_V=str和恢复的纪元号CKPT_E=int。
  7. –MAX_EPOCH=int 在指定的纪元数停止训练。
  8. –PRELOAD=True 在初始化阶段将所有图像特征预加载到内存中(警告:需要额外的 25~30GB 内存和 30 分钟从硬盘驱动器加载时间)

多GPU训练和梯度积累

我们建议使用至少 8 GB 内存的 GPU,但如果您没有这样的设备,请不要担心,我们提供了两种方法来处理它:

  1. 多 GPU 训练:
    如果您想在 GPU 内存有限的设备上加速训练或训练模型,您可以使用多个 GPU:
    添加 --GPU=‘0, 1, 2, 3…’
    每个 GPU 上的批量大小将自动调整为BATCH_SIZE/#GPUs。
  2. 梯度累积:
    如果您只有一个小于 8GB 的​​ GPU,则提供了一种替代策略来在训练期间使用梯度累积:
    添加 --ACCU=n
    这使得优化器为n小批量累积梯度并立即更新模型权重。值得注意的是, BATCH_SIZE必须除以n才能正确运行此模式。

验证和测试

警告:如果您使用–MODELargs 或多 GPU 训练来训练模型,则也应在评估中进行设置。

离线评估
离线评估仅支持 VQA 2.0 val split。如果您想对 VQA 2.0 test-dev或test-std拆分进行评估,请参阅在线评估。

有两种启动方式:

(推荐)

$ python3 run.py --RUN= ' val ' --CKPT_V=str --CKPT_E=int

或者改用绝对路径:

$ python3 run.py --RUN= ' val ' --CKPT_PATH=str

在线评估
VQA 2.0 test-dev和test-std拆分的评估运行如下:

$ python3 run.py --RUN= 'test' --CKPT_V=str --CKPT_E=int

结果文件存储在 results/result_test/result_run_<'PATH+random number' or 'VERSION+EPOCH'>.json

您可以将获得的结果 json 文件上传到Eval AI,以评估test-dev和test-std拆分的分数

预训练模型

我们提供了两种预训练模型,即small模型和large模型。由于 pytorch 版本不同,小模型对应于我们论文中描述的模型,其性能略高(在我们的论文中,test-dev拆分的总体准确率为 70.63%)。大模型使用HIDDEN_SIZE=1024比小模型大 2 倍的HIDDEN_SIZE=512.

两个模型在test-dev拆分上的性能报告如下:

这两个模型可以从OneDrive或百度云下载,解压后放入正确的文件夹如下:

|-- ckpts|-- ckpt_small|  |-- epoch13.pkl|-- ckpt_large|  |-- epoch13.pkl

设置–CKPT={‘small’, ‘large’} --CKPT_E=13为测试或恢复培训,详细信息可以在培训和验证和测试中找到。

mcan-vqa代码相关推荐

  1. 隐私合规:收集SDK部分介绍

    com.meizu.cloud.pushsdk.SystemReceiver 魅族推送服务是由魅族公司为开发者提供的消息推送服务,开发者可以向集成了魅族 push SDK 的客户端实时地推送通知或者消 ...

  2. VQA任务学习记录1(附数据使用代码记录)

    0.前言 最近需要学习处理VQA任务特此记录,这个主要是对论文bottom-up and top-down()和bilinear attention network()中的代码部分的学习记录,目前也并 ...

  3. 【文献阅读】MUTAN——多模态塔克融合VQA模型(Hedi Ben-younes等人,ArXiv,2017,有代码)

    一.背景 文章题目:<MUTAN: Multimodal Tucker Fusion for Visual Question Answering> 17年的一篇文章,不过后面看到很多文献引 ...

  4. Transformer开始往动态路由的方向前进了!厦大华为提出TRAR,在VQA、REC上性能SOTA!(ICCV 2021)...

    关注公众号,发现CV技术之美 1 写在前面 由于具有优越的全局依赖建模能力,Transformer及其变体已成为许多视觉和语言任务的主要结构.然而,在视觉问答(VQA)和指向性表达理解(REC)等任务 ...

  5. MCAN论文进阶——MoVie: Revisting Modulated Convolutions for Visual Counting and Beyond 论文笔记

    MCAN论文进阶--MoVie: Revisting Modulated Convolutions for Visual Counting and Beyond 论文笔记 一.Abstract 二.引 ...

  6. 程序员门槛再被“神器”降低:只要会英文,就能写代码!

    近日,OpenAI带着他们最新.最神自动编码神器Codex霸榜各大科技媒体头条,我们知道OpenAI是微软投资的通用人工智能平台,而GitHub是微软旗下的代码托管平台,这样微软出算力.OpenAI出 ...

  7. 如何上手深度学习中的图像处理?有这个代码资源库就够了

    仙女为大家整理的代码资源库,收集了大量深度学习项目图像处理领域的代码链接.包括图像识别,图像生成,看图说话等等方向的代码,所有代码均按照所属技术领域建立索引,以便大家查阅使用. 2.1 图像生成  2 ...

  8. 送你6份最新开源代码!含NLP、ML、计算机视觉方向(附代码论文)

    来源:PaperWeekly 本文长度为636字,建议阅读3分钟 本文为你分享6份最新的开源代码,包括自然语言处理.计算机视觉和机器学习3个方面. 自然语言处理  1 DuReader: a Chin ...

  9. 【深度学习】270篇CVPR 2020代码开源的论文,全在这里了!

    整理不易,希望点个在看或者转发,支持一下 前言:1467篇 CVPR 2020 "不开源,就是耍流氓","开源,就是生产力",这是我们经常调侃的话术.因为我们经 ...

  10. 学习视觉和语言的多粒度对齐?字节提出新多模态预训练方法 X-VLM:代码已开源!...

    写在前面 视觉语言预训练提高了许多视觉语言任务的性能.但是,现有的多数预训练方法依赖目标检测器(object detectors)提取基于物体的视觉特征,以此学习细粒度的视觉和语言对齐,例如物体(ob ...

最新文章

  1. JavaScript:Class.method与Class.prototype.method
  2. PHP版本的自动生成有规则的订单号(或编号)
  3. linux fedora升级操作
  4. 【VS开发】IP地址格式转换(htonl、ntohl;inet_addr、inet_ntoa)
  5. linux常用命令(4)——系统管理2
  6. TIOBE 3 月编程语言排行榜:Ruby 重回前十,Kotlin 突围
  7. C语言的数据类型→浮点型数据
  8. 软件项目可持续性运作地思考
  9. nginx 查看当前的连接数
  10. 电机学直流电机知识点(根据现有题目的总结)
  11. java hevc和heif_什么是HEVC和HEIF?有什么优缺点?
  12. centos安装aria2c_CentOS安装aria2+yaaw实现离线下载
  13. 网吧服务器磁盘性能,网吧游戏服务端显示磁盘已满怎么解决
  14. c语言数据结构实训报告总结,数据结构实训心得
  15. MKS Robin E3D V1.1 Klipper固件使用说明书
  16. 微信小程序实战篇-电商(一)
  17. GeneXus与其它低代码平台有什么不同
  18. 高手怎么抓热点,每天几点操作?
  19. 智能养老监测系统设计
  20. MES系统设备管理概述(中)

热门文章

  1. 第二篇:python基础之核心风格
  2. ssm vue架构图_ssm+vue前后端分离框架整合实现(附源码)
  3. 用接口,写一个简单的小游戏
  4. 怎样在网站中实现统计访问量的功能
  5. ajax文章采集6,网页采集AJAX滚动教程,以新浪微博评论采集为例
  6. python分层抽样_Python:数据抽样平衡方法重写
  7. H5文档管理-你身边的重要办公助手
  8. XXL-Job学习笔记
  9. 苹果怎么修改服务器密码,iPhone突然弹出窗口:要求输入/修改ID密码怎么办?
  10. 使用中文域名的优缺点分析