HuggingFace镜像/MolmoPoint-Vid-4B
模型介绍文件和版本分析

MolmoPoint-Vid-4B

MolmoPoint-Vid-4B 是由艾伦人工智能研究所(Ai2)开发的全开源视觉语言模型(VLM),专门用于视频指向任务。 该模型使用锚定标记而非文本坐标进行指向,详细信息请参见我们的论文。 本模型仅针对视频指向任务进行训练,通用模型请参见 MolmoPoint-8B。

请注意,Hugging Face 上的 MolmoPoint 模型不支持训练,训练代码请参见我们的 GitHub 仓库。

快速链接:

  • 💬 代码
  • 📂 所有模型
  • 📃 论文
  • 📝 博客

快速开始

设置 Conda 环境

conda create --name transformers4571 python=3.11
conda activate transformers4571
pip install transformers==4.57.1
pip install torch pillow einops torchvision accelerate decord2

推理

我们建议使用 logits_processor=model.build_logit_processor_from_inputs(model_inputs) 运行 MolmoPoint,以确保点标记以有效的方式生成。

在 MolmoPoint 中,点不是以坐标形式生成,而是作为一系列特殊标记生成。要将这些标记解码回点,需要来自预处理器的一些额外元数据。该元数据由预处理器通过 return_pointing_metadata 标志返回。然后,model.extract_video_points 会执行解码操作,返回一个包含(时间戳、object_id、pixel_x、pixel_y)的输出点列表。

视频指向示例:

from transformers import AutoProcessor, AutoModelForImageTextToText
import torch
import numpy as np

checkpoint_dir = "allenai/MolmoPoint-Vid-4B"

model = AutoModelForImageTextToText.from_pretrained(
    checkpoint_dir,
    trust_remote_code=True,
    dtype="auto",
    device_map="auto",
)

processor = AutoProcessor.from_pretrained(
    checkpoint_dir,
    trust_remote_code=True,
    padding_side="left",
)

video_path = "https://storage.googleapis.com/oe-training-public/demo_videos/many_penguins.mp4"
video_messages = [
    {
        "role": "user",
        "content": [
            dict(type="text", text="Point to the penguins"),
            dict(type="video", video=video_path),
        ]
    }
]

inputs = processor.apply_chat_template(
    video_messages,
    tokenize=True,
    add_generation_prompt=True,
    return_tensors="pt",
    return_dict=True,
    padding=True,
    return_pointing_metadata=True
)
metadata = inputs.pop("metadata")
inputs = {k: v.to("cuda") for k, v in inputs.items()}

with torch.inference_mode(), torch.autocast("cuda", dtype=torch.bfloat16):
    output = model.generate(
        **inputs,
        logits_processor=model.build_logit_processor_from_inputs(inputs),
        max_new_tokens=200
    )

    generated_tokens = output[:, inputs['input_ids'].size(1):]
    generated_text = processor.post_process_image_text_to_text(generated_tokens, skip_special_tokens=False, clean_up_tokenization_spaces=False)[0]
    video_points = model.extract_video_points(
        generated_text,
        metadata["token_pooling"],
        metadata["subpatch_mapping"],
        metadata["timestamps"],
        metadata["video_size"]
    )

    # points as a list of [object_id, image_num, x, y]
    # For tracking, object_id uniquely identifies objects that might appear multiple frames.
    print(np.array(video_points))
# expected:
[[  1.           9.         188.86666667 177.65925926]
 [  2.          15.5        197.66666667 288.35555556]
 [  3.          17.         153.26666667 327.7037037 ]
 [  4.          23.5         46.6        406.87407407]
 [  5.          23.5         91.         406.87407407]
 [  6.          23.5        135.53333333 438.4       ]
 [  7.          23.5        233.26666667 477.98518519]
 [  8.          25.         184.33333333 280.2962963 ]
 [  9.          25.         268.86666667 232.88888889]
 [ 10.          27.         171.         335.76296296]
 [ 11.          30.         193.26666667 304.        ]
 [ 12.          32.          64.33333333 201.36296296]
 [ 13.          32.         202.2        414.6962963 ]
 [ 14.          38.5        184.33333333 383.17037037]
 [ 15.          40.5        335.53333333  82.84444444]
 [ 16.          40.5        117.66666667 201.36296296]
 [ 17.          40.5         95.53333333 501.68888889]
 [ 18.          47.         259.93333333 304.        ]
 [ 19.          47.         153.26666667 501.68888889]]

许可与使用

本模型采用 Apache 2.0 许可协议。其旨在依据 Ai2 的《负责任使用指南》用于研究和教育用途。本模型基于第三方数据集训练而成,该数据集仅允许用于学术和非商业研究。请仔细查阅来源信息,以确定本模型是否适合您的使用场景。

下载使用量0