ClipBERT

GitHub
730 87 中等 1 次阅读 3周前MIT语言模型开发框架图像视频其他
AI 解读 由 AI 自动生成,仅供参考

ClipBERT 是一个专为图像 - 文本和视频 - 文本任务设计的高效端到端学习框架。它旨在解决传统视频理解模型计算量大、处理长视频效率低下的难题。通过创新的“稀疏采样”策略,ClipBERT 无需逐帧分析整个视频,而是仅选取少量关键片段,结合 2D 卷积神经网络与 Transformer 架构,直接输入原始视频或图像及文本,即可输出精准的任务预测。

该工具支持多种核心任务的预训练与微调,包括图文检索、视频问答(Video-QA)、图像问答以及文本到视频的检索等,并在多个权威数据集上取得了优异表现。其独特的技术亮点在于以极少的计算资源实现了高性能的视频语言理解,大幅降低了训练和推理门槛。

ClipBERT 非常适合人工智能研究人员、算法工程师及开发者使用。无论是希望探索多模态学习前沿技术的学者,还是需要构建高效视频分析应用的开发团队,都能利用其提供的 PyTorch 代码和 Docker 环境快速复现结果或开展二次开发。对于普通用户而言,虽然不直接操作代码,但未来基于此类技术构建的智能搜索、内容推荐等产品将带来更流畅的体验。

使用场景

某视频内容平台的技术团队正致力于升级其内部搜索引擎,以支持用户通过自然语言描述快速定位海量短视频库中的特定片段。

没有 ClipBERT 时

  • 计算资源消耗巨大:传统方案需对视频逐帧提取特征再融合,处理长视频时显存占用极高,导致单卡无法运行,必须依赖昂贵的多卡集群。
  • 推理延迟过高:由于密集采样和复杂的特征聚合流程,用户搜索一个关键词需要数秒甚至更久才能返回结果,严重损害用户体验。
  • 端到端优化困难:视觉编码器与文本编码器往往分开预训练,难以针对“视频 - 文本”匹配任务进行联合微调,导致语义对齐精度受限。
  • 部署维护复杂:需要维护庞大的中间特征数据库,存储成本高且数据更新滞后,新视频入库后无法实时被检索到。

使用 ClipBERT 后

  • 稀疏采样大幅降本:ClipBERT 采用稀疏采样策略,仅选取关键帧输入,显存占用降低数个数量级,单张 V100 显卡即可高效训练和推理。
  • 实时响应成为可能:去除了冗余的帧处理步骤,端到端的架构将检索延迟从秒级压缩至毫秒级,用户几乎能即时看到搜索结果。
  • 语义匹配更精准:支持原始视频与文本的端到端联合预训练及微调,模型能更深刻理解动作与描述的关联,显著提升了在 MSRVTT 等数据集上的召回率。
  • 架构轻量易扩展:无需存储海量中间特征,直接输入原始视频即可输出预测,新视频入库后可立即参与检索,极大简化了工程链路。

ClipBERT 通过稀疏采样与端到端学习机制,彻底解决了视频语言任务中计算效率与语义理解难以兼得的行业痛点。

运行环境要求

操作系统
  • Linux
GPU

必需 NVIDIA GPU,推荐带有 Tensor Cores 的显卡(测试环境为 V100),需安装 NVIDIA Driver 418+ 及支持 Docker 的 CUDA 环境

内存

未说明

依赖
notes官方仅提供基于 Docker 的运行方案,不支持直接在宿主机安装依赖。用户需将当前用户加入 docker 组以免 sudo 运行。训练采用混合精度(mixed-precision),因此强烈推荐使用具备 Tensor Cores 的 GPU。数据需预处理为 LMDB 格式以提升加载速度。
python未说明
PyTorch
Horovod
NVIDIA Apex
Docker
nvidia-container-toolkit
Transformers (引用自 Hugging Face)
Detectron2
LMDB
ClipBERT hero image

快速开始

ClipBERT

少即是多:基于稀疏采样的视频-语言学习框架——ClipBERT

CVPR 2021 口头报告,荣获最佳学生论文荣誉提名

Jie Lei*, Linjie Li*, Luowei Zhou, Zhe Gan, Tamara L. Berg, Mohit Bansal, Jingjing Liu

ClipBERT 的官方 PyTorch 代码,是一个用于图像-文本和视频-文本任务端到端学习的高效框架。它以原始视频/图像和文本作为输入,输出任务预测结果。ClipBERT 基于 2D CNN 和 Transformer 构建,并采用稀疏采样策略,从而实现高效的端到端视频-语言学习。在本仓库中,我们支持以下任务的端到端预训练和微调:

  • COCO 和 VG 数据集上的图像-文本预训练。
  • MSRVTT、DiDeMo 和 ActivityNet Captions 数据集上的文本到视频检索任务微调。
  • TGIF-QA 和 MSRVTT-QA 数据集上的视频问答任务微调。
  • VQA 2.0 数据集上的图像问答任务微调。

此外,添加其他图像-文本或视频-文本任务进行预训练和微调也非常可行且简便。

[新] 如果您对 ClipBERT 感兴趣,您可能也会对我们最近的工作 Singularity论文代码) 感兴趣。该模型仅使用单帧进行训练,便在一系列视频-语言任务上取得了当前最优性能。

环境要求

为了便于复现,我们提供了一个 Docker 镜像。请安装以下软件:

我们的脚本要求用户属于 docker 用户组(参考文档),以便无需使用 sudo 即可运行 Docker 命令。 我们仅支持配备 NVIDIA GPU 的 Linux 系统。我们已在 Ubuntu 18.04 和 V100 显卡上进行了测试。由于我们采用混合精度训练,建议使用带有 Tensor Core 的 GPU。

快速入门

通用步骤

  1. 创建一个用于存储预训练模型、所有数据和实验结果的文件夹。

    PATH_TO_STORAGE=/path/to/your/data/
    mkdir -p $PATH_TO_STORAGE/txt_db  # 注释文件
    mkdir -p $PATH_TO_STORAGE/vis_db  # 图像和视频数据
    mkdir -p $PATH_TO_STORAGE/finetune  # 微调结果
    mkdir -p $PATH_TO_STORAGE/pretrained  # 预训练模型
    
  2. 下载预训练模型。

    我们的端到端预训练 ClipBERT 模型(849MB)可以通过以下命令下载:

    bash scripts/download_pretrained.sh $PATH_TO_STORAGE
    

    该预训练模型可用于视频-文本任务和图像-文本任务的微调。为方便起见,此脚本还会下载 bert-base-uncasedgrid-feat-vqa 模型权重,它们将作为预训练的初始化参数。

  3. 启动用于运行实验的 Docker 容器。

    # Docker 镜像应自动拉取
    source launch_container.sh $PATH_TO_STORAGE/txt_db $PATH_TO_STORAGE/vis_db \
        $PATH_TO_STORAGE/finetune $PATH_TO_STORAGE/pretrained
    

    启动脚本会尊重 $CUDA_VISIBLE_DEVICES 环境变量。请注意,源代码被挂载到容器内的 /clipbert 目录下,而不是直接构建到镜像中,这样用户修改后无需重新构建镜像即可生效。而数据文件夹则单独挂载到容器中,以提高文件夹结构的灵活性。

下游任务微调

文本到视频检索

任务:MSRVTT 检索、DiDeMo 和 ActivityNet Captions 中的段落到视频检索,以及 MSRVTT MC 测试。

  1. 下载数据。

    # 容器外部  
    # 下载 $DSET 的视频和标注文件
    bash scripts/download_$DSET.sh $PATH_TO_STORAGE
    

    $DSET 可以是 msrvttdidemoanet

  2. 微调。

    # 容器内部
    horovodrun -np 4 python src/tasks/run_video_retrieval.py \
        --config $CONFIG_PATH \
        --output_dir $OUTPUT_DIR
    
    # 单 GPU 情况
    python src/tasks/run_video_retrieval.py \
        --config $CONFIG_PATH \
        --output_dir $OUTPUT_DIR
    

    $CONFIG_PATH 应设置为 src/configs 目录下以 _ret 开头的 .json 配置文件之一。例如,可以使用 src/configs/msrvtt_ret_base_resnet50.json 进行 MSRVTT 检索。

  3. 运行推理。

    # 容器内部
    horovodrun -np 4 python src/tasks/run_video_retrieval.py \
      --do_inference 1 --output_dir $OUTPUT_DIR \
      --inference_split val --inference_model_step $STEP \
      --inference_txt_db $TXT_DB \
      --inference_img_db $IMG_DB --inference_batch_size 64 \
      --inference_n_clips $INFERENCE_N_CLIPS
    

    $STEP 是一个整数,它指示脚本使用 $OUTPUT_DIR/ckpt/model_step_$STEP.pt 模型检查点进行推理。 $TXT_DB$IMG_DB 分别是标注文件和视频数据的路径。例如,在 MSRVTT 检索验证集上进行推理时,可以使用 TXT_DB=/txt/downstream/msrvtt_retrieval/msrvtt_retrieval_val.jsonlIMG_DB=/img/msrvtt。 推理结果将被写入 $OUTPUT_DIR。可以根据需要调整 $INFERENCE_N_CLIPS 的值,比如 1 或 16。使用更多的片段会显著影响推理速度和内存消耗,因此在设置较大值时,可能需要减小批处理大小。

    在 MSRVTT 检索模型训练完成后,也可以将其用于 MSRVTT MC 测试任务的推理,该任务本质上是在多选题形式下的检索任务。

    # 容器内部
    horovodrun -np 4 python src/tasks/run_msrvtt_mc.py \
      --do_inference 1 --output_dir $OUTPUT_DIR \
      --inference_split val --inference_model_step $STEP \
      --inference_txt_db /txt/downstream/msrvtt_retrieval_mc/msrvtt_retrieval_mc_test.jsonl \
      --inference_img_db /img/msrvtt --inference_batch_size 64 \
      --inference_n_clips $INFERENCE_N_CLIPS
    

视频问答

任务:TGIF-QA 中的动作、过渡和帧级问答任务;MSRVTT-QA。

  1. 下载数据。

    # 容器外部  
    # 下载 MSRVTT 视频及 QA 和检索标注
    bash scripts/download_msrvtt.sh $PATH_TO_STORAGE  
    # 下载 TGIF-QA 视频和标注
    bash scripts/download_tgif_qa.sh $PATH_TO_STORAGE  
    
  2. 微调。

    # 容器内部
    horovodrun -np 4 python src/tasks/run_video_qa.py \
        --config $CONFIG_PATH \
        --output_dir $OUTPUT_DIR
    

    $CONFIG_PATH 应设置为 src/configs 目录下包含子串 _qa 的 .json 配置文件之一。例如,可以使用 src/configs/msrvtt_qa_base_resnet50.json 进行 MSRVTT-QA。

  3. 运行推理。

    # 容器内部
    horovodrun -np 4 python src/tasks/run_video_qa.py \
      --do_inference 1 --output_dir $OUTPUT_DIR \
      --inference_split val --inference_model_step $STEP \
      --inference_txt_db $TXT_DB \
      --inference_img_db $IMG_DB --inference_batch_size 64 \
      --inference_n_clips $INFERENCE_N_CLIPS
    

    $STEP 是一个整数,表示脚本将使用 $OUTPUT_DIR/ckpt/model_step_$STEP.pt 检查点进行推理。 $TXT_DB$IMG_DB 分别是标注文件和视频数据的路径。例如,在 MSRVTT QA 验证集上进行推理时,可以使用 TXT_DB=/txt/downstream/msrvtt_retrieval/msrvtt_qa_val.jsonlIMG_DB=/img/msrvtt

    推理结果将被写入 $OUTPUT_DIR。可以根据需要调整 $INFERENCE_N_CLIPS 的值,比如 1 或 16。使用更多片段会显著影响推理速度和内存占用,因此在设置较大值时,可能需要降低批处理大小。

图像问答 (VQA)

  1. 下载数据

    # 容器外部
    # 下载 COCO 和 VG 数据
    bash scripts/download_coco_vg.sh $PATH_TO_STORAGE
    # 下载 VQA 标注
    bash scripts/download_vqa.sh $PATH_TO_STORAGE
    
  2. 微调

    # 容器内部
    horovodrun -np 4 python src/tasks/run_vqa.py \
        --config src/configs/vqa_base_resnet50.json \
        --output_dir $OUTPUT_DIR
    
  3. 推理

    # 容器内部
    horovodrun -np 4 python src/tasks/run_vqa.py \
      --do_inference 1 --output_dir $OUTPUT_DIR \
      --inference_split val --inference_model_step $STEP \
      --inference_txt_db $TXT_DB \
      --inference_img_db $IMG_DB \
      --inference_batch_size 64
    

预训练

  1. 下载数据

    # 容器外部
    bash scripts/download_coco_vg.sh $PATH_TO_STORAGE
    
  2. 预训练

    # 容器内部
    horovodrun -np 8 python src/pretrain/run_pretrain.py \
        --config src/configs/pretrain_image_text_base_resnet50_mlm_itm.json \
        --output_dir $OUTPUT_DIR 
    

数据预处理

ClipBERT 直接以原始视频和文本作为输入,无需进行特征提取。然而,为了提高数据加载速度,我们使用 LMDB 存储原始图像和视频文件。可以使用以下脚本将带有 mp4avi 文件扩展名的视频列表转换为 LMDB:

# 容器外部
python src/preprocessing/file2lmdb.py \
    --data_root /path/to/videos \
    --lmdb_save_dir /path/to/save/lmdb \
    --ext avi mp4 \
    --file_type video 

对于图像,应根据实际情况设置 --ext--file_type image。文本标注文件会被重新组织为 jsonl 文件,具体示例可参见 scripts/ 目录下的脚本下载的预处理文件。

引用

如果您在研究中使用了本代码,请考虑引用以下文献:

@inproceedings{lei2021less,
  title={Less is More: ClipBERT for Video-and-Language Learningvia Sparse Sampling},
  author={Lei, Jie and Li, Linjie and Zhou, Luowei and Gan, Zhe and Berg, Tamara L. and Bansal, Mohit and Liu, Jingjing},
  booktitle={CVPR},
  year={2021}
}

致谢

我们感谢 Yen-Chun ChenRuotian Luo 以及 Microsoft Multimodal AI 的其他成员和实习生 提供的有益讨论。 我们还感谢匿名审稿人提出的建设性意见。

本代码使用了以下开源项目中的资源:transformersUNITERHEROgrid-feats-vqaSlowFastDetectron2。 代码基于 PyTorch 实现, 并借助 Horovod 提供的多 GPU 支持 以及 apex 提供的混合精度支持。我们感谢这些项目的作者开放源代码,贡献了如此优秀的成果。

许可证

MIT

常见问题

相似工具推荐

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|今天
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

139k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.7k|★★☆☆☆|2天前
开发框架图像Agent

NextChat

NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

87.6k|★★☆☆☆|今天
开发框架语言模型

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|2天前
Agent图像开发框架