CLIP_prefix_caption:基于CLIP前缀的图像 captioning 模型,无需额外监督,训练高效

Simple image captioning model

Branch1Tags0
This repository is empty

CLIP前缀标题生成


推理笔记本:

“ClipCap:CLIP前缀图像标题生成”论文的官方实现

简介

图像标题生成是一项复杂的任务,通常需要预训练的检测网络,并需要对象注解形式的额外监督。我们提出了一种新方法,无需额外信息(即只需要图像和标题),因此可以应用于任何数据。此外,我们的模型训练时间比同类方法快得多,同时在包含超过300万张图片的Conceptual Captions数据集上也能达到与最先进的结果相当。

在我们的工作中,我们使用了CLIP模型,它已经在极大量的图像上进行了预训练,因此能够对任意图像生成语义编码,而不需要额外监督。为了生成有意义的句子,我们微调了一个预先训练的语言模型,这已被证明对其他自然语言任务成功。关键思想是利用CLIP编码作为文本标题的前缀,通过一个简单的映射网络处理原始编码,然后微调我们的语言模型以生成有效的标题。此外,我们还提供了一个变体,其中我们将映射网络设计为变压器架构,避免了对GPT-2的微调。然而,我们的轻量级模型在nocaps数据集上的表现仍然可与最先进的模型相媲美。

COCO示例

一对人站在大象旁边。 一张木桌靠窗而置。 一串香蕉放在桌子上。
一位女士手持装着蛋糕片的盘子遮住脸。 一张木桌上摆满了木制厨具。 一辆红色摩托车停在泥土田上。

概念性标题示例

三维渲染的人手持地球仪。 学生们欣赏樱花盛开。 一片白色盘子里的生菜叶子。
水边的酒店和赌场。 三角形代表灵魂的象征。 卡通男孩在洗澡。

推理笔记本

为了可视化结果,我们在notebooks/clip_prefix_captioning_inference.ipynb中提供了一个Colab笔记本。这个笔记本会下载预训练模型,并对样例图像或您选择的图像运行推理。建议在Google Colab上运行此笔记本。 对于**变压器映射网络(不微调GPT-2)**的推理笔记本,可以在COCO模型处找到,也位于notebooks/transformer_inference.ipynb

针对mlp映射网络,提供了COCO概念性标题的预训练模型。对于不微调GPT-2的变压器,我们提供了COCO的预训练模型。

推理图形用户界面

  1. 使用replicate.ai UI在浏览器中运行。
  2. 集成到Huggingface Spaces,采用Gradio。演示: Hugging Face Spaces(目前不支持束搜索)

训练先决条件

克隆、创建环境并安装依赖项:

git clone https://github.com/rmokady/CLIP_prefix_caption && cd CLIP_prefix_caption
conda env create -f environment.yml
conda activate clip_prefix_caption

COCO训练

train_captions下载到data/coco/annotations

下载训练图像验证图像并解压缩(我们使用Karpathy等人划分)。

提取CLIP特征(输出为data/coco/oscar_split_ViT-B_32_train.pkl):

python parse_coco.py --clip_model_type ViT-B/32

微调GPT2进行训练:

python train.py --data ./data/coco/oscar_split_ViT-B_32_train.pkl --out_dir ./coco_train/

仅训练变换器映射网络:

python train.py --only_prefix --data ./data/coco/oscar_split_ViT-B_32_train.pkl --out_dir ./coco_train/ --mapping_type transformer  --num_layres 8 --prefix_length 40 --prefix_length_clip 40

如果您希望使用基于ResNet的CLIP:

python parse_coco.py --clip_model_type RN50x4
python train.py --only_prefix --data ./data/coco/oscar_split_RN50x4_train.pkl --out_dir ./coco_train/ --mapping_type transformer  --num_layres 8 --prefix_length 40 --prefix_length_clip 40 --is_rn

概念性训练

概念性标题(Conceptual Captions)下载.TSV格式的训练/验证文件,并将其放置在<data_root>目录下。

通过以下命令下载图片并提取CLIP特征(输出结果分别保存于<data_root>/conceptual_clip_ViT-B_32_train.pkl<data_root>/conceptual_clip_ViT-B_32_val.pkl):

python parse_conceptual.py --clip_model_type ViT-B/32 --data_root <data_root> --num_threads 16

请注意,下载图片可能需要几天时间。

使用GPT-2微调的方式进行训练:

python train.py --data <data_root>/conceptual_clip_ViT-B_32_train.pkl --out_dir ./conceptual_train/

类似于COCO数据集的训练,您可以训练一个变换映射网络,并且/或者使用基于ResNet的CLIP来解析图像。

引用

如果您在研究中使用了这段代码,请引用如下文献:

@article{mokady2021clipcap,
  title={ClipCap: CLIP Prefix for Image Captioning},
  author={Mokady, Ron and Hertz, Amir and Bermano, Amit H},
  journal={arXiv preprint arXiv:2111.09734},
  year={2021}
}

致谢

本仓库极大地依赖于CLIPHugging Face Transformers的仓库。 在训练过程中,我们使用了COCO数据集概念性标题(Conceptual Captions)的数据。

联系方式

如有任何咨询,请通过以下邮箱联系我们:ron.mokady@gmail.com 或 amirhertz@mail.tau.ac.il

Introduction

简易图像标题生成模型【此简介由AI生成】

Customize your domain
71.42 K225Visit GitHub