UNITER:通用图像文本表示学习

UNITER是ECCV 2020的一个项目,用于学习通用的图像文本表示。它支持在多个任务(如NLVR2、VQA、VCR等)上的微调,并提供了预训练模型。该代码库依赖Docker,用户需安装相关软件并使用Docker运行实验。此外,还介绍了如何下载数据、训练模型、进行推理和评估。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

# 更多定制
horovodrun -np $N_GPU python train_nlvr2.py --config $YOUR_CONFIG_JSON
4.对 NLVR2 任务运行推理,然后进行评估。
# 推理
python inf_nlvr2.py --txt_db /txt/nlvr2_test1.db/ --img_db /img/nlvr2_test/ \
     --train_dir /storage/nlvr-base/ --ckpt 6500 --output_dir 。 --fp16

# 评估
# 在 docker 外运行这个命令(用 python 3.6 测试)
# 或者将注解json复制到mounted文件夹中
python 脚本/eval_nlvr2.py ./results.csv $PATH_TO_STORAGE/ann/test1.json

上面的命令对我们训练的模型运行推理。 随意将 --train_dir 和 --ckpt 替换为您在第 3 步中训练的自己的模型。目前我们仅支持单 GPU 推理。

5.定制
# 训练选项
python train_nlvr2.py --help

命令行参数覆盖 JSON 配置文件
JSON 配置覆盖 argparse 默认值
使用 horovodrun 运行多 GPU 训练
–gradient_accumulation_steps 模拟多 GPU 训练

6.杂项
# 文本标注预处理
bash scripts/create_txtdb.sh $PATH_TO_STORAGE/txt_db $PATH_TO_STORAGE/ann

# 图像特征提取(在 Titan-Xp 上测试;可能无法在最新的 GPU 上运行)
bash scripts/extract_imgfeat.sh $PATH_TO_IMG_FOLDER $PATH_TO_IMG_NPY

# 图像预处理
bash scripts/create_imgdb.sh $PATH_TO_IMG_NPY $PATH_TO_STORAGE/img_db

以防您想复制整个预处理管道。

下游任务微调

VQA

注意:训练和推理应该在 docker 容器内运行

1.下载数据
bash scripts/download_vcr.sh $PATH_TO_STORAGE
2.训练
horovodrun -np 4 python train_vcr.py --config config/train-vcr-base-4gpu.json \
    --output_dir $VCR_EXP
3.推理
horovodrun -np 4 python inf_vcr.py --txt_db /txt/vcr_test.db \
    --img_db "/img/vcr_gt_test/;/img/vcr_test/" \
    --split test --output_dir $VCR_EXP --checkpoint 8000 \
    --pin_mem --fp16

结果文件会写入$VCR_EXP/results_test/results_8000_all.csv,可以提交到VCR排行榜进行评估。

VCR 2nd Stage Pre-training

注意:预训练应该在 docker 容器内运行

1.如果您还没有下载 VCR 数据
bash scripts/download_vcr.sh $PATH_TO_STORAGE
2.第二阶段预训练
horovodrun -np 4 python pretrain_vcr.py --config config/pretrain-vcr-base-4gpu.json \
    --output_dir $PRETRAIN_VCR_EXP
Visual Entailment (SNLI-VE)

注意:训练应该在 docker 容器内运行

1.下载数据
bash scripts/download_ve.sh $PATH_TO_STORAGE
2.训练
horovodrun -np 2 python train_ve.py --config config/train-ve-base-2gpu.json \
    --output_dir $VE_EXP

Image-Text Retrieval

下载数据
bash scripts/download_itm.sh $PATH_TO_STORAGE

注意:图像文本检索的计算量很大,尤其是在 COCO 上。

Zero-shot Image-Text Retrieval (Flickr30k)
# every image-text pair has to be ranked; please use as many GPUs as possible
horovodrun -np $NGPU python inf_itm.py \
    --txt_db /txt/itm_flickr30k_test.db --img_db /img/flickr30k \
    --checkpoint /pretrain/uniter-base.pt --model_config /src/config/uniter-base.json \
    --output_dir $ZS_ITM_RESULT --fp16 --pin_mem
Image-Text Retrieval (Flickr30k)

正常微调

horovodrun -np 8 python train_itm.py --config config/train-itm-flickr-base-8gpu.json

用硬底片进行微调(finetune with hard negatives)

horovodrun -np 16 python train_itm_hard_negatives.py \
    --config config/train-itm-flickr-base-16gpu-hn.jgon
Image-Text Retrieval (COCO)

用硬底片进行微调(finetune with hard negatives)

horovodrun -np 16 python train_itm_hard_negatives.py \
    --config config/train-itm-coco-base-16gpu-hn.json

引用表达式

1.下载数据
bash scripts/download_re.sh $PATH_TO_STORAGE
2.训练
python train_re.py --config config/train-refcoco-base-1gpu.json \
    --output_dir $RE_EXP
3.推理和评估
source scripts/eval_refcoco.sh $RE_EXP

结果文件将写入 $RE_EXP/results_test/
同样,更改运行 RefCOCO+/RefCOCOg 的相应配置/脚本。

预训练

下载

bash scripts/download_indomain.sh $PATH_TO_STORAGE

预训练

horovodrun -np 8 python pretrain.py --config config/pretrain-indomain-base-8gpu.json \
    --output_dir $PRETRAIN_EXP

不幸的是,我们无法托管 CC/SBU 功能,因为它们很大。 用户需要自己处理它们。 我们将很快提供一个较小的样本,以便于参考预期的格式。

引文

如果您发现此代码对您的研究有用,请考虑引用:

@inproceedings{chen2020uniter,
  title={Uniter: Universal image-text representation learning},
  author={Chen, Yen-Chun and Li, Linjie and Yu, Licheng and Kholy, Ahmed El and Ahmed, Faisal and Gan, Zhe and Cheng, Yu and Liu, Jingjing},
  booktitle={ECCV},
  year={2020}
}

License

MIT

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值