总代码readme.md
您可能需要一台至少配备1 个 GPU (>= 8GB)、20GB 内存和50GB 可用磁盘空间的机器。我们强烈建议使用 SSD 驱动器来保证高速 I/O。
您应该首先安装一些必要的软件包:
$ 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 样本来扩展训练样本。与现有策略类似,我们通过两个规则对样本进行了预处理:
为方便起见,我们提供了我们处理过的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
加上:
我们建议使用至少 8 GB 内存的 GPU,但如果您没有这样的设备,请不要担心,我们提供了两种方法来处理它:
警告:如果您使用–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为测试或恢复培训,详细信息可以在培训和验证和测试中找到。