计算机视觉/视频分析

通过后训练 NVIDIA Cosmos Reason 极大提升机器人性能

NVIDIA Cosmos Reason 是一个开放且完全可定制的物理 AI 和机器人视觉语言模型 (VLM) ,于 NVIDIA GTC 2025 上首次发布。VLM 使机器人和视觉 AI 智能体能够利用先验知识、物理理解和常识进行推理,从而理解现实世界并采取行动。

在给定视频和文本提示时,该系统首先使用视觉编码器和一种称为投影仪的特殊转换器将视频转换为 token。这些视频 token 与文本提示结合在一起,并输入到核心模型中,该模型使用 LLM 模块和技术的组合。该模型会逐步思考并给出详细、符合逻辑的回答。

Cosmos Reason 采用监督式微调强化学习构建,可连接多模态感知和现实世界决策。它使用链式思维推理功能来理解世界动态,无需人工注释。

在物理 AI 任务上的微调使 Cosmos Reason 的基础模型性能提高了 10% 以上,而强化学习又增加了 5% 的性能,使该模型在机器人和自动驾驶汽车应用的关键基准测试中平均得分达到 65.7。

A diagram showing the Cosmos Reason process: on the left, video and text inputs enter the model as tokens; in the center, the model processes the information and generates step-by-step reasoning with a large language model backbone to produce a final text response for real-world decision-making.
图 1。Cosmos Reason 能够接收视频和文本,逐步思考,并通过强化学习做出最佳决策。

Cosmos Reason 的用例

一些机器人和物理 AI 应用包括:

  • 数据管理和标注使开发者能够自动过滤、批判和标注大量多样化的训练数据集。
  • 机器人规划和推理,通过机器人视觉语言动作 (VLA) 模型进行有意识、有条不紊的决策。机器人可以解释环境,并在收到复杂命令时将其分解为任务,并使用常识执行这些任务,即使在不熟悉的环境中也是如此。
  • 使用 NVIDIA Blueprint 构建的视频分析 AI 智能体可以提取有价值的见解,并对大量录制或直播视频进行根本原因分析。这非常适合分析城市交通网络、工厂和仓库。
视频 1。机器人规划和推理示例

如何使用 Cosmos Reason?

开发者可以从 Hugging Face 下载模型检查点,并从 GitHub 获取推理脚本和后训练。

该模型可以以不同的分辨率和帧率接收视频,以及指定开发者意图的文本提示(例如问题或解释),从而指导模型进行推理并做出相应回应。开发者还可以使用提示上采样器模型来改进文本提示。以下是使用 Cosmos Reason 进行推理的视频片段:

from transformers import AutoProcessor
from vllm import LLM, SamplingParams
from qwen_vl_utils import process_vision_info

# You can also replace the MODEL_PATH by a safetensors folder path mentioned above
MODEL_PATH = "nvidia/Cosmos-Reason1-7B"

llm = LLM(
    model=MODEL_PATH,
    limit_mm_per_prompt={"image": 10, "video": 10},
)

sampling_params = SamplingParams(
    temperature=0.6,
    top_p=0.95,
    repetition_penalty=1.05,
    max_tokens=4096,
)

video_messages = [
    {"role": "system", "content": "You are a helpful assistant. Answer the question in the following format: <think>\nyour reasoning\n</think>\n\n<answer>\nyour answer\n</answer>."},
    {"role": "user", "content": [
            {"type": "text", "text": (
                    "Is it safe to turn right?"
                )
            },
            {
                "type": "video", 
                "video": "assets/sample.mp4",
                "fps": 4,
            }
        ]
    },
]

# Here we use video messages as a demonstration
messages = video_messages

processor = AutoProcessor.from_pretrained(MODEL_PATH)
prompt = processor.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True,
)
image_inputs, video_inputs, video_kwargs = process_vision_info(messages, return_video_kwargs=True)

Cosmos Reason 微调

监督式微调 (SFT) 可以提高模型在特定任务上的能力。例如,使用 robovqa 数据集进行训练可以提高模型在机器人特定视觉问答场景中的性能。

FPS = 1
MAX_PIXELS = 81920

class CosmosSFTDataset(Dataset):
    def setup(self, config: Config, tokenizer: AutoTokenizer, *args, **kwargs):
        """
        Called by launcher after being mounted
        """
        self.config = config
        self.tokenizer = tokenizer

        if config.train.train_policy.dataset.split:
            if isinstance(config.train.train_policy.dataset.split, list):
                dataset_list = []
                for split_name in config.train.train_policy.dataset.split:
                    dataset_list.append(self.dataset[split_name])
                self.dataset = ConcatDataset(dataset_list)
            else:
                assert isinstance(config.train.train_policy.dataset.split, str)
                self.dataset = self.dataset[config.train.train_policy.dataset.split]

        # get multi-modal files paths
        cosmos_cache_dir = os.environ.get(
            "COSMOS_CACHE", os.path.join(os.path.expanduser("~"), ".cache/cosmos/")
        )
        video_clips_path = os.path.join(
            cosmos_cache_dir,
            "datasets",
            basename_from_modelpath(config.train.train_policy.dataset.name),
            config.train.train_policy.dataset.subset,
            "video_clips",
        )

    def __getitem__(self, idx: int) -> tuple[str, str]:
        """
        Return a tuple of (prompt, reference answer)
        """
        payload = self.dataset[idx]
        conversations = copy.deepcopy(payload["conversations"])

        for conv in conversations:
            if conv["role"] == "user":
                assert isinstance(conv["content"], str), "User message must be string"
                # Rewrite to support image/video tokens
                content = [
                    {
                        "type": "video",
                        "video": self.mm_files_paths[payload["video"].split("/")[-1]],
                        "max_pixels": MAX_PIXELS,
                        "fps": FPS,
                    },
                    {
                        "type": "text",
                        "text": conv["content"],
                    },
                ]
                conv["content"] = content

        return conversations

GitHub 上查找更多信息和微调脚本。

Cosmos Reason 经过优化,可在 NVIDIA GPU 上实现最佳性能。为了运行模型,开发者可以设置 Docker 环境或在其环境中运行模型。

对于视觉 AI 工作流,开发者可以从边缘到云端使用 VLM,在 NVIDIA DGX Spark、NVIDIA RTX Pro 6000、NVIDIA AI H100 Tensor Core GPU 或 NVIDIA DGX Cloud 上的 NVIDIA Blackwell GB200 NVL72 等 GPU 上运行。

开始使用

探索 Cosmos 文档,获取深入教程、实施细节和实际用例,以及以下资源:

订阅 NVIDIA 新闻关注 NVIDIA AI 上的 LinkedInInstagram、X 和 Facebook以及加入 NVIDIA Cosmos Reason 论坛及时了解最新动态

 

 

标签