Apollo:Meta 联合斯坦福大学推出专注于视频理解的多模态模型,能够理解长达数小时的视频

本文涉及的产品
图像搜索,7款服务类型 1个月
简介: Apollo是由Meta和斯坦福大学合作推出的大型多模态模型,专注于视频理解。该模型通过“Scaling Consistency”现象,在较小模型上的设计决策能够有效扩展至大型模型,显著提升了视频理解能力。

❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发非常感兴趣,我会每日跟你分享最新的 AI 资讯和开源应用,也会不定期分享自己的想法和开源实例,欢迎关注我哦!

🥦 微信公众号|搜一搜:蚝油菜花 🥦


🚀 快速阅读

  1. 模型背景:Apollo是Meta和斯坦福大学合作推出的视频理解大型多模态模型。
  2. 核心技术:通过“Scaling Consistency”现象,优化模型设计和训练,提升视频理解能力。
  3. 应用场景:适用于视频内容分析、视频搜索、智能监控、自动驾驶等领域。

正文(附运行示例)

Apollo 是什么

公众号: 蚝油菜花 - Apollo

Apollo是由Meta和斯坦福大学合作推出的大型多模态模型(LMMs),专注于视频理解。该模型基于系统研究,揭示了视频理解在LMMs中的关键驱动因素,并提出了“Scaling Consistency”现象,即在较小模型上的设计决策能够有效扩展至大型模型。

Apollo项目还引入了ApolloBench,一个高效的视频理解评估基准,以及一系列先进的Apollo模型。这些模型在不同规模上均展现出卓越性能,特别是在处理长视频方面,能够高效理解长达数小时的视频。

Apollo 的主要功能

  • 视频理解能力提升:Apollo通过大型多模态模型(LMMs)提高对视频内容的理解能力,包括时空特征的捕捉和处理。
  • 设计空间探索:系统性地探索视频LMMs的设计空间,包括视频采样、架构、数据组成、训练计划等。
  • 性能优化:基于“Scaling Consistency”现象,Apollo能在较小的模型上进行设计决策,并有效地将这些决策转移到更大的模型上,减少计算成本。
  • 高效评估:引入ApolloBench,一个高效的视频理解评估基准,快速准确地评估模型性能。
  • 模型家族:推出Apollo模型家族,这些模型在不同规模上均展现出卓越的性能,特别是在处理长视频方面。

Apollo 的技术原理

  • Scaling Consistency:发现在较小模型上有效的设计和训练决策能转移到更大的模型上,称为“Scaling Consistency”。
  • 视频采样策略:Apollo发现帧率(fps)采样在训练和推理过程中优于均匀采样。
  • 编码器选择:基于实验确定最佳的单编码器和编码器组合,实现最优的视频表示。
  • 令牌重采样:使用Perceiver Resampler进行视觉令牌的重采样,减少每帧的令牌数,提高模型效率。
  • 数据混合:研究不同文本、图像和视频数据的混合比例,发现包含适量文本数据和保持轻微视频重量混合能带来最佳性能。
  • 训练计划:基于多阶段训练计划,逐步解冻不同组件,优化模型训练动态。

如何运行 Apollo

安装

pip install -e .
pip install flash-attn --no-build-isolation

推理示例

import torch
from transformers import AutoModelForCausalLM
from apollo.mm_utils import (
    KeywordsStoppingCriteria,
    tokenizer_mm_token,
    ApolloMMLoader
)
from apollo.conversation import conv_templates, SeparatorStyle
from apollo.constants import X_TOKEN, X_TOKEN_INDEX
from huggingface_hub import snapshot_download

# 参数
version = "qwen_2"
model_url = "Apollo-LMMs/Apollo-3B-t32"
model_path = snapshot_download(model_url, repo_type="model")

video_path = "/your/local/path/video.mp4"
question = "Describe this video in detail"
temperature = 0.4
top_p = 0.7
max_output_tokens = 256

device = "cuda" if torch.cuda.is_available() else "cpu"
attn_implementation = "sdpa" if torch.__version__ > "2.1.2" else "eager"

model = AutoModelForCausalLM.from_pretrained(
    model_path,
    trust_remote_code=True,
    low_cpu_mem_usage=True,
    attn_implementation=attn_implementation,
).to(device=device, dtype=torch.bfloat16)

tokenizer = model.tokenizer
vision_processors = model.vision_tower.vision_processor
config = model.config
max_length = config.llm_cfg['model_max_length']
num_repeat_token = config.mm_connector_cfg['num_output_tokens']
mm_use_im_start_end = config.use_mm_start_end

frames_per_clip = 4
clip_duration = getattr(config, 'clip_duration')

mm_processor = ApolloMMLoader(
    vision_processors,
    clip_duration,
    frames_per_clip,
    clip_sampling_ratio=0.65,
    model_max_length=config.model_max_length,
    device=device,
    num_repeat_token=num_repeat_token
)

model.eval()

mm_data, replace_string = mm_processor.load_video(video_path)
message = replace_string + "\n\n" + question

conv = conv_templates[version].copy()
conv.append_message(conv.roles[0], message)
conv.append_message(conv.roles[1], None)
prompt = conv.get_prompt()

input_ids = tokenizer_mm_token(prompt, tokenizer, return_tensors="pt").unsqueeze(0).to(device)

pad_token_ids = tokenizer.pad_token_id if tokenizer.pad_token_id is not None else tokenizer.eos_token_id
stop_str = conv.sep if conv.sep_style != SeparatorStyle.TWO else conv.sep2
keywords = [stop_str]
stopping_criteria = KeywordsStoppingCriteria(keywords, tokenizer, input_ids)

with torch.inference_mode():
    output_ids = model.generate(
        input_ids,
        vision_input=[mm_data],
        data_types=['video'],
        do_sample=(temperature > 0),
        temperature=temperature,
        max_new_tokens=max_output_tokens,
        top_p=top_p,
        use_cache=True,
        num_beams=1,
        stopping_criteria=[stopping_criteria]
    )

pred = tokenizer.batch_decode(output_ids, skip_special_tokens=True)[0].strip()
print(pred)

资源


❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发非常感兴趣,我会每日跟你分享最新的 AI 资讯和开源应用,也会不定期分享自己的想法和开源实例,欢迎关注我哦!

🥦 微信公众号|搜一搜:蚝油菜花 🥦

相关文章
|
19天前
|
存储 人工智能 缓存
Mooncake:月之暗面Kimi联合清华等机构推出的大模型推理架构
Mooncake是由月之暗面Kimi联合清华大学等机构共同开源的大模型推理架构。该架构以KVCache为中心,通过分布式设计和资源优化,显著提升了大模型推理的吞吐量和效率,同时降低了算力开销。Mooncake在长上下文场景中表现出色,支持多种应用场景,如自然语言处理、内容推荐系统和搜索引擎等。
87 6
Mooncake:月之暗面Kimi联合清华等机构推出的大模型推理架构
|
5月前
|
数据采集 人工智能 测试技术
VBench 视频生成新榜首!Data-Juicer 沙盒实验室助力多模态数据与模型协同开发
Data-Juicer 沙盒实验室的提出和其大规模的效果验证,是对多模态数据与模型协同开发这一方向高潜力的有力佐证。
|
7月前
|
人工智能 自然语言处理 数据可视化
书生·浦语 2.0 开源!回归语言建模本质,综合性能领先开源社区,魔搭最佳实践来啦!
1月17日,上海人工智能实验室与商汤科技联合香港中文大学和复旦大学正式发布新一代大语言模型书生·浦语2.0(InternLM2),模型开源可商用,魔搭社区作为首发平台,支持大家第一时间下载体验。
|
机器学习/深度学习 人工智能 自然语言处理
剑桥、腾讯AI Lab等提出大语言模型PandaGPT:一个模型统一六种模态
剑桥、腾讯AI Lab等提出大语言模型PandaGPT:一个模型统一六种模态
161 0
|
机器学习/深度学习 达摩院 监控
最新开源!达摩院发布联邦学习框架FederatedScope
最新开源!达摩院发布联邦学习框架FederatedScope
305 0
|
机器学习/深度学习 人工智能 搜索推荐
40多位学者联合发布基础模型工具学习综述,开源BMTools平台(2)
40多位学者联合发布基础模型工具学习综述,开源BMTools平台
261 0
|
人工智能 自然语言处理 搜索推荐
40多位学者联合发布基础模型工具学习综述,开源BMTools平台(1)
40多位学者联合发布基础模型工具学习综述,开源BMTools平台
310 0
|
存储 人工智能 达摩院
CVPR 2022|达摩院开源低成本大规模分类框架FFC
CVPR 2022|达摩院开源低成本大规模分类框架FFC
120 0
|
传感器 人工智能 机器人
暴击专家模型!Meta最新多模态大模型ImageBind已开源(2)
暴击专家模型!Meta最新多模态大模型ImageBind已开源
273 0
|
传感器 人工智能 计算机视觉
暴击专家模型!Meta最新多模态大模型ImageBind已开源(1)
暴击专家模型!Meta最新多模态大模型ImageBind已开源
374 0

热门文章

最新文章