基于paddle框架的VinVL: Revisiting Visual Representations in Vision-Language Models实现
本项目使用paddle框架复现VinVL模型。该模型借助目标类别Object Tags
来实现更好的视觉和文本的跨模态对齐。作者引入Object Tags
并基于此提出了两个损失函数进行大规模的预训练,使得能够学习到文本和图像区域的语义对齐表征。实验表明,作者在多个 vision-language 任务上得到了有效的提升。
注:
AI Studio多卡项目地址: https://aistudio.baidu.com/aistudio/clusterprojectdetail/3480121.
AI Studio单卡项目地址: https://aistudio.baidu.com/aistudio/projectdetail/3486487.
您可以使用AI Studio平台在线运行该项目!
论文:
- [1] P. Zhang, X. Yin, X. Hu, and et. al, "VinVL: Revisiting Visual Representations in Vision-Language Models", CVPR, 2021.
参考项目:
- VinVL [官方实现]
本项目验证其在图文检索
Image-Text Retrieval
下游任务中的性能,所使用的数据集为COCO2014,复现精度如下(参考原论文Table 2)。
Text Retrieval | Image Retrieval | |||||
R@1 | R@5 | R@10 | R@1 | R@5 | R@10 | |
原论文 | 89.8 | 98.8 | 99.7 | 78.2 | 95.6 | 98.0 |
复现精度 | 90.2 | 99.1 | 99.8 | 77.9 | 95.8 | 98.1 |
本项目所使用的数据集为COCO2014。该数据集共包含123287张图像,每张图像对应5个标题。训练集、验证集和测试集分别为113287、5000、5000张图像及其对应的标题。本项目使用预提取的bottom-up
特征,可以从这里下载得到。
-
硬件:CPU、GPU
-
软件:
- Python 3.7
- PaddlePaddle-GPU == 2.2.1
- PaddleNLP==2.2.1
# clone this repo
git clone https://github.com/cattidea/VinVL-Paddle.git
cd VinVL-Paddle
pip install -r requirements.txt
# 相关数据集已上传至Aistudio
# 详情见: https://aistudio.baidu.com/aistudio/datasetdetail/127872
# paddle格式的预训练权重也已上传至Aistudio
# 详情见: https://aistudio.baidu.com/aistudio/datasetdetail/127872
# 下载或挂载数据集和预训练权重之后
# 需要修改配置文件(configs/retrieval_train.yaml和configs/retrieval_test.yaml的一些参数:
# DATA_DIR (数据集目录), FEAT_FILE (特征文件), PRETRAINED-DIR (预训练权重路径)
export PYTHONPATH=$PWD:$PYTHONPATH
CUDA_VISIBLE_DEVICES='0, 1, 2, 3' python -m paddle.distributed.launch tools/train_retrieval.py --cfg_file configs/retrieval_train.yaml
# 测试之前,需要在configs/retrieval_test.yaml中指定测试的模型 (即修改EVAL-CHECKPOINT_DIR参数).
python tools/eval_retrieval.py --cfg_file configs/retrieval_test.yaml
# 下载训练好的模型权重
# https://aistudio.baidu.com/aistudio/datasetdetail/128162
# 执行Step5进行测试
我们提供了两种推理程序样例。两种样例都使用10张图像以及它们对应的50个标题(每张图像对应5个标题)作为检索数据库。不同的是,第一种推理程序使用了.ipynb
进行展示,可以将检索结果进行可视化,详情见demo.ipynb。第二种推理程序可以指定查询的图像和文本(但需要的注意的是,查询的图像和文本必须在检索数据库中,见data/minitest_images
和data/minitest_captions
),如下所示
python tools/inference_retrieval.py --query_img 'data/minitest_images/COCO_val2014_000000028675.jpg' --query_txt 'This messy pizza is covered in cheese and mushrooms'
输出结果如下:
查询图像: data/minitest_images/COCO_val2014_000000028675.jpg
检索结果:
Top1: The motorcycle rider is cruising the street at night.
Top2: It's a cloudy night for a ride on the motorcycle.
Top3: the bike is coming down the street with his lights on
Top4: Two people ride the motorcycle on the city street.
Top5: Police on a motorcycle drive down a city street.
查询文本:
This messy pizza is covered in cheese and mushrooms
检索结果:
Top[1]: data/minitest_images/COCO_val2014_000000045057.jpg
Top[2]: data/minitest_images/COCO_val2014_000000028675.jpg
Top[3]: data/minitest_images/COCO_val2014_000000458755.jpg
Top[4]: data/minitest_images/COCO_val2014_000000213008.jpg
Top[5]: data/minitest_images/COCO_val2014_000000415746.jpg
├── config # 默认配置文件夹
│ └── default.py # 默认配置参数
├── configs # 指定配置文件夹
│ └── retrieval_train.yaml # 训练配置文件
│ └── retrieval_test.yaml # 测试配置文件
├── datasets
│ └── retrieval_dataset.py # 数据加载
├── models
│ └── bert.py # bert模型
│ └── oscar.py # oscar模型
├── solvers
│ └── optimizer.py # 优化器
│ └── scheduler.py # 学习率策略
├── tests # 测试文件
├── tools
│ └── train_retrieval.py # 训练脚本
│ └── eval_retrieval.py # 测试脚本
└── requirement.txt # 依赖包
关于模型的其他信息,可以参考下表:
信息 | 说明 |
---|---|
发布者 | fuqianya |
时间 | 2022.02 |
框架版本 | Paddle 2.2.1 |
应用场景 | 多模态 |
支持硬件 | GPU、CPU |
下载链接 | 预训练模型 | 训练日志 |