Computer Vision / Video Analytics

NVIDIA Cosmos Reason 후처리 학습으로 로보틱스 성능 극대화하기

Reading Time: 3 minutes

NVIDIA GTC 2025에서 처음 공개된 NVIDIA Cosmos Reason은 피지컬 AI와 로보틱스를 위한 오픈형 완전 커스터마이징 가능한 추론 VLM입니다. 이 VLM은 사전 지식, 물리 이해, 상식 추론을 활용해 현실 세계를 이해하고 행동할 수 있도록 로봇과 비전 AI 에이전트를 지원합니다. Cosmos Reason은 Hugging Face의 피지컬 추론 리더보드에서 최상위에 올랐습니다.

비디오와 텍스트 프롬프트가 주어지면, 시스템은 먼저 비전을 위한 인코더와 projector라 불리는 특수 변환기를 사용해 비디오를 토큰으로 변환합니다. 이렇게 생성된 비디오 토큰은 텍스트 프롬프트와 결합되어, 여러 LLM 모듈과 기법을 조합한 코어 모델로 전달됩니다. 모델은 단계별로 사고하고, 자세하고 논리적인 응답을 제공합니다.

Cosmos Reason은 감독학습 기반 파인튜닝강화학습으로 구축되어, 멀티모달 지각과 현실 세계의 의사결정을 연결합니다. 모델은 chain-of-thought 추론 능력을 활용해 별도의 인간 주석 없이 세계의 동역학을 이해합니다.

피지컬 AI 작업에 대한 파인튜닝은 Cosmos Reason의 기본 모델 성능을 10% 이상 끌어올리고, 강화학습은 추가로 5% 향상을 더해, 로보틱스와 자율주행 핵심 벤치마크에서 평균 65.7 점을 달성하였습니다.

그림 1. Cosmos Reason은 비디오와 텍스트를 입력받아 단계별로 사고하고, 강화학습을 통해 최적의 결정을 내립니다.

Cosmos Reason의 활용 사례

다음과 같은 로보틱스 및 피지컬 AI 애플리케이션에 적용할 수 있습니다.

  • 데이터 큐레이션과 어노테이션은 방대한 이종 학습 데이터를 자동으로 필터링·비평·주석화할 수 있도록 해 개발 과정을 가속화합니다.
  • 로봇 계획과 추론VLA(vision language action) 모델을 통해 신중하고 체계적인 의사결정을 가능하게 합니다. 로봇은 환경을 해석하고, 복잡한 명령을 받으면 이를 과업으로 분해해 상식에 기반해 실행하며, 낯선 환경에서도 동작할 수 있습니다.
  • NVIDIA의 비디오 검색 및 요약용 Blueprint로 구축한 비디오 분석 AI 에이전트는 대규모 기록/라이브 비디오에서 유용한 인사이트를 추출하고 근본 원인 분석을 수행합니다. 이는 도시 대중교통망, 공장, 창고 분석에 적합합니다.
비디오 1. 로봇 계획과 추론의 예시

Cosmos Reason 사용 방법

개발자는 Hugging Face에서 모델 체크포인트를 다운로드하고, GitHub에서 추론 스크립트와 후처리 학습 리소스를 받아 사용할 수 있습니다.

이 모델은 다양한 해상도와 프레임레이트의 비디오와, 질문이나 설명처럼 개발자의 의도를 명시하는 텍스트 프롬프트를 함께 입력받아, 그에 맞춰 추론하고 응답하도록 동작합니다. 또한 prompt upsampler 모델을 사용해 텍스트 프롬프트를 개선할 수도 있습니다.

아래는 다음 비디오에 대해 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 문서를 살펴보시고, 다음 리소스도 함께 참고하세요.

build.nvidia.com에서 모델을 체험해 보세요.
Hugging Face에서 모델을 다운로드해 체크포인트로 실험을 시작하세요.
GitHub에서 인퍼런스후처리 학습 스크립트를 받아 데이터에 맞게 커스터마이징하세요.

NVIDIA 소식을 구독하고, LinkedInInstagramXFacebook의 NVIDIA AI를 팔로우하며, NVIDIA Cosmos Reason 포럼에 참여해 최신 정보를 받아보세요.

Discuss (0)

Tags