UNITER: UNiversal Image-TExt Representation Learning
论文地址:https://arxiv.org/abs/1909.11740点击进入
代码地址:https://github.com/ChenRocks/UNITER点击进入
GitHub界面翻译
这是 UNITER (ECCV 2020) 的官方存储库。 该存储库目前支持在 NLVR2、VQA、VCR、SNLI-VE、COCO 和 Flickr30k 的图像文本检索以及引用表达式理解(RefCOCO、RefCOCO+ 和 RefCOCO-g)上微调 UNITER。 UNITER-base 和 UNITER-large 预训练检查点均已发布。 还可以使用域内数据进行基于 UNITER 的预训练。
这个 repo 中的一些代码是从 PyTorch、HuggingFace、OpenNMT 和 Nvidia 提供的开源实现中复制/修改的。 使用 BUTD 提取图像特征。
要求
我们提供 Docker 镜像以便于复制。 请安装以下内容:
nvidia driver (418+)
Docker (19.03+)
nvidia-container-toolkit
我们的脚本要求用户具有 docker 组成员资格,以便无需 sudo 即可运行 docker 命令。 我们仅支持带有 NVIDIA GPU 的 Linux。 我们在 Ubuntu 18.04 和 V100 卡上进行测试。 我们使用混合精度训练,因此推荐使用带有 Tensor Cores 的 GPU。
快速开始
注意:请运行
bash scripts/download_pretrained.sh $PATH_TO_STORAGE
以获取我们最新的预训练检查点。 这将下载基本模型和大型模型。
我们使用 NLVR2 作为使用此代码库的端到端示例。
1.使用以下命令下载处理过的数据和预训练模型。
bash scripts/download_nlvr2.sh $PATH_TO_STORAGE
下载后,您应该看到以下文件夹结构:
├── ann
│ ├── dev.json
│ └── test1.json
├── finetune
│ ├── nlvr-base
│ └── nlvr-base.tar
├── img_db
│ ├── nlvr2_dev
│ ├── nlvr2_dev.tar
│ ├── nlvr2_test
│ ├── nlvr2_test.tar
│ ├── nlvr2_train
│ └── nlvr2_train.tar
├── pretrained
│ └── uniter-base.pt
└── txt_db
├── nlvr2_dev.db
├── nlvr2_dev.db.tar
├── nlvr2_test1.db
├── nlvr2_test1.db.tar
├── nlvr2_train.db
└── nlvr2_train.db.tar
2.启动 Docker 容器以运行实验。
# docker 镜像应该被自动拉取
source launch_container.sh $PATH_TO_STORAGE/txt_db $PATH_TO_STORAGE/img_db \
$PATH_TO_STORAGE/finetune $PATH_TO_STORAGE/pretrained
启动脚本尊重 $CUDA_VISIBLE_DEVICES 环境变量。 请注意,源代码是挂载到 /src 下的容器中,而不是内置到图像中,以便用户修改将反映在不重新构建图像的情况下。 (数据文件夹单独安装到容器中,以提高文件夹结构的灵活性。)
3.为 NLVR2 任务运行微调。
# 容器内部
python train_nlvr2.py --config config/train-nlvr2-base-1gpu.json