[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-jayleicn--ClipBERT":3,"tool-jayleicn--ClipBERT":64},[4,17,27,35,43,56],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":16},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,3,"2026-04-05T11:01:52",[13,14,15],"开发框架","图像","Agent","ready",{"id":18,"name":19,"github_repo":20,"description_zh":21,"stars":22,"difficulty_score":23,"last_commit_at":24,"category_tags":25,"status":16},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",140436,2,"2026-04-05T23:32:43",[13,15,26],"语言模型",{"id":28,"name":29,"github_repo":30,"description_zh":31,"stars":32,"difficulty_score":23,"last_commit_at":33,"category_tags":34,"status":16},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",107662,"2026-04-03T11:11:01",[13,14,15],{"id":36,"name":37,"github_repo":38,"description_zh":39,"stars":40,"difficulty_score":23,"last_commit_at":41,"category_tags":42,"status":16},3704,"NextChat","ChatGPTNextWeb\u002FNextChat","NextChat 是一款轻量且极速的 AI 助手，旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性，以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发，NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。\n\n这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言，它也提供了便捷的自托管方案，支持一键部署到 Vercel 或 Zeabur 等平台。\n\nNextChat 的核心亮点在于其广泛的模型兼容性，原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型，让用户在一个界面即可自由切换不同 AI 能力。此外，它还率先支持 MCP（Model Context Protocol）协议，增强了上下文处理能力。针对企业用户，NextChat 提供专业版解决方案，具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能，满足公司对数据隐私和个性化管理的高标准要求。",87618,"2026-04-05T07:20:52",[13,26],{"id":44,"name":45,"github_repo":46,"description_zh":47,"stars":48,"difficulty_score":23,"last_commit_at":49,"category_tags":50,"status":16},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",84991,"2026-04-05T10:45:23",[14,51,52,53,15,54,26,13,55],"数据工具","视频","插件","其他","音频",{"id":57,"name":58,"github_repo":59,"description_zh":60,"stars":61,"difficulty_score":10,"last_commit_at":62,"category_tags":63,"status":16},3128,"ragflow","infiniflow\u002Fragflow","RAGFlow 是一款领先的开源检索增强生成（RAG）引擎，旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体（Agent）能力相结合，不仅支持从各类文档中高效提取知识，还能让模型基于这些知识进行逻辑推理和任务执行。\n\n在大模型应用中，幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构（如表格、图表及混合排版），显著提升了信息检索的准确度，从而有效减少模型“胡编乱造”的现象，确保回答既有据可依又具备时效性。其内置的智能体机制更进一步，使系统不仅能回答问题，还能自主规划步骤解决复杂问题。\n\n这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统，还是致力于探索大模型在垂直领域落地的创新者，都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口，既降低了非算法背景用户的上手门槛，也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目，它正成为连接通用大模型与行业专有知识之间的重要桥梁。",77062,"2026-04-04T04:44:48",[15,14,13,26,54],{"id":65,"github_repo":66,"name":67,"description_en":68,"description_zh":69,"ai_summary_zh":69,"readme_en":70,"readme_zh":71,"quickstart_zh":72,"use_case_zh":73,"hero_image_url":74,"owner_login":75,"owner_name":76,"owner_avatar_url":77,"owner_bio":78,"owner_company":79,"owner_location":80,"owner_email":81,"owner_twitter":75,"owner_website":82,"owner_url":83,"languages":84,"stars":97,"forks":98,"last_commit_at":99,"license":100,"difficulty_score":10,"env_os":101,"env_gpu":102,"env_ram":103,"env_deps":104,"category_tags":115,"github_topics":116,"view_count":23,"oss_zip_url":123,"oss_zip_packed_at":123,"status":16,"created_at":124,"updated_at":125,"faqs":126,"releases":162},2633,"jayleicn\u002FClipBERT","ClipBERT","[CVPR 2021 Best Student Paper Honorable Mention, Oral] Official PyTorch code for ClipBERT, an efficient framework for end-to-end learning on image-text and video-text tasks. ","ClipBERT 是一个专为图像 - 文本和视频 - 文本任务设计的高效端到端学习框架。它旨在解决传统视频理解模型计算量大、处理长视频效率低下的难题。通过创新的“稀疏采样”策略，ClipBERT 无需逐帧分析整个视频，而是仅选取少量关键片段，结合 2D 卷积神经网络与 Transformer 架构，直接输入原始视频或图像及文本，即可输出精准的任务预测。\n\n该工具支持多种核心任务的预训练与微调，包括图文检索、视频问答（Video-QA）、图像问答以及文本到视频的检索等，并在多个权威数据集上取得了优异表现。其独特的技术亮点在于以极少的计算资源实现了高性能的视频语言理解，大幅降低了训练和推理门槛。\n\nClipBERT 非常适合人工智能研究人员、算法工程师及开发者使用。无论是希望探索多模态学习前沿技术的学者，还是需要构建高效视频分析应用的开发团队，都能利用其提供的 PyTorch 代码和 Docker 环境快速复现结果或开展二次开发。对于普通用户而言，虽然不直接操作代码，但未来基于此类技术构建的智能搜索、内容推荐等产品将带来更流畅的体验。","# ClipBERT\n\n[Less is More: ClipBERT for Video-and-Language Learning via Sparse Sampling](https:\u002F\u002Farxiv.org\u002Fabs\u002F2102.06183) \n\n[CVPR 2021](http:\u002F\u002Fcvpr2021.thecvf.com\u002F), Oral, [Best Student Paper Honorable Mention](http:\u002F\u002Fcvpr2021.thecvf.com\u002Fnode\u002F329).\n\n[Jie Lei](http:\u002F\u002Fwww.cs.unc.edu\u002F~jielei\u002F)\\*, [Linjie Li](https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Flinjie-li\u002F)\\*,\n[Luowei Zhou](https:\u002F\u002Fluoweizhou.github.io\u002F), [Zhe Gan](https:\u002F\u002Fzhegan27.github.io\u002F), \n[Tamara L. Berg](http:\u002F\u002Ftamaraberg.com\u002F), [Mohit Bansal](http:\u002F\u002Fwww.cs.unc.edu\u002F~mbansal\u002F),\n[Jingjing Liu](https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fjingjing-liu-65703431\u002F)\n\nOfficial PyTorch code for ClipBERT, an efficient framework for \nend-to-end learning for image-text and video-text tasks. \nIt takes raw videos\u002Fimages + text as inputs, and outputs task predictions.\nClipBERT is designed based on 2D CNNs and transformers, and uses a sparse sampling strategy \nto enable efficient end-to-end video-and-language learning. In this repository, \nwe support end-to-end pretraining and finetuning for the following tasks:\n\n- Image-text pretraining on COCO and VG captions.\n- Text-to-video retrieval finetuning on MSRVTT, DiDeMo, and ActivityNet Captions.\n- Video-QA finetuning on TGIF-QA and MSRVTT-QA.\n- Image-QA finetuning on VQA 2.0.\n\nIt is also feasible and easy to add other image-text or video-text tasks for pretraining and finetuning. \n\n\n**[NEW]** If you are interested in ClipBERT, you might also be interested in our recent work, **Singularity** ([paper](https:\u002F\u002Farxiv.org\u002Fabs\u002F2206.03428), [code](https:\u002F\u002Fgithub.com\u002Fjayleicn\u002Fsingularity)), with a single-frame trained model, it achieves state-of-the-art results a set of video-language tasks. \n\n## Requirements \nWe provide a Docker image for easier reproduction. Please install the following:\n  - [nvidia driver](https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fcuda-installation-guide-linux\u002Findex.html#package-manager-installation) (418+), \n  - [Docker](https:\u002F\u002Fdocs.docker.com\u002Finstall\u002Flinux\u002Fdocker-ce\u002Fubuntu\u002F) (19.03+), \n  - [nvidia-container-toolkit](https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fnvidia-docker#quickstart).\n\nOur scripts require the user to have the [docker group membership](https:\u002F\u002Fdocs.docker.com\u002Finstall\u002Flinux\u002Flinux-postinstall\u002F)\nso that docker commands can be run without sudo.\nWe only support Linux with NVIDIA GPUs. We test on Ubuntu 18.04 and V100 cards.\nWe use mixed-precision training hence GPUs with Tensor Cores are recommended.\n\n\n## Getting Started\n\n### General\n\n1. Create a folder that stores pretrained models, all the data, and results.\n    ```bash\n    PATH_TO_STORAGE=\u002Fpath\u002Fto\u002Fyour\u002Fdata\u002F\n    mkdir -p $PATH_TO_STORAGE\u002Ftxt_db  # annotations\n    mkdir -p $PATH_TO_STORAGE\u002Fvis_db  # image and video \n    mkdir -p $PATH_TO_STORAGE\u002Ffinetune  # finetuning results\n    mkdir -p $PATH_TO_STORAGE\u002Fpretrained  # pretrained models\n    ```\n\n2. Download pretrained models.\n\n    Our e2e pretrained ClipBERT model (849MB), can be downloaded with the following command.\n    ```bash\n    bash scripts\u002Fdownload_pretrained.sh $PATH_TO_STORAGE\n    ```\n    This pretrained model can be used for finetuning on video-text tasks and image-text tasks.\n    For your convenience, this script will also download `bert-base-uncased` and `grid-feat-vqa` \n    model weights, which are used as initialization for pretraining.  \n\n3. Launch the Docker container for running the experiments.\n    ```bash\n    # docker image should be automatically pulled\n    source launch_container.sh $PATH_TO_STORAGE\u002Ftxt_db $PATH_TO_STORAGE\u002Fvis_db \\\n        $PATH_TO_STORAGE\u002Ffinetune $PATH_TO_STORAGE\u002Fpretrained\n    ```\n    The launch script respects $CUDA_VISIBLE_DEVICES environment variable.\n    Note that the source code is mounted into the container under `\u002Fclipbert` instead \n    of built into the image so that user modification will be reflected without\n    re-building the image. (Data folders are mounted into the container separately\n    for flexibility on folder structures.)\n\n### Downstream Task Finetuning\n\n#### Text-to-Video Retrieval\n\nTasks: MSRVTT retrieval, DiDeMo and ActivityNet Captions paragprah-to-video retrieval, MSRVTT MC Test.\n\n1. Download data.\n    ```bash\n    # outside the container  \n    # download videos + annotations for $DSET\n    bash scripts\u002Fdownload_$DSET.sh $PATH_TO_STORAGE\n    ```\n    `$DSET` can be one of `msrvtt`, `didemo`, `anet`.\n\n2. Finetuning. \n    ```bash\n    # inside the container\n    horovodrun -np 4 python src\u002Ftasks\u002Frun_video_retrieval.py \\\n        --config $CONFIG_PATH \\\n        --output_dir $OUTPUT_DIR\n   \n    # for single GPU\n    python src\u002Ftasks\u002Frun_video_retrieval.py \\\n        --config $CONFIG_PATH \\\n        --output_dir $OUTPUT_DIR\n    ```\n    `$CONFIG_PATH` should be set to one of the .json config files available at [src\u002Fconfigs](src\u002Fconfigs) \n    prefixed with `_ret`. For example, you can use `src\u002Fconfigs\u002Fmsrvtt_ret_base_resnet50.json` \n    for MSRVTT retrieval.\n    \n3. Run inference.\n    ```bash\n    # inside the container\n    horovodrun -np 4 python src\u002Ftasks\u002Frun_video_retrieval.py \\\n      --do_inference 1 --output_dir $OUTPUT_DIR \\\n      --inference_split val --inference_model_step $STEP \\\n      --inference_txt_db $TXT_DB \\\n      --inference_img_db $IMG_DB --inference_batch_size 64 \\\n      --inference_n_clips $INFERENCE_N_CLIPS\n    ```\n   `$STEP` is an integer, it tells the script to use the checkpoint \n   `$OUTPUT_DIR\u002Fckpt\u002Fmodel_step_$STEP.pt` for inference.\n   `$TXT_DB` and `$IMG_DB` are path to annotation file and video data. You can use\n   `TXT_DB=\u002Ftxt\u002Fdownstream\u002Fmsrvtt_retrieval\u002Fmsrvtt_retrieval_val.jsonl` and \n   `IMG_DB=\u002Fimg\u002Fmsrvtt` for inference on MSRVTT retrieval val split.\n    The results will be written under `$OUTPUT_DIR`. You can use different `$INFERENCE_N_CLIPS` \n    for inference, such as 1 or 16. Using more clips will have a large impact \n    on inference speed and memory usage. You may want to use smaller batch sizes if larger \n    values are set.\n    \n    After MSRVTT retrieval model is trained, you can use it for inference \n    for the MSRVTT MC Test task as well, which is essentially a retrieval \n    task in a multiple-choice task setup. \n    ```bash\n    # inside the container\n    horovodrun -np 4 python src\u002Ftasks\u002Frun_msrvtt_mc.py \\\n      --do_inference 1 --output_dir $OUTPUT_DIR \\\n      --inference_split val --inference_model_step $STEP \\\n      --inference_txt_db \u002Ftxt\u002Fdownstream\u002Fmsrvtt_retrieval_mc\u002Fmsrvtt_retrieval_mc_test.jsonl \\\n      --inference_img_db \u002Fimg\u002Fmsrvtt --inference_batch_size 64 \\\n      --inference_n_clips $INFERENCE_N_CLIPS\n    ```    \n   \n   \n#### Video Question Answering\n\nTasks: TGIF-QA action, transition, and frameQA tasks; MSRVTT-QA. \n\n1. Download data.\n    ```bash\n    # outside the container  \n    # download MSRVTT videos, and QA + retrieval annotations\n    bash scripts\u002Fdownload_msrvtt.sh $PATH_TO_STORAGE  \n    # download TGIF-QA videos and annotations\n    bash scripts\u002Fdownload_tgif_qa.sh $PATH_TO_STORAGE  \n    ```\n\n2. Finetuning. \n    ```bash\n    # inside the container\n    horovodrun -np 4 python src\u002Ftasks\u002Frun_video_qa.py \\\n        --config $CONFIG_PATH \\\n        --output_dir $OUTPUT_DIR\n    ```\n    `$CONFIG_PATH` should be set to one of the .json config files available at [src\u002Fconfigs](src\u002Fconfigs) \n    contains the substring `_qa`. For example, you can use `src\u002Fconfigs\u002Fmsrvtt_qa_base_resnet50.json` \n    for MSRVTT-QA.\n\n3. Run inference.\n    ```bash\n    # inside the container\n    horovodrun -np 4 python src\u002Ftasks\u002Frun_video_qa.py \\\n      --do_inference 1 --output_dir $OUTPUT_DIR \\\n      --inference_split val --inference_model_step $STEP \\\n      --inference_txt_db $TXT_DB \\\n      --inference_img_db $IMG_DB --inference_batch_size 64 \\\n      --inference_n_clips $INFERENCE_N_CLIPS\n    ```\n   `$STEP` is an integer, which tells the script to use the checkpoint \n   `$OUTPUT_DIR\u002Fckpt\u002Fmodel_step_$STEP.pt` for inference.\n   `$TXT_DB` and `$IMG_DB` are path to annotation file and video data. You can use\n   `TXT_DB=\u002Ftxt\u002Fdownstream\u002Fmsrvtt_retrieval\u002Fmsrvtt_qa_val.jsonl` and \n   `IMG_DB=\u002Fimg\u002Fmsrvtt` for inference on MSRVTT QA val split.\n   \n    The results will be written under `$OUTPUT_DIR`. You can use different `$INFERENCE_N_CLIPS` \n    for inference, such as 1 or 16. Using more clips will have a large impact \n    on inference speed and memory usage. You may want to use smaller batch sizes if larger \n    values are set.\n\n\n#### Image Question Answering (VQA)\n1. Download data\n    ```bash\n    # outside the container\n    # download COCO and VG data\n    bash scripts\u002Fdownload_coco_vg.sh $PATH_TO_STORAGE\n    # download VQA annotations\n    bash scripts\u002Fdownload_vqa.sh $PATH_TO_STORAGE\n    ```\n\n2. Finetuning\n    ```bash\n    # inside the container\n    horovodrun -np 4 python src\u002Ftasks\u002Frun_vqa.py \\\n        --config src\u002Fconfigs\u002Fvqa_base_resnet50.json \\\n        --output_dir $OUTPUT_DIR\n    ```\n\n3. Inference\n    ```bash\n    # inside the container\n    horovodrun -np 4 python src\u002Ftasks\u002Frun_vqa.py \\\n      --do_inference 1 --output_dir $OUTPUT_DIR \\\n      --inference_split val --inference_model_step $STEP \\\n      --inference_txt_db $TXT_DB \\\n      --inference_img_db $IMG_DB \\\n      --inference_batch_size 64\n    ```\n\n\n## Pretraining\n1. Download data\n    ```bash\n    # outside the container\n    bash scripts\u002Fdownload_coco_vg.sh $PATH_TO_STORAGE\n    ```\n\n2. Pretraining\n    ```bash\n    #inside the container\n    horovodrun -np 8 python src\u002Fpretrain\u002Frun_pretrain.py \\\n        --config src\u002Fconfigs\u002Fpretrain_image_text_base_resnet50_mlm_itm.json \\\n        --output_dir $OUTPUT_DIR \n    ``` \n\n## Data Preprocessing\nClipBERT takes raw video and text as inputs, there is no need to do feature extraction. \nHowever, to improve data loading speed, we use LMDB to store the raw image and video files. \nYou can use the following script to convert a list of videos with file extensions `mp4` and `avi` into LMDB:\n    \n```bash\n# outside the container\npython src\u002Fpreprocessing\u002Ffile2lmdb.py \\\n    --data_root \u002Fpath\u002Fto\u002Fvideos \\\n    --lmdb_save_dir \u002Fpath\u002Fto\u002Fsave\u002Flmdb \\\n    --ext avi mp4 \\\n    --file_type video \n```\n\nFor images, use appropriate file extensions for `--ext` and `--file_type image`. \nText annotation files are reorganized into `jsonl` files, \nsee example preprocessed files downloaded by the scripts in [scripts\u002F](scripts).   \n\n\n## Citation\n\nIf you find this code useful for your research, please consider citing:\n```\n@inproceedings{lei2021less,\n  title={Less is More: ClipBERT for Video-and-Language Learningvia Sparse Sampling},\n  author={Lei, Jie and Li, Linjie and Zhou, Luowei and Gan, Zhe and Berg, Tamara L. and Bansal, Mohit and Liu, Jingjing},\n  booktitle={CVPR},\n  year={2021}\n}\n```\n\n## Acknowledgement\nWe thank [Yen-Chun Chen](https:\u002F\u002Fscholar.google.com\u002Fcitations?user=Gptgy4YAAAAJ&hl=en), \n[Ruotian Luo](https:\u002F\u002Fttic.uchicago.edu\u002F~rluo\u002F), and other members and interns at \n[Microsoft Multimodal AI](https:\u002F\u002Fmultimodalai.azurewebsites.net\u002Fpeople\u002Fmembers) \nfor their helpful discussions.\nWe also thank the anonymous reviewers for their constructive feedback.\n\nThis code used resources from [transformers](https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Ftransformers), \n[UNITER](https:\u002F\u002Fgithub.com\u002FChenRocks\u002FUNITER), [HERO](https:\u002F\u002Fgithub.com\u002Flinjieli222\u002FHERO), \n[grid-feats-vqa](https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Fgrid-feats-vqa), \n[SlowFast](https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FSlowFast), \n[Detectron2](https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Fdetectron2). \nThe code is implemented using [PyTorch](https:\u002F\u002Fgithub.com\u002Fpytorch\u002Fpytorch), \nwith multi-GPU support from [Horovod](https:\u002F\u002Fgithub.com\u002Fhorovod\u002Fhorovod) \nand mixed precision support from [apex](https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fapex).  We thank the authors for open-sourcing their awesome projects.\n\n\n\n## License\n\nMIT\n\n","# ClipBERT\n\n[少即是多：基于稀疏采样的视频-语言学习框架——ClipBERT](https:\u002F\u002Farxiv.org\u002Fabs\u002F2102.06183)\n\n[CVPR 2021](http:\u002F\u002Fcvpr2021.thecvf.com\u002F) 口头报告，荣获[最佳学生论文荣誉提名](http:\u002F\u002Fcvpr2021.thecvf.com\u002Fnode\u002F329)。\n\n[Jie Lei](http:\u002F\u002Fwww.cs.unc.edu\u002F~jielei\u002F)\\*, [Linjie Li](https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Flinjie-li\u002F)\\*,\n[Luowei Zhou](https:\u002F\u002Fluoweizhou.github.io\u002F), [Zhe Gan](https:\u002F\u002Fzhegan27.github.io\u002F), \n[Tamara L. Berg](http:\u002F\u002Ftamaraberg.com\u002F), [Mohit Bansal](http:\u002F\u002Fwww.cs.unc.edu\u002F~mbansal\u002F),\n[Jingjing Liu](https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fjingjing-liu-65703431\u002F)\n\nClipBERT 的官方 PyTorch 代码，是一个用于图像-文本和视频-文本任务端到端学习的高效框架。它以原始视频\u002F图像和文本作为输入，输出任务预测结果。ClipBERT 基于 2D CNN 和 Transformer 构建，并采用稀疏采样策略，从而实现高效的端到端视频-语言学习。在本仓库中，我们支持以下任务的端到端预训练和微调：\n\n- COCO 和 VG 数据集上的图像-文本预训练。\n- MSRVTT、DiDeMo 和 ActivityNet Captions 数据集上的文本到视频检索任务微调。\n- TGIF-QA 和 MSRVTT-QA 数据集上的视频问答任务微调。\n- VQA 2.0 数据集上的图像问答任务微调。\n\n此外，添加其他图像-文本或视频-文本任务进行预训练和微调也非常可行且简便。\n\n\n**[新]** 如果您对 ClipBERT 感兴趣，您可能也会对我们最近的工作 **Singularity**（[论文](https:\u002F\u002Farxiv.org\u002Fabs\u002F2206.03428)，[代码](https:\u002F\u002Fgithub.com\u002Fjayleicn\u002Fsingularity)) 感兴趣。该模型仅使用单帧进行训练，便在一系列视频-语言任务上取得了当前最优性能。 \n\n## 环境要求 \n为了便于复现，我们提供了一个 Docker 镜像。请安装以下软件：\n  - [NVIDIA 驱动程序](https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fcuda-installation-guide-linux\u002Findex.html#package-manager-installation)（418 及以上版本），\n  - [Docker](https:\u002F\u002Fdocs.docker.com\u002Finstall\u002Flinux\u002Fdocker-ce\u002Fubuntu\u002F)（19.03 及以上版本），\n  - [NVIDIA 容器工具包](https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fnvidia-docker#quickstart)。\n\n我们的脚本要求用户属于 `docker` 用户组（[参考文档](https:\u002F\u002Fdocs.docker.com\u002Finstall\u002Flinux\u002Flinux-postinstall\u002F)），以便无需使用 `sudo` 即可运行 Docker 命令。\n我们仅支持配备 NVIDIA GPU 的 Linux 系统。我们已在 Ubuntu 18.04 和 V100 显卡上进行了测试。由于我们采用混合精度训练，建议使用带有 Tensor Core 的 GPU。\n\n\n## 快速入门\n\n### 通用步骤\n\n1. 创建一个用于存储预训练模型、所有数据和实验结果的文件夹。\n    ```bash\n    PATH_TO_STORAGE=\u002Fpath\u002Fto\u002Fyour\u002Fdata\u002F\n    mkdir -p $PATH_TO_STORAGE\u002Ftxt_db  # 注释文件\n    mkdir -p $PATH_TO_STORAGE\u002Fvis_db  # 图像和视频数据\n    mkdir -p $PATH_TO_STORAGE\u002Ffinetune  # 微调结果\n    mkdir -p $PATH_TO_STORAGE\u002Fpretrained  # 预训练模型\n    ```\n\n2. 下载预训练模型。\n\n    我们的端到端预训练 ClipBERT 模型（849MB）可以通过以下命令下载：\n    ```bash\n    bash scripts\u002Fdownload_pretrained.sh $PATH_TO_STORAGE\n    ```\n    该预训练模型可用于视频-文本任务和图像-文本任务的微调。为方便起见，此脚本还会下载 `bert-base-uncased` 和 `grid-feat-vqa` 模型权重，它们将作为预训练的初始化参数。\n\n3. 启动用于运行实验的 Docker 容器。\n    ```bash\n    # Docker 镜像应自动拉取\n    source launch_container.sh $PATH_TO_STORAGE\u002Ftxt_db $PATH_TO_STORAGE\u002Fvis_db \\\n        $PATH_TO_STORAGE\u002Ffinetune $PATH_TO_STORAGE\u002Fpretrained\n    ```\n    启动脚本会尊重 `$CUDA_VISIBLE_DEVICES` 环境变量。请注意，源代码被挂载到容器内的 `\u002Fclipbert` 目录下，而不是直接构建到镜像中，这样用户修改后无需重新构建镜像即可生效。而数据文件夹则单独挂载到容器中，以提高文件夹结构的灵活性。\n\n### 下游任务微调\n\n#### 文本到视频检索\n\n任务：MSRVTT 检索、DiDeMo 和 ActivityNet Captions 中的段落到视频检索，以及 MSRVTT MC 测试。\n\n1. 下载数据。\n    ```bash\n    # 容器外部  \n    # 下载 $DSET 的视频和标注文件\n    bash scripts\u002Fdownload_$DSET.sh $PATH_TO_STORAGE\n    ```\n    `$DSET` 可以是 `msrvtt`、`didemo` 或 `anet`。\n\n2. 微调。\n    ```bash\n    # 容器内部\n    horovodrun -np 4 python src\u002Ftasks\u002Frun_video_retrieval.py \\\n        --config $CONFIG_PATH \\\n        --output_dir $OUTPUT_DIR\n   \n    # 单 GPU 情况\n    python src\u002Ftasks\u002Frun_video_retrieval.py \\\n        --config $CONFIG_PATH \\\n        --output_dir $OUTPUT_DIR\n    ```\n    `$CONFIG_PATH` 应设置为 [src\u002Fconfigs](src\u002Fconfigs) 目录下以 `_ret` 开头的 .json 配置文件之一。例如，可以使用 `src\u002Fconfigs\u002Fmsrvtt_ret_base_resnet50.json` 进行 MSRVTT 检索。\n\n3. 运行推理。\n    ```bash\n    # 容器内部\n    horovodrun -np 4 python src\u002Ftasks\u002Frun_video_retrieval.py \\\n      --do_inference 1 --output_dir $OUTPUT_DIR \\\n      --inference_split val --inference_model_step $STEP \\\n      --inference_txt_db $TXT_DB \\\n      --inference_img_db $IMG_DB --inference_batch_size 64 \\\n      --inference_n_clips $INFERENCE_N_CLIPS\n    ```\n   `$STEP` 是一个整数，它指示脚本使用 `$OUTPUT_DIR\u002Fckpt\u002Fmodel_step_$STEP.pt` 模型检查点进行推理。\n   `$TXT_DB` 和 `$IMG_DB` 分别是标注文件和视频数据的路径。例如，在 MSRVTT 检索验证集上进行推理时，可以使用 `TXT_DB=\u002Ftxt\u002Fdownstream\u002Fmsrvtt_retrieval\u002Fmsrvtt_retrieval_val.jsonl` 和 `IMG_DB=\u002Fimg\u002Fmsrvtt`。\n    推理结果将被写入 `$OUTPUT_DIR`。可以根据需要调整 `$INFERENCE_N_CLIPS` 的值，比如 1 或 16。使用更多的片段会显著影响推理速度和内存消耗，因此在设置较大值时，可能需要减小批处理大小。\n    \n    在 MSRVTT 检索模型训练完成后，也可以将其用于 MSRVTT MC 测试任务的推理，该任务本质上是在多选题形式下的检索任务。\n    ```bash\n    # 容器内部\n    horovodrun -np 4 python src\u002Ftasks\u002Frun_msrvtt_mc.py \\\n      --do_inference 1 --output_dir $OUTPUT_DIR \\\n      --inference_split val --inference_model_step $STEP \\\n      --inference_txt_db \u002Ftxt\u002Fdownstream\u002Fmsrvtt_retrieval_mc\u002Fmsrvtt_retrieval_mc_test.jsonl \\\n      --inference_img_db \u002Fimg\u002Fmsrvtt --inference_batch_size 64 \\\n      --inference_n_clips $INFERENCE_N_CLIPS\n    ```    \n   \n#### 视频问答\n\n任务：TGIF-QA 中的动作、过渡和帧级问答任务；MSRVTT-QA。\n\n1. 下载数据。\n    ```bash\n    # 容器外部  \n    # 下载 MSRVTT 视频及 QA 和检索标注\n    bash scripts\u002Fdownload_msrvtt.sh $PATH_TO_STORAGE  \n    # 下载 TGIF-QA 视频和标注\n    bash scripts\u002Fdownload_tgif_qa.sh $PATH_TO_STORAGE  \n    ```\n\n2. 微调。\n    ```bash\n    # 容器内部\n    horovodrun -np 4 python src\u002Ftasks\u002Frun_video_qa.py \\\n        --config $CONFIG_PATH \\\n        --output_dir $OUTPUT_DIR\n    ```\n    `$CONFIG_PATH` 应设置为 [src\u002Fconfigs](src\u002Fconfigs) 目录下包含子串 `_qa` 的 .json 配置文件之一。例如，可以使用 `src\u002Fconfigs\u002Fmsrvtt_qa_base_resnet50.json` 进行 MSRVTT-QA。\n\n3. 运行推理。\n    ```bash\n    # 容器内部\n    horovodrun -np 4 python src\u002Ftasks\u002Frun_video_qa.py \\\n      --do_inference 1 --output_dir $OUTPUT_DIR \\\n      --inference_split val --inference_model_step $STEP \\\n      --inference_txt_db $TXT_DB \\\n      --inference_img_db $IMG_DB --inference_batch_size 64 \\\n      --inference_n_clips $INFERENCE_N_CLIPS\n    ```\n   `$STEP` 是一个整数，表示脚本将使用 `$OUTPUT_DIR\u002Fckpt\u002Fmodel_step_$STEP.pt` 检查点进行推理。\n   `$TXT_DB` 和 `$IMG_DB` 分别是标注文件和视频数据的路径。例如，在 MSRVTT QA 验证集上进行推理时，可以使用 `TXT_DB=\u002Ftxt\u002Fdownstream\u002Fmsrvtt_retrieval\u002Fmsrvtt_qa_val.jsonl` 和 `IMG_DB=\u002Fimg\u002Fmsrvtt`。\n   \n    推理结果将被写入 `$OUTPUT_DIR`。可以根据需要调整 `$INFERENCE_N_CLIPS` 的值，比如 1 或 16。使用更多片段会显著影响推理速度和内存占用，因此在设置较大值时，可能需要降低批处理大小。\n\n\n#### 图像问答 (VQA)\n1. 下载数据\n    ```bash\n    # 容器外部\n    # 下载 COCO 和 VG 数据\n    bash scripts\u002Fdownload_coco_vg.sh $PATH_TO_STORAGE\n    # 下载 VQA 标注\n    bash scripts\u002Fdownload_vqa.sh $PATH_TO_STORAGE\n    ```\n\n2. 微调\n    ```bash\n    # 容器内部\n    horovodrun -np 4 python src\u002Ftasks\u002Frun_vqa.py \\\n        --config src\u002Fconfigs\u002Fvqa_base_resnet50.json \\\n        --output_dir $OUTPUT_DIR\n    ```\n\n3. 推理\n    ```bash\n    # 容器内部\n    horovodrun -np 4 python src\u002Ftasks\u002Frun_vqa.py \\\n      --do_inference 1 --output_dir $OUTPUT_DIR \\\n      --inference_split val --inference_model_step $STEP \\\n      --inference_txt_db $TXT_DB \\\n      --inference_img_db $IMG_DB \\\n      --inference_batch_size 64\n    ```\n\n\n## 预训练\n1. 下载数据\n    ```bash\n    # 容器外部\n    bash scripts\u002Fdownload_coco_vg.sh $PATH_TO_STORAGE\n    ```\n\n2. 预训练\n    ```bash\n    # 容器内部\n    horovodrun -np 8 python src\u002Fpretrain\u002Frun_pretrain.py \\\n        --config src\u002Fconfigs\u002Fpretrain_image_text_base_resnet50_mlm_itm.json \\\n        --output_dir $OUTPUT_DIR \n    ``` \n\n## 数据预处理\nClipBERT 直接以原始视频和文本作为输入，无需进行特征提取。然而，为了提高数据加载速度，我们使用 LMDB 存储原始图像和视频文件。可以使用以下脚本将带有 `mp4` 和 `avi` 文件扩展名的视频列表转换为 LMDB：\n    \n```bash\n# 容器外部\npython src\u002Fpreprocessing\u002Ffile2lmdb.py \\\n    --data_root \u002Fpath\u002Fto\u002Fvideos \\\n    --lmdb_save_dir \u002Fpath\u002Fto\u002Fsave\u002Flmdb \\\n    --ext avi mp4 \\\n    --file_type video \n```\n\n对于图像，应根据实际情况设置 `--ext` 和 `--file_type image`。文本标注文件会被重新组织为 `jsonl` 文件，具体示例可参见 [scripts\u002F](scripts) 目录下的脚本下载的预处理文件。   \n\n\n## 引用\n\n如果您在研究中使用了本代码，请考虑引用以下文献：\n```\n@inproceedings{lei2021less,\n  title={Less is More: ClipBERT for Video-and-Language Learningvia Sparse Sampling},\n  author={Lei, Jie and Li, Linjie and Zhou, Luowei and Gan, Zhe and Berg, Tamara L. and Bansal, Mohit and Liu, Jingjing},\n  booktitle={CVPR},\n  year={2021}\n}\n```\n\n## 致谢\n我们感谢 [Yen-Chun Chen](https:\u002F\u002Fscholar.google.com\u002Fcitations?user=Gptgy4YAAAAJ&hl=en)、\n[Ruotian Luo](https:\u002F\u002Fttic.uchicago.edu\u002F~rluo\u002F) 以及 \n[Microsoft Multimodal AI](https:\u002F\u002Fmultimodalai.azurewebsites.net\u002Fpeople\u002Fmembers) 的其他成员和实习生\n提供的有益讨论。\n我们还感谢匿名审稿人提出的建设性意见。\n\n本代码使用了以下开源项目中的资源：[transformers](https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Ftransformers)、\n[UNITER](https:\u002F\u002Fgithub.com\u002FChenRocks\u002FUNITER)、[HERO](https:\u002F\u002Fgithub.com\u002Flinjieli222\u002FHERO)、\n[grid-feats-vqa](https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Fgrid-feats-vqa)、\n[SlowFast](https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002FSlowFast)、\n[Detectron2](https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Fdetectron2)。\n代码基于 [PyTorch](https:\u002F\u002Fgithub.com\u002Fpytorch\u002Fpytorch) 实现，\n并借助 [Horovod](https:\u002F\u002Fgithub.com\u002Fhorovod\u002Fhorovod) 提供的多 GPU 支持\n以及 [apex](https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fapex) 提供的混合精度支持。我们感谢这些项目的作者开放源代码，贡献了如此优秀的成果。\n\n\n\n## 许可证\n\nMIT","# ClipBERT 快速上手指南\n\nClipBERT 是一个高效的视频 - 语言学习框架，采用稀疏采样策略，支持端到端的图像 - 文本和视频 - 文本任务（如检索、问答）。本项目基于 PyTorch 开发，官方推荐使用 Docker 环境运行。\n\n## 环境准备\n\n### 系统要求\n- **操作系统**: Linux (推荐 Ubuntu 18.04+)\n- **GPU**: NVIDIA GPU (推荐具备 Tensor Cores 的显卡，如 V100\u002FA100，以支持混合精度训练)\n- **驱动版本**: NVIDIA Driver 418+\n\n### 前置依赖\n请确保宿主机已安装以下软件：\n1. [NVIDIA Driver](https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fcuda-installation-guide-linux\u002Findex.html#package-manager-installation) (418+)\n2. [Docker](https:\u002F\u002Fdocs.docker.com\u002Finstall\u002Flinux\u002Fdocker-ce\u002Fubuntu\u002F) (19.03+)\n3. [nvidia-container-toolkit](https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fnvidia-docker#quickstart)\n\n**注意**：当前用户需加入 `docker` 用户组，以便无需 `sudo` 即可运行 docker 命令：\n```bash\nsudo usermod -aG docker $USER\n# 执行后需重新登录或重启终端生效\n```\n\n## 安装步骤\n\n### 1. 创建数据存储目录\n选择一个路径用于存储预训练模型、数据集和结果，并创建相应子目录：\n\n```bash\nPATH_TO_STORAGE=\u002Fpath\u002Fto\u002Fyour\u002Fdata\u002F\nmkdir -p $PATH_TO_STORAGE\u002Ftxt_db  # 标注文件\nmkdir -p $PATH_TO_STORAGE\u002Fvis_db  # 图片和视频数据\nmkdir -p $PATH_TO_STORAGE\u002Ffinetune  # 微调结果\nmkdir -p $PATH_TO_STORAGE\u002Fpretrained  # 预训练模型\n```\n\n### 2. 下载预训练模型\n运行官方脚本下载 ClipBERT 端到端预训练模型（约 849MB），同时会自动下载 `bert-base-uncased` 和 `grid-feat-vqa` 初始化权重：\n\n```bash\nbash scripts\u002Fdownload_pretrained.sh $PATH_TO_STORAGE\n```\n\n### 3. 启动 Docker 容器\n使用提供的脚本自动拉取镜像并启动容器。代码将挂载到容器内的 `\u002Fclipbert` 目录，数据目录也会分别挂载：\n\n```bash\nsource launch_container.sh $PATH_TO_STORAGE\u002Ftxt_db $PATH_TO_STORAGE\u002Fvis_db \\\n    $PATH_TO_STORAGE\u002Ffinetune $PATH_TO_STORAGE\u002Fpretrained\n```\n*注：该脚本会尊重 `$CUDA_VISIBLE_DEVICES` 环境变量来指定使用的 GPU。*\n\n## 基本使用\n\n以下以 **MSRVTT 文本到视频检索 (Text-to-Video Retrieval)** 任务为例，展示从数据下载到微调推理的最简流程。其他任务（如 Video-QA, Image-QA）流程类似。\n\n### 1. 下载数据集\n在**容器外**（宿主机）运行下载脚本（以 `msrvtt` 为例）：\n\n```bash\n# 在宿主机执行\nbash scripts\u002Fdownload_msrvtt.sh $PATH_TO_STORAGE\n```\n*可用数据集标识：`msrvtt`, `didemo`, `anet`*\n\n### 2. 模型微调\n进入**容器内**，使用单卡或多卡（Horovod）进行微调。配置文件位于 `src\u002Fconfigs\u002F`，检索任务配置通常包含 `_ret` 后缀。\n\n**多卡训练示例 (4 卡):**\n```bash\n# 在容器内执行\nhorovodrun -np 4 python src\u002Ftasks\u002Frun_video_retrieval.py \\\n    --config src\u002Fconfigs\u002Fmsrvtt_ret_base_resnet50.json \\\n    --output_dir $OUTPUT_DIR\n```\n\n**单卡训练示例:**\n```bash\n# 在容器内执行\npython src\u002Ftasks\u002Frun_video_retrieval.py \\\n    --config src\u002Fconfigs\u002Fmsrvtt_ret_base_resnet50.json \\\n    --output_dir $OUTPUT_DIR\n```\n\n### 3. 运行推理\n微调完成后，使用保存的检查点进行推理。\n\n```bash\n# 在容器内执行\nhorovodrun -np 4 python src\u002Ftasks\u002Frun_video_retrieval.py \\\n  --do_inference 1 --output_dir $OUTPUT_DIR \\\n  --inference_split val --inference_model_step $STEP \\\n  --inference_txt_db \u002Ftxt\u002Fdownstream\u002Fmsrvtt_retrieval\u002Fmsrvtt_retrieval_val.jsonl \\\n  --inference_img_db \u002Fimg\u002Fmsrvtt --inference_batch_size 64 \\\n  --inference_n_clips 1\n```\n\n**参数说明：**\n- `$STEP`: 整数，指定使用的检查点步数（对应文件 `model_step_$STEP.pt`）。\n- `--inference_n_clips`: 采样片段数量（如 1 或 16）。增加片段数会显著影响显存占用和推理速度，若调大此值建议减小 `--inference_batch_size`。\n- 结果将输出至 `$OUTPUT_DIR` 目录下。\n\n---\n*更多任务（Video-QA, Image-QA）及预训练细节请参考项目 `src\u002Ftasks\u002F` 和 `src\u002Fpretrain\u002F` 目录下的具体脚本与配置。*","某视频内容平台的技术团队正致力于升级其内部搜索引擎，以支持用户通过自然语言描述快速定位海量短视频库中的特定片段。\n\n### 没有 ClipBERT 时\n- **计算资源消耗巨大**：传统方案需对视频逐帧提取特征再融合，处理长视频时显存占用极高，导致单卡无法运行，必须依赖昂贵的多卡集群。\n- **推理延迟过高**：由于密集采样和复杂的特征聚合流程，用户搜索一个关键词需要数秒甚至更久才能返回结果，严重损害用户体验。\n- **端到端优化困难**：视觉编码器与文本编码器往往分开预训练，难以针对“视频 - 文本”匹配任务进行联合微调，导致语义对齐精度受限。\n- **部署维护复杂**：需要维护庞大的中间特征数据库，存储成本高且数据更新滞后，新视频入库后无法实时被检索到。\n\n### 使用 ClipBERT 后\n- **稀疏采样大幅降本**：ClipBERT 采用稀疏采样策略，仅选取关键帧输入，显存占用降低数个数量级，单张 V100 显卡即可高效训练和推理。\n- **实时响应成为可能**：去除了冗余的帧处理步骤，端到端的架构将检索延迟从秒级压缩至毫秒级，用户几乎能即时看到搜索结果。\n- **语义匹配更精准**：支持原始视频与文本的端到端联合预训练及微调，模型能更深刻理解动作与描述的关联，显著提升了在 MSRVTT 等数据集上的召回率。\n- **架构轻量易扩展**：无需存储海量中间特征，直接输入原始视频即可输出预测，新视频入库后可立即参与检索，极大简化了工程链路。\n\nClipBERT 通过稀疏采样与端到端学习机制，彻底解决了视频语言任务中计算效率与语义理解难以兼得的行业痛点。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjayleicn_ClipBERT_35837b63.png","jayleicn","Jie Lei 雷杰","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fjayleicn_de39d25b.jpg","Research Scientist, FAIR @ Meta","FAIR @ Meta","Seattle","jielei@cs.unc.edu","https:\u002F\u002Fjayleicn.github.io\u002F","https:\u002F\u002Fgithub.com\u002Fjayleicn",[85,89,93],{"name":86,"color":87,"percentage":88},"Python","#3572A5",96.5,{"name":90,"color":91,"percentage":92},"Shell","#89e051",2.9,{"name":94,"color":95,"percentage":96},"Dockerfile","#384d54",0.6,730,87,"2026-03-14T01:05:54","MIT","Linux","必需 NVIDIA GPU，推荐带有 Tensor Cores 的显卡（测试环境为 V100），需安装 NVIDIA Driver 418+ 及支持 Docker 的 CUDA 环境","未说明",{"notes":105,"python":103,"dependencies":106},"官方仅提供基于 Docker 的运行方案，不支持直接在宿主机安装依赖。用户需将当前用户加入 docker 组以免 sudo 运行。训练采用混合精度（mixed-precision），因此强烈推荐使用具备 Tensor Cores 的 GPU。数据需预处理为 LMDB 格式以提升加载速度。",[107,108,109,110,111,112,113,114],"PyTorch","Horovod","NVIDIA Apex","Docker","nvidia-container-toolkit","Transformers (引用自 Hugging Face)","Detectron2","LMDB",[26,13,14,52,54],[117,118,119,120,121,122],"pytorch","video-retrieval","video-question-answering","vqa","vision-and-language","cvpr2021",null,"2026-03-27T02:49:30.150509","2026-04-06T08:18:30.040775",[127,132,137,142,147,152,157],{"id":128,"question_zh":129,"answer_zh":130,"source_url":131},12184,"运行微调任务时出现 \"Failed Resource Temporarily Unavailable\" 或 \"can't start new thread\" 错误怎么办？","这是因为数据加载器不断创建工作线程且无法正常退出，导致线程数超过上限。根本原因是 `av.open()` 打开了文件流但没有关闭代码或适当的垃圾回收。\n解决方案：在 `src\u002Fdatasets\u002Fdataset_base.py` 文件的对应函数（约第 81 行）的 return 语句之前，添加 `video_container.close()` 来显式关闭视频容器。","https:\u002F\u002Fgithub.com\u002Fjayleicn\u002FClipBERT\u002Fissues\u002F14",{"id":133,"question_zh":134,"answer_zh":135,"source_url":136},12185,"训练过程中 CPU 占用率极高导致线程启动失败，除了将 n_workers 设为 0 外有其他优化方法吗？","高 CPU 占用主要是由视频解码部分引起的。建议根据下游任务的需求，使用脚本对视频进行调整大小和下采样以减少解码负担。可以参考 CLIP4Clip 项目中的压缩视频脚本：https:\u002F\u002Fgithub.com\u002FArrowLuo\u002FCLIP4Clip#compress-video-for-speed-up-optional","https:\u002F\u002Fgithub.com\u002Fjayleicn\u002FClipBERT\u002Fissues\u002F41",{"id":138,"question_zh":139,"answer_zh":140,"source_url":141},12186,"如何在自定义数据集上微调 ClipBERT？train.jsonl 文件格式有何要求？","可以针对句子级别的跨模态检索任务进行微调。在构建 `train.jsonl` 文件时，每个元素应包含三个键：`caption`（字幕）、`clip_name`（片段名称）和 `sen_id`（句子 ID）。其中 `clip_name` 必须与存储视频二进制文件的 lmdb 文件中的键保持一致。","https:\u002F\u002Fgithub.com\u002Fjayleicn\u002FClipBERT\u002Fissues\u002F42",{"id":143,"question_zh":144,"answer_zh":145,"source_url":146},12187,"如何提取帧级别的视觉特征？","可以参考代码库中 `src\u002Fmodeling\u002Fe2e_model.py` 文件的第 33 行。该处展示了如何从 ResNet 骨干网络提取特征并将其发送到 Transformer 层，可复用这部分代码来构建特征提取流程。","https:\u002F\u002Fgithub.com\u002Fjayleicn\u002FClipBERT\u002Fissues\u002F13",{"id":148,"question_zh":149,"answer_zh":150,"source_url":151},12188,"在 MSRVTT 数据集上使用 8 张 GPU 微调需要多长时间？","在 8 张 V100 GPU 上，微调时间大约为 12 小时。如果发现训练时间过长（如超过 100 小时），瓶颈通常在于数据加载（磁盘 IO）和视频解码（CPU），建议检查这两部分的性能。","https:\u002F\u002Fgithub.com\u002Fjayleicn\u002FClipBERT\u002Fissues\u002F47",{"id":153,"question_zh":154,"answer_zh":155,"source_url":156},12189,"可以不安装 Docker 直接运行该项目吗？","目前官方没有提供不使用 Docker 的版本，必须通过 Docker 环境来运行该解决方案。","https:\u002F\u002Fgithub.com\u002Fjayleicn\u002FClipBERT\u002Fissues\u002F55",{"id":158,"question_zh":159,"answer_zh":160,"source_url":161},12190,"预训练模型或数据集下载速度慢或经常失败怎么办？","由于官方源下载速度较慢，社区用户建议使用百度网盘（Baiduyun）链接或迅雷（Thunder）进行下载加速。具体资源链接可在相关讨论中寻找国内镜像或分享。","https:\u002F\u002Fgithub.com\u002Fjayleicn\u002FClipBERT\u002Fissues\u002F8",[]]