MUTAN readme文件(翻译)

/!\ VQA的新版本PyTorch代码现已提供,链接在这里: 代码链接

这个仓库是由Remi Cadene(LIP6)和Hedi Ben-Younes(LIP6-Heuritech)创建的,他们是在UPMC-LIP6从事VQA研究的两名博士生,以及他们的导师Matthieu Cord(LIP6)和Nicolas Thome(LIP6-CNAM)。我们在一篇名为“MUTAN: Multimodal Tucker Fusion for VQA”的研究论文中开发了这个代码,据我们所知,它是VQA 1.0数据集上的当前最先进方法。

这个仓库的目标有两个:

1、更容易重现我们的结果。
2、为社区提供一个高效且模块化的代码基础,以便在其他VQA数据集上进行进一步的研究。
如果对我们的代码或模型有任何问题,请随时与我们联系或提交任何问题。欢迎提出Pull请求!

最新消息:

  • 2018年1月16日: 添加了预训练的vqa2模型和Web演示。
  • 2017年7月18日: 添加了VQA2、VisualGenome、FBResnet152(适用于PyTorch)的新版本提交消息。
  • 2017年7月16日: 论文被ICCV2017接受。
  • 2017年5月30日: 海报被CVPR2017(VQA Workshop)接受。

1、介绍

这个任务涉及在一个由三元组组成的多模态数据集上以端到端的方式训练模型:

1、一张图像,除了原始像素信息之外没有其他信息,
2、有关关联图像上视觉内容的问题,
3、对问题的简短回答(一个或几个词)。
正如您在下面的插图中所看到的,VQA数据集的两个不同的三元组(但相同的图像)被表示出来。模型需要学习丰富的多模态表示,以便能够给出正确的答案。

在这里插入图片描述
VQA任务仍然是活跃的研究领域。然而,当它被解决时,它可能对改进人机界面(尤其是对于视觉障碍者)非常有用。

关于我们方法的简要洞察
VQA社区发展了一种基于四个可学习组件的方法:

1、问题模型,可以是LSTM、GRU或预训练的Skipthoughts,
2、图像模型,可以是预训练的VGG16或ResNet-152,
3、融合方案,可以是逐元素求和、连接、MCB、MLB或Mutan,
4、可选的注意力方案,可能包含多个“窥视”。

我们的一个主张是,图像和问题表示之间的多模态融合是一个关键组件。因此,我们提出的模型使用相关张量的Tucker分解来建模更丰富的多模态交互,以提供正确的答案。我们的最佳模型基于以下组件:

1、针对问题的预训练Skipthoughts的问题模型,
2、针对图像的预训练Resnet-152(图像大小为3x448x448)的图像模型,
3、我们提出的Mutan(基于Tucker分解)作为融合方案,
4、具有两个“窥视”的注意力方案。

2、安装

2.1 Requirements

首先安装Python 3(我们不提供对Python 2的支持)。我们建议您使用Anaconda安装Python 3和PyTorch:

# 安装带有Anaconda的Python
# 安装带有CUDA的PyTorch
conda create --name vqa python=3
source activate vqa
conda install pytorch torchvision cuda80 -c soumith

然后克隆仓库(使用–recursive标志来克隆子模块),并安装附加要求:

cd $HOME
git clone --recursive https://github.com/Cadene/vqa.pytorch.git 
cd vqa.pytorch
pip install -r requirements.txt

上述代码段的目的是在Python 3环境中安装PyTorch和其他必要的依赖项。首先,它创建了一个名为 “vqa” 的conda环境,并在其中安装了PyTorch和其他相关库。然后,它克隆了vqa.pytorch的GitHub仓库,并确保同时克隆了任何子模块(使用–recursive标志)。最后,它使用pip安装了在requirements.txt文件中指定的其他依赖项。

2.2子模块

我们的代码有两个外部依赖项:

1、VQA 用于在valset上使用开放式准确性评估结果文件,
2、skip-thoughts.torch 用于导入预训练的GRUs和嵌入,
3、pretrained-models.pytorch 用于加载预训练的卷积网络。

2.3 数据

数据将在需要时自动下载和预处理。数据的链接存储在vqa/datasets/vqa.py、vqa/datasets/coco.py和vqa/datasets/vgenome.py中。

3、在VQA 1.0上重现结果

3.1特征

由于我们最初使用Lua/Torch7开发,我们使用了在Torch7中预训练的ResNet-152的特征。我们在v2.0版本中将使用Torch7训练的预训练resnet152移植到了PyTorch中。我们将很快提供所有提取的特征。在此期间,您可以按照以下方式下载coco特征:

mkdir -p data/coco/extract/arch,fbresnet152torch
cd data/coco/extract/arch,fbresnet152torch
wget https://data.lip6.fr/coco/trainset.hdf5
wget https://data.lip6.fr/coco/trainset.txt
wget https://data.lip6.fr/coco/valset.hdf5
wget https://data.lip6.fr/coco/valset.txt
wget https://data.lip6.fr/coco/testset.hdf5
wget https://data.lip6.fr/coco/testset.txt

/!\ 目前有3个版本的ResNet152:

  • fbresnet152torch 是torch7模型,
  • fbresnet152 是torch7移植到pytorch中的模型,
  • resnet152 是torchvision中预训练的模型(我们使用它的结果较差)。

3.2 预训练VQA模型

我们目前提供了三个使用我们旧的Torch7代码训练并转换到PyTorch的模型:

1、在VQA 1.0 trainset 上训练的 MutanNoAtt 模型,
2、在VQA 1.0 trainvalset 和 VisualGenome 上训练的 MLBAtt 模型,
3、在VQA 1.0 trainvalset 和 VisualGenome 上训练的 MutanAtt 模型。

mkdir -p logs/vqa
cd logs/vqa
wget http://webia.lip6.fr/~cadene/Downloads/vqa.pytorch/logs/vqa/mutan_noatt_train.zip 
wget http://webia.lip6.fr/~cadene/Downloads/vqa.pytorch/logs/vqa/mlb_att_trainval.zip 
wget http://webia.lip6.fr/~cadene/Downloads/vqa.pytorch/logs/vqa/mutan_att_trainval.zip 

即使我们提供了与我们预训练模型相关的结果文件,您仍然可以使用单个命令在valset、testset和testdevset上重新评估它们:

python train.py -e --path_opt options/vqa/mutan_noatt_train.yaml --resume ckpt
python train.py -e --path_opt options/vqa/mlb_noatt_trainval.yaml --resume ckpt
python train.py -e --path_opt options/vqa/mutan_att_trainval.yaml --resume ckpt

要在VQA 1.0上获取test和testdev结果,您需要将结果的json文件压缩(命名为results.zip),然后提交到评估服务器。

4、重现在VQA 2.0上的结果

4.1 特征 2.0

你必须下载coco数据集(如果需要还有Visual Genome),然后使用卷积神经网络提取特征。

4.2 预训练VQA模型 2.0

我们目前提供了三个在VQA 2.0上使用我们当前pytorch代码训练的模型:

1、在trainset上使用fbresnet152特征训练的MutanAtt模型,
2、在trainvalset上使用fbresnet152特征训练的MutanAtt模型。

cd $VQAPYTORCH
mkdir -p logs/vqa2
cd logs/vqa2
wget http://data.lip6.fr/cadene/vqa.pytorch/vqa2/mutan_att_train.zip 
wget http://data.lip6.fr/cadene/vqa.pytorch/vqa2/mutan_att_trainval.zip 

5、文档

5.1架构

.
├── options        # 默认选项目录,包含yaml文件
├── logs           # 实验目录,包含实验日志目录(每个实验一个目录)
├── data           # 数据集目录
|   ├── coco       # 图像和特征
|   ├── vqa        # 原始、临时和处理后的数据
|   ├── vgenome    # 原始、临时和处理后的数据 + 图像和特征
|   └── ...
├── vqa            # vqa包目录
|   ├── datasets   # 数据集类和函数目录(vqa、coco、vgenome、images、features等)
|   ├── external   # 子模块目录(VQA,skip-thoughts.torch,pretrained-models.pytorch)
|   ├── lib        # 杂类类和函数目录(engine、logger、dataloader等)
|   └── models     # 模型类和函数目录(att、fusion、notatt、seq2vec、convnets)
|
├── train.py       # 训练和评估模型
├── eval_res.py    # 使用OpenEnded指标评估结果文件
├── extract.py     # 使用CNN从coco中提取特征
└── visu.py        # 可视化日志和监视训练

5.2选项

有三种类型的选项:

1、存储在options目录中的yaml选项文件中的选项,用作默认选项(目录路径、日志、模型、特征等)。
2、在train.py文件中的ArgumentParser中的选项,设置为None,可以覆盖默认选项(学习率、批大小等)。
3、在train.py文件中的ArgumentParser中的选项,设置为默认值(打印频率、线程数、恢复模型、评估模型等)。
如果需要,您可以在自定义yaml文件中轻松添加新选项。此外,如果要对参数进行网格搜索,可以添加一个ArgumentParser选项并修改train.py:L80中的字典。

5.3 数据集

我们目前提供四个数据集:

1、COCOImages:用于提取特征,包含三个数据集:trainset、valset和testset
2、VisualGenomeImages:用于提取特征,包含一个划分:trainset
3、VQA 1.0:包含四个数据集:trainset、valset、testset(包括test-std和test-dev)和“trainvalset”(trainset和valset的连接)
4、VQA 2.0:相同的数据,但是是VQA 1.0的两倍
我们计划添加:

CLEVR

5.4 模型

我们目前提供四个模型:

1、MLBNoAtt:一个强基线(BayesianGRU + 逐元素乘积)
2、MLBAtt:先前的最先进方法,添加了一种注意策略
3、MutanNoAtt:我们的概念验证(BayesianGRU + Mutan融合)
4、MutanAtt:当前的最先进方法
我们计划在将来添加几种其他策略。

6、快速示例

6.1 从COCO提取特征

将所需的图像自动下载到dir_data,并默认使用resnet152提取特征。

有三种模式选择:

1、att:特征大小为2048x14x14,
2、noatt:特征大小为2048,
3、both:默认选项。
注意,你需要在SSD上有一些空间:

1、图像需要32GB,
2、训练特征需要125GB,
3、测试特征需要123GB,
4、验证特征需要61GB。

python extract.py -h
python extract.py --dir_data data/coco --data_split train
python extract.py --dir_data data/coco --data_split val
python extract.py --dir_data data/coco --data_split test

注意:默认情况下,我们的代码将在所有可用的GPU上共享计算。如果要选择一个或多个GPU,使用以下前缀:

CUDA_VISIBLE_DEVICES=0 python extract.py
CUDA_VISIBLE_DEVICES=1,2 python extract.py

6.2 从VisualGenome提取特征

同样,在这里,只有train可用:

python extract.py --dataset vgenome --dir_data data/vgenome --data_split train

6.3 在VQA 1.0上训练模型

显示帮助消息,选定的选项,并运行默认设置。将自动下载和处理所需的数据,使用options/vqa/default.yaml中的选项。

python train.py -h
python train.py --help_opt
python train.py

使用默认选项运行MutanNoAtt模型。

python train.py --path_opt options/vqa/mutan_noatt_train.yaml --dir_logs logs/vqa/mutan_noatt_train

在trainset上运行MutanAtt模型,并在每个epoch后在valset上评估。

python train.py --vqa_trainsplit train --path_opt options/vqa/mutan_att_trainval.yaml 

在trainset和valset上(默认设置)运行MutanAtt模型,并在每个epoch后运行testset(生成一个结果文件,您可以提交到评估服务器)。

python train.py --vqa_trainsplit trainval --path_opt options/vqa/mutan_att_trainval.yaml

6.4 在VQA 2.0上训练模型

查看vqa2/mutan_att_trainval的选项:

python train.py --path_opt options/vqa2/mutan_att_trainval.yaml

6.5 在VQA(1.0或2.0)+ VisualGenome上训练模型

查看vqa2/mutan_att_trainval_vg的选项:

python train.py --path_opt options/vqa2/mutan_att_trainval_vg.yaml

6.6 监控训练

使用plotly创建一个实验的可视化,以监视训练,就像下面的图片一样(点击图像访问html/js文件):

请注意,必须等到第一个开放式准确性处理完成,然后将创建html文件并在默认浏览器中弹出。HTML文件将每60秒刷新一次。但是,您目前需要在浏览器上按F5键才能看到更改。

python visu.py --dir_logs logs/vqa/mutan_noatt

创建多个实验的可视化,以比较它们或监视它们,如下图所示(点击图像访问html/js文件):

python visu.py --dir_logs logs/vqa/mutan_noatt,logs/vqa/mutan_att

6.7 重新开始训练

从最后一个检查点重新启动模型。

python train.py --path_opt options/vqa/mutan_noatt.yaml --dir_logs logs/vqa/mutan_noatt --resume ckpt

从最佳检查点重新启动模型。

python train.py --path_opt options/vqa/mutan_noatt.yaml --dir_logs logs/vqa/mutan_noatt --resume best

6.8 在VQA上评估模型

评估从最佳检查点加载的模型。如果模型仅在训练集上训练(vqa_trainsplit=train),则将在valset上评估该模型,并在testset上运行。如果它在trainset + valset上训练(vqa_trainsplit=trainval),则不会在valset上评估。

python train.py --vqa_trainsplit train --path_opt options/vqa/mutan_att.yaml --dir_logs logs/vqa/mutan_att --resume best -e

6.9 Web演示

在demo_server.py的第169行设置本地IP地址和端口,并在demo_web/js/custom.js的第51行设置全局IP地址和端口。与全局IP地址关联的端口必须重定向到本地IP地址。

启动API:

CUDA_VISIBLE_DEVICES=0 python demo_server.py

在浏览器上打开demo_web/index.html,以使用人机界面访问API。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/664258.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【python】英语单词文本处理

文章目录 前言一、环境实验所需的库终端指令 二、实现过程Version 1 起源Version 2 listVersion 3 arrayVersion 4 结构化数组Version 5 区分单元且打乱顺序Version 6 可视化 三、txt文件 前言 缘起自懒得考小孩儿单词,最终效果如图: 本文记录了英语单词…

flutter开发实战-Camera自定义相机拍照功能实现

flutter开发实战-Camera自定义相机拍照功能实现 一、前言 在项目中使用image_picker插件时候,在android设备上使用无法默认设置前置摄像头(暂时不清楚什么原因),由于项目默认需要使用前置摄像头,所以最终采用自定义…

面试经典150题 -- 区间(总结)

总的链接 : 面试经典 150 题 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台最经典 150 题,掌握面试所有知识点https://leetcode.cn/studyplan/top-interview-150/ 228 汇总区间 直接用双指针模拟即可 ; class Solution { public…

Linux 指令

Linux 指令 1 登入/登出1.1 关机1.2 重启1.3 切用户 2 文件和目录管理2.1 目录操作2.2 文件操作2.3 文件内容操作2.4 归档及压缩 3 文本编辑器 vim3.1 命令模式3.2 输入模式3.3 末行模式 4 用户和组管理4.1 用户和组帐号概述4.1.1 用户帐号4.1.2 UID和GID 4.2 用户管理 5 组管理…

拥抱个人成长与社会进步:自我认知与开放心态的相互影响

拥抱个人成长与社会进步:自我认知与开放心态的相互影响 Embracing Personal Growth and Societal Progress: The Interplay of Self-Awareness and Open-mindedness 一、引言 I. Introduction 在当今急速发展的时代,个人成长与社会进步交织在一起&…

[每周一更]-(第86期):NLP-实战操作-文本分类

NLP文本分类的应用场景 医疗领域 - 病历自动摘要: 应用: 利用NLP技术从医疗文档中自动生成病历摘要,以帮助医生更快速地了解患者的状况。 法律领域 - 法律文件分类: 应用: 使用文本分类技术自动分类法律文件&#xf…

后端软件三层架构

一、三层架构简介 三层架构是软件开发中广泛采用的一种经典架构模式,其核心价值在于通过清晰的任务划分来提高代码的可维护性和重用性。具体来说,三层架构主要包括以下三个层次: 持久层(DAO层):这一层主要…

提升 Web 请求效率:Axios request 封装技巧

在开发中,为了提高效率,通常对 Axios 进行封装,简化了请求的发送和对响应的处理。同时,统一错误处理机制有助于维护代码的清晰和一致性。本文介绍了一些高效封装 Axios 请求的方法。 封装理念 通过创建一个请求函数,我…

2024Node.js零基础教程(小白友好型),nodejs新手到高手,(四)NodeJS入门——网络基础概念

041_网络基础概念_IP的介绍 hello,大家好,我们来一起认识一下IP。 在开始介绍 IP 之前,我们首先来介绍一个场景,方便大家去理解 IP 这个概念。比如这会儿强哥正在成都,然后还有另外一个小伙伴,谁呢&#x…

互补滤波算法介绍+SCL源代码(收放卷线速度处理)

工程上对测量信号进行处理,我们可以利用低通滤波器,还可以利用滑动平均值滤波等,关于低通滤波器和滑动平均值滤波器,可以参考专栏相关文章,常用链接如下: 博途PLC一阶滞后低通滤波器(支持采样频率设置) https://rxxw-control.blog.csdn.net/article/details/132972093h…

带着问题读源码——Spring MVC是怎么找到接口实现类的?

引言 我们的产品主打金融服务领域,以B端客户为我们的核心合作伙伴,然而,我们的服务最终将惠及C端消费者。在技术实现上,我们采用了公司自主研发的微服务框架,该框架基于SpringBoot,旨在提供高效、可靠的服…

MyBatis笔记梳理

文章目录 什么是 MyBatis?前期准备依赖配置文件mapper利用注解 增、删、改、查查增改删#{} 和 ${} 的区别类型别名 动态sqlwhere ifforeachsql引用不常用标签 多表查询多对一(一对一)一对多多对多多表查询 个人理解 延迟加载概念使用场景延迟…

Qt/C++音视频开发66-音频变速不变调/重采样/提高音量/变速变调/倍速播放/sonic库使用

一、前言 之前在做倍速这个功能的时候,发现快速播放会有滴滴滴的破音出现,正常1倍速没有这个问题,尽管这个破音间隔很短,要放大音量才能听到,但是总归是不完美的,后面发现,通过修改qaudiooutpu…

2024年美赛数学建模E题思路分析 - 财产保险的可持续性

# 1 赛题 问题E:财产保险的可持续性 极端天气事件正成为财产所有者和保险公司面临的危机。“近年来,世界已经遭受了1000多起极端天气事件造成的超过1万亿美元的损失”。[1]2022年,保险业的自然灾害索赔人数“比30年的平均水平增加了115%”。…

[Java]JDK 安装后运行环境的配置

这篇文章用于介绍jdk.exe安装之后的运行环境配置,以及如何检查是否安装成功 检查自己是否安装jdk环境,记住这个安装的改的路径: (应该要安装2个,一个是jdk,一个是jre) 安装后的在文件夹的样子(路径自定义,在java下面): 参考如下…

【Springcloud篇】学习笔记二(四至六章):Eureka、Zookeeper、Consul

第四章_Eureka服务注册与发现 1.Eureka基础知识 1.1Eureka工作流程-服务注册 1.2Eureka两大组件 2.单机Eureka构建步骤 IDEA生成EurekaServer端服务注册中心,类似于物业公司 EurekaClient端cloud-provider-payment8081将注册进EurekaServer成为服务提供者provide…

Pytest框架测试

Pytest 是什么? pytest 能够支持简单的单元测试和复杂的功能测试;pytest 可以结合 Requests 实现接口测试; 结合 Selenium、Appium 实现自动化功能测试;使用 pytest 结合 Allure 集成到 Jenkins 中可以实现持续集成。pytest 支持 315 种以上的插件;为什么要选择 Pytest 丰…

VUE项目导出excel

导出excel主要可分为以下两种: 1. 后端主导实现 流程:前端调用到导出excel接口 -> 后端返回excel文件流 -> 浏览器会识别并自动下载 场景:大部分场景都有后端来做 2. 前端主导实现 流程:前端获取要导出的数据 -> 把常规数…

跨平台开发:浅析uni-app及其他主流APP开发方式

随着智能手机的普及,移动应用程序(APP)的需求不断增长。开发一款优秀的APP,不仅需要考虑功能和用户体验,还需要选择一种适合的开发方式。随着技术的发展,目前有多种主流的APP开发方式可供选择,其…

亚马逊新店铺视频怎么上传?视频验证失败怎么办?——站斧浏览器

亚马逊新店铺视频怎么上传? 登录亚马逊卖家中心:首先,卖家需要登录亚马逊卖家中心。在登录后,可以点击左侧导航栏上的“库存”选项,然后选择“新增或管理商品”。 选择商品:接下来,在“新增或…