こんにちは!ABEJA で ABEJA Platform 開発を行っている坂井(@Yagami360)です。
今年の CES2025 にて、 NVIDIA から Cosmos という自動運転やロボティクス用のプラットフォームをリリースしたという発表が大々的にありました。
CES 2025での NVIDIA 発表動画は、以下を見ていただければと思います(Cosmos以外にも色々発表しています)
Cosmos は、NVIDIA が提唱している「フィジカル AI」の開発を促進するプラットフォームであり「世界基盤モデル」なるものを使っているとのことで、何やら凄そうな印象を受け、NVIDIA Omniverse との違いも気になったので、実際に Cosmos を動かしながらその機能を確かめてみました。
なお、本記事の動画は全体的に画質が悪いですが、これははてなブログのファイルアップロード制限により画質を落としているだけです。 実際にはもっと高解像度な動画を生成できるのでご了承ください。
NVIDIA Cosmos とは?
Cosmos は、NVIDIA 公式ページの説明によると「最先端の生成型世界基盤モデル (WFM)、高度なトークナイザー、ガードレール、高速データ処理、キュレーション パイプラインからなるプラットフォームであり、フィジカル AI システム (自動運転車 (AV) やロボットなど) の開発を加速する目的で作られています。」とのことでした。
これだけではよくわからないと思うのでもう少し具体的に説明すると、「世界基盤モデル(WFM)」を使用して{合成データ生成・データ拡張・合成データ評価・ガードレール}などの機能を提供しているプラットフォームであり、自動運転やロボティクス領域において、NVIDIA が掲げている「フィジカル AI」での開発を促進するためのプラットフォームのようです。
「フィジカル AI」については、以下の NVIDIA 公式ページを見てもらえればと思います。
世界基盤モデルというワードも出てきましたが、ここでいう世界基盤モデルとは、具体的には動画データを合成データとして生成しているモデルのようです。
但し単なる動画生成モデルではなく、物理法則が考慮されたフォトリアリスティックな動画生成を行なうモデルになっています。
物理法則が考慮されたというのは、例えば、重い物体が空中に浮いていっている・物体がテーブルを貫通している・影が光源と逆方向にでているなど重力・物体衝突・光の影響等が無視された動画生成ではなく、これらが物理的に正確に反映された動画が生成されるという意味になります。(そういった現実世界に近いという意味で、“世界基盤”という名前にしているのだと思います)
また世界基盤モデルには、記事作成時点で大まかに分けて拡散ベースのモデルと自己回帰モデルの2種類のモデルがあり、それぞれ長所短所があるのですが、これらを総称して世界基盤モデルと呼んでいるようです。実際には、後述で説明する Cosmos のコンポーネント毎に異なるモデルを利用する形になります。
なお NVIDIA Cosmos は、実際の自動運転やロボティクス開発においてこれ単体で完結可能なプラットフォームではなく、同じくフィジカル AI 開発促進プラットフォームである NVIDIA Omniverse と双方向連携しながら活用していく形になります。
この辺については、次回のブログ記事で説明する予定です。
Cosmos の主要コンポーネント

Cosmos には、記事作成時点で以下の3つの主要コンポーネントが存在します。
Cosmos Predict
世界基盤モデルを用いて、テキスト・画像・動画を入力としてフォトリアリスティックで物理的に正確な動画生成(合成データ生成)を行なうコンポーネントです。
text-to-world, image-to-world, video-to-world などでの動画生成を行なうことができます。
記事作成時点では、cosmos-predict1 と cosmos-predict2 という2つのレポジトリが存在しますが、cosmos-predict2 のほうが処理パフォーマンスが改善したレポジトリになっています。
text-to-world

テキストを入力として、(フォトリアリスティックで物理的に正確な)動画を生成するタスク
image-to-world

{テキスト・画像}を入力として、(フォトリアリスティックで物理的に正確な)動画を生成するタスク
Cosmos Transfer
世界基盤モデルを用いて、{テキスト・RGB動画・深度マップ情報}などを入力とした動画生成やデータ拡張(Data augmentation)を行なうコンポーネントです。
Cosmos Predict と同じく世界基盤モデルを使用しますが、Cosmos Transfer では{深度マップ情報・セグメンテーション情報・エッジ情報}からの動画生成やデータ拡張などの変換(Transfer)に焦点をおいた点が異なります。
詳細は別記事で説明しますが、Cosmos のロボティクスモデル開発における実際の活用方法は、この Cosmos Transfer によるデータ拡張になります。
深度マップ情報やセグメンテーション情報からの動画生成

データ拡張

Cosmos Reason
世界基盤モデルを用いて、合成データの評価を行うコンポーネントです。
Cosmos Predict や Cosmos Transfer で生成した合成データ(動画データ)の評価をテキストで行なうことができます
入力動画(合成データ) 出力テキスト(評価結果)
Assistant response: Okay, let's see. The user is asking if it's safe to turn right based on the video provided. First, I need to ... The key points here are the parked vehicles. There are cars parked on both sides of the road, ... Based on the video, turning right may not be entirely safe due to the following factors: ... (日本語訳:<考察>わかりました、見てみましょう。ユーザーは提供された動画に基づいて右折が安全かどうか尋ねています。まず、私は...。ここでの重要なポイントは駐車車両です。道路の両側に車が駐車されており、...。</考察> <回答>動画に基づくと、以下の要因により右折は完全に安全ではない可能性があります。...</回答>)
合成データ(Synthetic Data)の重要性
ここまでの概要説明で、Cosmos では動画の合成データ生成を行えることがわかったかと思いますが、このような合成データ(Synthetic Data)を生成できて何が嬉しいの?って部分について、ロボティクスの分野に絞って補足しておきます。
ロボティクス領域では近年 VLA モデルの活用が進んできていますが、VLA などの Transformer ベースのモデルはデータハングリーなモデルであり、大量の学習用データセットが必要になります(事後学習では少なくともOKですが、事前学習だと大量の学習用データセットが必要です)。また模倣学習で行う場合も、正解データが含まれる学習用データセットが多く必要になってきます。
しかしながら、インターネット上に公開されている OSS のロボティクス用の学習用データセットには限りがあります。
実際にロボットを人手で動かしながら学習用データセットを作成する方法も存在しますが、ロボットの実機が必要で、なおかつ人手での骨の折れる作業であり、特に大量の学習用データセットを作成しようとすると困難になるのかと思ってます。
そのため生成AIやシミュレーター等で合成データを大量生成し、それら大量データセットで学習しながらモデルの品質を高めることが有益となります。
上の説明は、ロボティクスの分野に絞った話で説明しましたが、合成データの有益性はロボティクスに限らず他のAIモデルでも同じような形になります。
実際に毎度おなじみの Gartner 予想でも、数年前時点から今後ますます合成データで学習した AI モデルが増えていくと予想されており、その重要性が高まっています。

Cosmos Predict による合成データ生成
それでは次に Cosmos を実際に動かしてみながらこれら機能を確認していきます。まずは Cosmos の主要コンポーネントである Cosmos Predict を動かしてみます。
Cosmos Predict には、記事作成時点で cosmos-predict1 と cosmos-predict2 のレポジトリが存在しますが、cosmos-predict2 のほうが処理パフォーマンスが大幅に改善されているようなので、今回の記事では cosmos-predict2 を使用します。
環境構築
Ampere 世代以降の GPU サーバーを準備する
まず世界基盤モデルの推論を行なうための GPU サーバーを準備してください。
Cosmos の世界基盤モデルでは、内部で flash-attention を使用しているので RTX 3000, 4000, 5000 番台や A100 などの Ampire 世代以降のGPUが必要になります。
自分の環境では、以下の環境にしました。なお今回は公式 docker コンテナで世界基盤モデルの推論を行なうので、Ubuntu と CUDAバージョンは任意になるかと思います。
- Ubuntu バージョン: 22.04 - GPU:A100 - GPU ドライババージョン: 575.51.03 - CUDA バージョン:12.9 - GPU メモリ: 40 ~ 50GB 以上 - CPU メモリ: 40 ~ 50GB 以上 - ディスク容量: 1TB 程度(Cosmos Predict と Cosmos Transfer の世界基盤モデルの学習済みチェックポイントだけで 500GB 以上のディスク容量が必要になります)NVIDIA NGC の API キーを作成する
Cosmos Predict の公式 docker がNGC 上に存在するので、以下サイトから NGC にログインして、SetUp 画面がら API キーを作成してください
NVIDIA NGC Container Registr にログインする
公式 docker image を pull できるように、以下コマンドで NGC の docker レジストリにログインしてください
docker login nvcr.ioユーザー名は
$oauthtokenで、パスワードは上記作成した API トークンになります。Cosmos Predict 2 のレポジトリを clone する
下記コマンドで cosmos-predict2 のレポジトリを clone してください
git clone https://github.com/nvidia-cosmos/cosmos-predict2 cd cosmos-predict2Cosmos Predict 2 をインストールする
今回は公式の docker を使用するので、以下のコマンドで image を pull してコンテナ接続するだけです。(事前に NGC のレジストリにログインしてないと認証エラーで pull できないことに注意してください)
# 公式 docker image を pull docker pull nvcr.io/nvidia/cosmos/cosmos-predict2-container:1.1 # docker コンテナを起動 docker run --gpus all -it --rm \ -v ${PWD}:/workspace \ -v ${PWD}/datasets:/workspace/datasets \ -v ${PWD}/checkpoints:/workspace/checkpoints \ nvcr.io/nvidia/cosmos/cosmos-predict2-container:1.1Cosmos Predict の実行環境の動作確認する
コンテナ内で以下のコマンドを実行して、正しく Cosmos Predcit の動作環境が動くか確かめてください
python /workspace/scripts/test_environment.pyHuggingFace にログインする
Cosmos Predict の世界基盤モデルの学習済みチェックポイントは、HuggingFace 上に保存されているので予め HuggingFace にログインしてチェックポイントをダウンロードできるようにしてください。
huggingface-cli login --token ${API_TOKEN}--token引数で指定する HuggingFace のAPI トークンは、以下 HuggingFace のページから事前に作成しておいてください。Hugging Face 上のモデルのアクセス権限を付与する
以下のサイトから世界基盤モデルで使用する 各 Hugging Face 上のモデルのアクセス権限を付与してください
学習済みチェックポイントをダウンロードする
Hugging Face から世界基盤モデルの学習済みチェックポイントをダウンロードしてください。今回の記事で利用するモデルは、以下のコマンドでダウンロードできます。
Cosmos-Predict2-2B-Text2Imagepython -m scripts.download_checkpoints --model_types text2image --model_sizes 2BCosmos-Predict2-2B-Video2Worldpython -m scripts.download_checkpoints --model_types video2world --model_sizes 2B --resolution 480 --fps 10Cosmos-Predict2-14B-Video2Worldpython -m scripts.download_checkpoints --model_types video2world --model_sizes 14B --resolution 480 --fps 10
他にもいくつかのモデルが存在します。気になる方は、以下の公式 README を見てもらえればと思います。
cosmos-predict2/documentations/setup.md at main · nvidia-cosmos/cosmos-predict2
世界基盤モデルは生成 AI モデルなので、各チェックポイントとも巨大なファイルサイズになっており数百 100 GB のディスク容量が必要になることに注意してください。
text-to-image での合成データ生成
まずNVIDIA Cosmos Predict の世界基盤モデルを使用して、入力テキストから画像生成を行なう text-to-image での画像生成を行います
コンテナに接続する
docker run --gpus all -it --rm \ -v ${PWD}:/workspace \ -v ${PWD}/datasets:/workspace/datasets \ -v ${PWD}/checkpoints:/workspace/checkpoints \ nvcr.io/nvidia/cosmos/cosmos-predict2-container:1.1text-to-image の推論スクリプトを実行する
コンテナ内で、以下コマンドを実行してください。
# 入力テキストを設定 # 日本語訳:ロボットアームが車のボンネットの下でボルトを締めている。そのツールヘッドが熟練したトルクで回転している。金属同士がぶつかる音がカチッと定位置に収まり、アームは短く一時停止した後、静かな油圧音とともに引き下がる。頭上のライトが光沢のある車体表面に反射し、散らばったツールや画面が背景で点滅している。精密工学のレンズを通して再構築されたガレージの光景である。 PROMPT="A robotic arm tightens a bolt beneath the hood of a car, its tool head rotating with practiced torque. The metal-on-metal sound clicks into place, and the arm pauses briefly before retracting with a soft hydraulic hiss. Overhead lights reflect off the glossy vehicle surface, while scattered tools and screens blink in the background—a garage scene reimagined through the lens of precision engineering." # text-to-image の推論スクリプトを実行 # GPUメモリに余裕があれば --offload_xxx 引数なしにすることで推論時間を短縮可能 python -m examples.text2image \ --prompt "${PROMPT}" \ --model_size 2B \ --offload_guardrail \ --save_path output/text2image_2b.jpg上記推論スクリプト実行後に、以下のような画像(合成データ)が生成されます。
入力テキストの内容に従って、フォトリアリスティックな画像が生成されていることがわかるかと思います。
入力テキスト 出力画像 A robotic arm tightens a bolt beneath the hood of a car, its tool head rotating with practiced torque. The metal-on-metal ... 
text-to-world での合成データ生成
次に NVIDIA Cosmos Predict の世界基盤モデルを使用して、入力テキストから物理法則が考慮されたフォトリアリスティックな動画生成を行なう text-to-world での動画生成を行います。
コンテナに接続する
docker run --gpus all -it --rm \ -v ${PWD}:/workspace \ -v ${PWD}/datasets:/workspace/datasets \ -v ${PWD}/checkpoints:/workspace/checkpoints \ nvcr.io/nvidia/cosmos/cosmos-predict2-container:1.1text-to-world の推論スクリプトを実行する
コンテナ内で、以下コマンドを実行してください。
# 入力テキストを設定 # 日本語訳: 現代の自動車工場内で稼働する自律溶接ロボットアーム。明るい頭上照明の下で、精密に車体フレームを溶接しながら火花を散らしている。 PROMPT="An autonomous welding robot arm operating inside a modern automotive factory, sparks flying as it welds a car frame with precision under bright overhead lights." # text-to-world の推論スクリプトを実行 # GPUメモリに余裕があれば --offload_xxx 引数なしにすることで推論時間を短縮可能 python -m examples.text2world \ --model_size 2B \ --resolution 480 \ --fps 10 \ --prompt "${PROMPT}" \ --offload_guardrail \ --offload_prompt_refiner \ --save_path output/text2world_2b.mp4上記推論スクリプト実行後に、以下のような動画(合成データ)が生成されます。
入力テキストの内容に従って、物理法則が考慮されたフォトリアリスティックな動画が生成されていることがわかるかと思います。
入力テキスト 出力動画 An autonomous welding robot arm operating inside a modern automotive factory, sparks flying as it welds a car frame with precision under bright overhead lights 
image-to-world での合成データ生成
次に NVIDIA Cosmos Predict の世界基盤モデルを使用して、{入力テキスト・入力画像}のペアから物理法則が考慮されたフォトリアリスティックな動画生成を行なう image-to-world での動画生成を行います。
コンテナに接続する
docker run --gpus all -it --rm \ -v ${PWD}:/workspace \ -v ${PWD}/datasets:/workspace/datasets \ -v ${PWD}/checkpoints:/workspace/checkpoints \ nvcr.io/nvidia/cosmos/cosmos-predict2-container:1.1image-to-world の推論スクリプトを実行する
コンテナ内で、以下コマンドを実行してください。
# 入力テキストを設定 # 日本語訳: 現代の自動車工場内で稼働する自律溶接ロボットアーム。明るい頭上照明の下で、精密に車体フレームを溶接しながら火花を散らしている。 PROMPT="An autonomous welding robot arm operating inside a modern automotive factory, sparks flying as it welds a car frame with precision under bright overhead lights." # image-to-world の推論スクリプトを実行する # GPUメモリに余裕があれば --offload_xxx 引数なしにすることで推論時間を短縮可能 python -m examples.video2world \ --model_size 2B \ --resolution 480 \ --fps 10 \ --offload_guardrail \ --offload_prompt_refiner \ --input_path assets/video2world/example_input.jpg \ --num_conditional_frames 1 \ --prompt "${PROMPT}" \ --save_path output/video2world_2b.mp4上記推論スクリプト実行後に以下のような動画(合成データ)が生成されます。
入力テキストと入力画像の内容に従って、物理法則が考慮されたフォトリアリスティックな動画が生成されていることがわかるかと思います
入力テキスト 入力画像 出力動画 An autonomous welding robot arm operating inside a modern automotive factory, sparks flying as it welds a car frame ...

video-to-world での合成データ生成
最後に NVIDIA Cosmos Predict の世界基盤モデルを使用して、{入力テキスト・入力動画}のペアから物理法則が考慮されたフォトリアリスティックな動画生成を行なう video-to-world での動画生成を行います。
コンテナに接続する
docker run --gpus all -it --rm \ -v ${PWD}:/workspace \ -v ${PWD}/datasets:/workspace/datasets \ -v ${PWD}/checkpoints:/workspace/checkpoints \ nvcr.io/nvidia/cosmos/cosmos-predict2-container:1.1video-to-world の推論スクリプトを実行する
コンテナ内で、以下コマンドを実行してください。
# 入力テキストを設定 # 日本語翻訳: 車内から撮影された一人称視点の映像で、明るい日差しに包まれた静かな郊外の街路を捉えている。道路の両側には駐車した車が並び、通りの向かい側には住宅や小さな店舗と思われる建物が見える。交差点の中央付近にはSTOPサインが目立つように設置されている。空は澄んだ青色で、頭上で太陽が明るく輝き、舗装道路に長い影を落としている。通りの左側には、側面に何らかの文字が書かれたバンを含む複数の車両が駐車している。通りの向こう側では、2つのゴミ箱の近くに白いバンが駐車し、その先に赤いSUVが駐車している。両側の建物は様々な建築様式が混在しており、平屋根のものもあれば傾斜屋根のものもある。頭上には多数の電線が通りを横切って張られ、背景にはいくつかの木々が見え、建物の景色を部分的に遮っている。映像が進むにつれて、白い車のトラックが隣接する対向車線に右折で進入する。自車両は減速して停車し、その車が完全に対向車線に入るまで待ってから進行する。歩行者は通りを歩き続けている。他の車両は縁石沿いに駐車されたまま静止している。それ以外では場面は静的で、環境に大きな変化はなく、追加の物体がフレームに入ることもない。映像の終わりまでに、白い車のトラックはカメラのビューから移動し、残りの場面は開始時と同じ構成と照明条件を保ちながら、ほぼ変わらないままである。 PROMPT="A point-of-view video shot from inside a vehicle, capturing a quiet suburban street bathed in bright sunlight. The road is lined with parked cars on both sides, and buildings, likely residential or small businesses, are visible across the street. A STOP sign is prominently displayed near the center of the intersection. The sky is clear and blue, with the sun shining brightly overhead, casting long shadows on the pavement. On the left side of the street, several vehicles are parked, including a van with some text on its side. Across the street, a white van is parked near two trash bins, and a red SUV is parked further down. The buildings on either side have a mix of architectural styles, with some featuring flat roofs and others with sloped roofs. Overhead, numerous power lines stretch across the street, and a few trees are visible in the background, partially obscuring the view of the buildings. As the video progresses, a white car truck makes a right turn into the adjacent opposite lane. The ego vehicle slows down and comes to a stop, waiting until the car fully enters the opposite lane before proceeding. The pedestrian keeps walking on the street. The other vehicles remain stationary, parked along the curb. The scene remains static otherwise, with no significant changes in the environment or additional objects entering the frame. By the end of the video, the white car truck has moved out of the camera view, the rest of the scene remains largely unchanged, maintaining the same composition and lighting conditions as the beginning." # video-to-world の推論スクリプトを実行する # GPUメモリに余裕があれば --offload_xxx 引数なしにすることで推論時間を短縮可能 python -m examples.video2world \ --model_size 2B \ --resolution 480 \ --fps 10 \ --offload_guardrail \ --offload_prompt_refiner \ --input_path assets/video2world/input3.mp4 \ --num_conditional_frames 1 \ --prompt "${PROMPT}" \ --save_path output/video2world_2b.mp4上記推論スクリプト実行後に以下のような動画が生成されます。
入力テキストと入力動画の内容に従って、物理法則が考慮されたフォトリアリスティックな動画が生成されていることがわかるかと思います。入力テキストの「映像が進むにつれて、白い車のトラックが隣接する対向車線に右折で進入する。・・・」という部分の指示に従って、出力動画では入力動画では存在しなかった白い車が右折する様子が写っているのに驚きました。
入力テキスト 入力動画 出力動画 A point-of-view video shot from inside a vehicle, capturing a quiet suburban street ...

後編に続く
後編記事では、Cosmos Transfer を実際に動かしながらその機能を確かめてみます
We Are Hiring!
株式会社ABEJAでは共に働く仲間を募集しています!
ロボティクスやLLMに興味ある方々!機械学習プロダクトに関わるフロントエンド開発やバックエンド開発に興味ある方々! こちらの採用ページから是非ご応募くださいませ!
