本项目为填补短视频封面数据的空白,建立了首个针对中文短视频搜索场景的大规模封面文本基准,并提出了用于封面图文对比学习的UniCLIP。本项目代码基于QA-CLIP建设,并在大规模中文短视频封面数据上微调。UniCLIP已被部署到QQ浏览器在线搜索业务中,并取得了显著的收益。详细的技术细节,请参阅我们的论文。
- 2024.1.23 CBVS数据集与UniCLIP项目正式开源
CBVS数据集目前可通过Google Drive或百度网盘下载。CBVS包括三个版本:20K/5M/10M,各版本的具体细节见下表:
版本 | 图文对数量 | 有无人工标注 | 图像类型 | 文本类型 | 用途 |
---|---|---|---|---|---|
CBVS-20K | 20,001 | 有 | 短视频封面 | 用户查询、OCR文本 | 测试 |
CBVS-5M | 4,767,435 | 无 | 短视频封面 | 短视频标题、OCR文本 | 预训练、微调 |
CBVS-10M | 10,075,989 | 无 | 短视频封面 | 短视频标题、OCR文本 | 预训练、微调 |
UniCLIP目前开源1个规模,其模型信息和下载方式见下表:
模型规模 | 预训练 | 微调 | 下载链接 | 参数量 | 视觉侧骨架 | 视觉侧参数量 | 文本侧骨架 | 文本侧参数量 | 分辨率 |
---|---|---|---|---|---|---|---|---|---|
UniCLIPViT-B/16 | QA-CLIP | CBVS-5M | Google Drive/百度网盘 | 188M | ViT-B/16 | 86M | RoBERTa-wwm-Base | 102M | 224 |
我们在CBVS-20K数据集上测试了以下模型的zero-shot与微调结果。
zero-shot:
召回指标 | 排序指标 | ||||||||
---|---|---|---|---|---|---|---|---|---|
Metric | R@1 | R@5 | R@10 | MR | PNR | NDCG@1 | NDCG@5 | NDCG@10 | MAP |
CN-CLIPViT−B/16 | 0.384 | 0.628 | 0.704 | 0.572 | 2.718 | 0.768 | 0.835 | 0.885 | 0.764 |
CN-CLIPViT−L/14 | 0.434 | 0.685 | 0.756 | 0.625 | 2.812 | 0.773 | 0.840 | 0.889 | 0.775 |
WukongViT−B/32 | 0.197 | 0.356 | 0.439 | 0.331 | 2.000 | 0.702 | 0.791 | 0.858 | 0.712 |
WukongViT−L/14 | 0.311 | 0.503 | 0.583 | 0.466 | 2.229 | 0.739 | 0.811 | 0.872 | 0.738 |
Taiyi-CLIPViT−B | 0.251 | 0.445 | 0.525 | 0.407 | 2.142 | 0.718 | 0.800 | 0.861 | 0.727 |
Taiyi-CLIPViT−L | 0.269 | 0.492 | 0.577 | 0.446 | 2.278 | 0.726 | 0.805 | 0.866 | 0.733 |
Ernie-ViL2.0ViT−B | 0.413 | 0.660 | 0.742 | 0.605 | 2.759 | 0.764 | 0.835 | 0.886 | 0.768 |
R2D2-23MViT−L/14 | 0.258 | 0.407 | 0.436 | 0.367 | 2.312 | 0.733 | 0.810 | 0.868 | 0.738 |
R2D2-250MViT−L/14 | 0.356 | 0.512 | 0.535 | 0.468 | 2.829 | 0.789 | 0.842 | 0.891 | 0.775 |
AltCLIPViT−L | 0.162 | 0.284 | 0.336 | 0.261 | 1.869 | 0.669 | 0.771 | 0.842 | 0.701 |
QA-CLIPViT−B/16 | 0.400 | 0.652 | 0.724 | 0.592 | 2.804 | 0.774 | 0.838 | 0.888 | 0.770 |
微调:
召回指标 | 排序指标 | ||||||||
---|---|---|---|---|---|---|---|---|---|
Metric | R@1 | R@5 | R@10 | MR | PNR | NDCG@1 | NDCG@5 | NDCG@10 | MAP |
CN-CLIPViT−B/16 | 0.471 | 0.721 | 0.796 | 0.663 | 2.914 | 0.767 | 0.838 | 0.888 | 0.767 |
R2D2-250MViT−L/14 | 0.418 | 0.605 | 0.650 | 0.558 | 2.934 | 0.780 | 0.844 | 0.891 | 0.774 |
QA-CLIPViT−B/16 | 0.473 | 0.711 | 0.783 | 0.656 | 2.907 | 0.778 | 0.841 | 0.890 | 0.771 |
UniCLIPViT−B/16 | 0.503 | 0.754 | 0.820 | 0.692 | 3.069 | 0.784 | 0.846 | 0.893 | 0.779 |
CBVS-UniCLIP
├── datasets # 数据集存放路径
│ └── cbvs20k.txt # CBVS-20K数据集,用于测试
├── output # 模型检查点与推理结果输出路径
│ └── inference_result.txt # 示例的模型推理结果
├── pretrained # 预训练检查点存放路径
├── run_scripts # 训练与推理脚本
│ ├── train_vit_b.sh # 训练脚本
│ └── eval_vit_b.sh # 推理脚本
├── uniclip # 模型、训练与推理代码
│ ├── clip # UniCLIP模型定义
│ ├── eval # 推理相关代码
│ └── training # 训练相关代码
└── inference.py # UniCLIP推理示例
开始本项目前,需先检查是否满足下列环境配置要求:
- python >= 3.6.4
- pytorch >= 1.8.0 (with torchvision >= 0.9.0)
- CUDA Version >= 10.2
运行下列命令即可安装本项目所需的三方库。
pip install -r requirements.txt
请参考前文模型及实验部分,下载对应模型ckpt。推荐将下载的ckpt文件存放于CBVS-UniCLIP/pretrained/
目录下。
请参考前文数据集部分,下载CBVS数据集。推荐将下载的数据集存放于CBVS-UniCLIP/datasets/
目录下,推荐的组织结构为:
CBVS-UniCLIP
├── datasets # 数据集存放路径
│ ├── cbvs20k.txt # CBVS-20K数据集,用于测试
│ ├── cbvs5m.txt # CBVS-5M数据集,用于训练
│ ├── cbvs10m.txt # CBVS-10M数据集,用于训练
│ └── cbvs10m-HNSW # HNSW算法所需的数据文件
我们在数据集中提供图像的URL链接,并在模型数据加载时下载图像。为了提高模型效率,我们推荐预下载图像到本地,从而在模型中加载本地文件。
UniCLIP的微调通过如下指令执行:
cd UniCLIP/
bash run_scripts/train_vit_b.sh
相关的训练配置项包括:
- 分布式
GPUS_PER_NODE
: 每个机器上的GPU个数WORKER_CNT
: 训练的机器个数
- 训练数据
train-data
: 训练数据所在路径num-workers
: 训练集数据处理(DataLoader)的进程数,默认为1
- 训练超参数
vision-model
: 指定视觉backbone, 从["ViT-B-16", "ViT-L-14", "ViT-L-14-336", "ViT-H-14", "RN50"]
选择text-model
: 指定文本backbone, 从["RoBERTa-wwm-ext-base-chinese", "RoBERTa-wwm-ext-large-chinese", "RBT3-chinese"]
选择context-length
: 文本输入序列长度warmup
: warmup步数batch-size
: 训练时单卡batch-size。(请保证训练样本总数 > batch-size * GPU数
,至少满足1个训练batch)lr
: 学习率wd
: weight decaymax-steps
: 训练步数,也可通过max-epochs
指定训练轮数use-augment
: 是否使用AutoAugment对图片进行数据增强accum-freq
: 梯度累积频率,默认为1。指定为大于1的整数时开启对比学习梯度累积,模拟更大的batch size。如果单卡batch size为m
,则总的batch size为accum_freq * m * GPU数
- 输出选项
output-base-dir
: 指定输出路径name
: 指定输出子路径。超参日志, 训练日志以及产出ckpt均会存放至${output-base-dir}/${name}/
save-step-frequency
及save-epoch-frequency
: 存ckpt的步数或轮数间隔report-training-batch-acc
: 日志是否报告训练图到文&文到图batch准确率
- 权重读取相关选项
resume
: 权重读取的路径。示例脚本中指定为预训练ckpt路径,也可以指定为用户自己finetune的ckpt路径做继续训练reset-data-offset
: 是否从此前的数据断点续跑。如batch size或GPU卡数超参改变,建议打开此选项reset-optimizer
: 是否使用optimizer state
- 模型选项
ocr-presence
: 是否执行Presence-guided encoder与IC任务ocr-semantic
: 是否执行Semantic-guided encoder与ITM任务
训练完毕,log 会自动存在UniCLIP/${output-base-dir}/${name}/out_${timestamp}.log
,训练log格式如下所示:
2023-12-15,15:43:23 | INFO | Rank 0 | Global Steps: 514/62740 | Train Epoch: 1 [781280/4768240 (16%)] | Loss: 1.888588 | Loss_ocr_presence: 0.479523 | Loss_ocr_semantic: 0.960589 | Loss_Img_Txt: 2.180721 | Image2Text Acc: 55.59 | Text2Image Acc: 55.33 | OCR_presence_est Acc: 78.42 | OCR_semantic_est Acc: 67.89 | Data Time: 0.042s | Batch Time: 5.787s | LR: 0.000020 | logit_scale: 4.603 | Global Batch Size: 1520
注意: 对比学习的训练收敛和稳定性和总batch size相关。如您使用更小的batch size(相比默认配置128 per-GPU * 8 GPU),建议使用更小的学习率。我们推荐使用更多的GPU和更大的batch size以取得更好的效果。
UniCLIP的预测通过如下指令执行:
cd UniCLIP/
bash run_scripts/eval_vit_b.sh
相关的推理配置项包括:
- 推理数据
test-data
: 推理数据所在路径
- 推理超参数
vision-model
: 指定视觉backbone, 从["ViT-B-16", "ViT-L-14", "ViT-L-14-336", "ViT-H-14", "RN50"]
选择text-model
: 指定文本backbone, 从["RoBERTa-wwm-ext-base-chinese", "RoBERTa-wwm-ext-large-chinese", "RBT3-chinese"]
选择context-length
: 文本输入序列长度batch-size
: 推理时单卡batch-sizeinput-resolution
: 输入图像分辨率,默认为224
- 输出选项
output-file
: 指定输出路径
- 权重读取相关选项
resume
: 权重读取的路径
- 模型选项
ocr-presence
: 是否执行Presence-guided encoder与IC任务ocr-semantic
: 是否执行Semantic-guided encoder与ITM任务
训练完毕,模型推理结果自动保存在UniCLIP/{output-file}
,标签、查询、图像ID、模型打分以\t
作为分隔符,如下所示:
1 大宅门演员表 70001002_d3349orxhl9 0.3051548898220062
2 大宅门演员表 70001002_h0871hjdde8 0.39615771174430847
2 明日战记在线观看 70001002_e3348lunfza 0.37629106640815735
与此同时,脚本将计算并输出模型的排序指标,包括PNR、NDCG与MAP。
注意: 推理与训练脚本中的配置项需保持一致。
我们还提供了使用UniCLIP预测单条数据的代码示例,见inference.py
。可通过修改下面的代码,执行图(url)文(query)相关性推理。
score = compute_feature(model, query='大宅门演员表', url='http://puui.qpic.cn/vpic_cover/h0871hjdde8/h0871hjdde8_hz.jpg/640', compute_score=True)
如果我们的工作对您有帮助,欢迎引用我们的工作:
@misc{qiao2024cbvs,
title={CBVS: A Large-Scale Chinese Image-Text Benchmark for Real-World Short Video Search Scenarios},
author={Xiangshuo Qiao and Xianxin Li and Xiaozhe Qu and Jie Zhang and Yang Liu and Yu Luo and Cihang Jin and Jin Ma},
year={2024},
eprint={2401.10475},
archivePrefix={arXiv},
primaryClass={cs.CV}
}