TECHNOLOGY 技術紹介
【NVIDIA】cosmos-transfer2.5を使ってみた【構造(形状・動き)を保ったまま見た目だけ作り直す条件付き映像生成AI】
【2026年6月時点の記事です】
はじめに:
NVIDIAのcosmos-transfer 2.5について理解するために、機能を一通り使ってみました。また、データセットの拡張ができるか検証しました。
◆ cosmos-transfer 2.5とは?
NVIDIAのcosmos-transfer2.5とは、シミュレーション映像を本物そっくりの映像に変換するAIです。
構造(形状・動き)を保ったまま見た目だけ作り直す条件付き映像を生成AIで、リアル映像もシミュレーションも、現場で撮影したかのようなリアルな映像へ変換することができます。
ロボットにAIを学習させるには大量の映像データが必要ですが、実際の現場、とくに危険な環境での撮影は困難で、データ収集には多大なコストと時間がかかります。
cosmos-transfer2.5を活用すると、IsaacSimなどの3Dシミュレーターで作成したCG映像を入力するだけで、現場で撮影したかのようなリアルな映像に変換することができます。
これにより、危険な環境に立ち入ることなく、AIの訓練に使えるリアルな映像データを大量に、低コストで生成できる可能性があります。
今回やったこと
◆ 検証準備
■ GPU:A100 80GB
■ コマンド
sudo apt install git-lfs
git lfs install
git clone https://github.com/nvidia-cosmos/cosmos-transfer2.5.git
cd cosmos-transfar2.5
git lfs pull
sudo apt update && sudo apt -y install curl ffmpeg libx11-dev tree wget
curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env
uv python install 3.10
uv sync --extra=cu128 --python 3.10
source .venv/bin/activate
hf auth login
■ 使用した動画:黒いマットの上に逆さまに置かれたオレンジ色のカップを、テーブルの白い表面へと押し出している動作
■ 前処理: LeRobot動画をcosmos-reason2が処理可能なH.264形式へ変換。
ffmpeg -i assets/red_to_white.mp4 -c:v libx264 -crf 18 assets/red_to_white-h264.mp4
◆ cosmos-transfer 2.5の推論実行について
単一GPUでの実行は、以下のコマンドで行います。
python examples/inference.py -i -o
制御方式ごとに設定ファイルが用意されており、以下の4種類を検証しました。
■ Depth(深度):
深度マップを用いた制御。オブジェクトの立体的な形状・距離情報を保持する。
■ Edge(エッジ):
エッジ検出による制御。オブジェクトの輪郭・境界線を保持する
■ Segmentation(セグメンテーション):
領域分割による制御。オブジェクトの領域境界を保持するが、新規オブジェクトの生成も起こりやすい
■ Blur(ぼかし/vis):
ぼかし処理による制御。元動画への追従が最も強く、変化が出にくい
■ Multi-control:
上記の複数を組み合わせた制御
また、変化させたい部分を指定して、その部分だけ変更できるかを検証するために、以下を用いました。
1. マスクを用いた領域限定制御
制御入力を特定の領域にのみ適用したい場合、mp4形式の二値時空間マスクを定義することができます。
白ピクセルの領域には制御が適用され、黒ピクセルの領域には適用されません。
これにより、ロボットアームのみ・背景のみといった部分的な制御が可能になります。
→ cosmos-transfer 2.5にSAM2が入っているので、SAM2を使用しました。
その他、以下の機能がありました。
2. 蒸留モデル(Distilled Model)による高速推論(未検証)
通常モデルに対してDistilledモデルを使用する場合、以下2点の変更が必要です。
1. 設定ファイルにnum_steps: 4を追加(蒸留モデルは4ステップで動作)
2. 実行コマンドに--model=edge/distilledオプションを追加
通常モデルと比較して大幅に推論時間を短縮できる一方、93フレーム固定という制約があります。
◆ 検証
1.プロンプトそのままで生成
まず、cosmos-reason2編で生成したプロンプトを使用しました。
In this video, two robotic arms positioned on either side of a white table work together to attempt flipping an orange cup inverted on a black mat. The left arm initiates the action by grasping the cup and lifting it slightly before releasing it, causing the cup to fall back onto the mat. Meanwhile, the
right arm remains stationary throughout the sequence. Observing the process, a person dressed in a gray hoodie and black pants stands nearby, watching the
robots closely. The setting appears to be a laboratory or workshop, evidenced by medical equipment, chairs, and a tiled floor in the background. The scene
emphasizes robotic precision and collaboration, though the cup ultimately fails to be flipped successfully.
<日本語>
この動画では、白いテーブルの両側に配置された2本のロボットアームが連携して、
黒いマットの上に逆さまに置かれたオレンジ色のカップをひっくり返そうとしています。
左のアームが先に動き出し、カップをつかんで少し持ち上げた後、手を離すことでカップをマットの上に落とします。
一方、右側のアームはこの一連の動作の間、ずっと静止したままです。
その様子を、グレーのパーカーと黒いズボンを着た人物が近くで立ち止まり、ロボットたちをじっと見つめています。
背景には医療機器や椅子、タイル張りの床が見えることから、この場所は実験室か作業場であるようです。このシーンはロボットの精密さと協調性を強調していますが、結局、カップを裏返すことは成功しませんでした。
このプロンプトを使って、multicontrolで動画生成をしたところ、30分かからないくらいで動画を生成できました。
元動画と比べて背景のロボットが少し変化しています。
使用した重みは、デフォルトで入っていた以下の通りです。
{
"name": "robot_multicontrol",
"prompt_path": "../robot_prompt.txt",
"video_path": "../robot_input.mp4",
"guidance": 3,
"depth": {
"control_path": "../depth/robot_depth.mp4",
"control_weight": 1.0
},
"edge": {
"control_path": "../edge/robot_edge.mp4",
"control_weight": 0.2
},
"seg": {
"control_path": "../seg/robot_seg.mp4",
"control_weight": 1.0
},
"vis": {
"control_weight": 0.5,
"preset_blur_strength": "high"
}
}
続いて、各バリアント(用途別の派生モデル)だけで生成してみました。
① Depth(深度)
背景や色味などが変わり、ハンドとマットが一致して見えづらくなってしまっています。
② Edge(エッジ)
■ 同じく背景や色味が変わり、コップの色がオレンジではなくなっています。
■ 中間動画ではハンドとマットが一致して見えづらくなってしまっています。
③ Seg(セグメンテーション)
1番背景の変化が激しく、黒いマットが増えています。
④ Vis(ぼかし)
ぼかしを付けるだけなので、あまり変化がありません。
2.プロンプトの間違っている部分を正しく修正して動画を生成
cosmos-reason2で生成したスクリプトは、表現が間違っている部分があったので、修正してから動画を生成してみました。
In this video, two robotic arms positioned on either side of a white table
work in coordination to push an orange mug—placed upside down on a green
mat—onto the white surface of the table. The left arm begins to move, pushes
the mug, and then returns its hand to its original position, thereby moving
the mug. Meanwhile, the right arm remains completely still throughout this
sequence of movements. A person wearing a gray suit and black pants stands
nearby, staring intently at the robots. The background appears to be an office
or lab environment. In the background, you can see a collaborative robot arm
mounted on a stand with casters, an office chair, and a wooden door. The floor
is covered with beige carpet.
<日本語>
この動画では、白いテーブルの両側に配置された2本のロボットアームが連携して、黒いマットの上に逆さまに置かれたオレンジ色のカップを、
テーブルの白い表面へと押し出しています。
左のアームが動き出し、カップを押した後、手を元の位置に戻すことで、カップを移動させます。一方、
この一連の動きの間、右側のアームは完全に静止したままです。灰色のパーカーと黒いズボンを着た人物が近くに立ち、
ロボットたちをじっと見つめています。背景はオフィスか研究室のような環境に見えます。
背景には、キャスター付きのスタンドに取り付けられた協働ロボットアーム、オフィスチェア、そして木製のドアが見えます。
床はベージュのカーペットで覆われています。
◆ 結果
最初と比較して、各動画の背景状況のばらつきが小さくなりました。
完全に統一しようとすると、壁や椅子の色までプロンプトで指定する必要がありそうです。
① Multicontrol
入力動画と同じような動画を生成できている
② Depth(深度)
■ 左側にあるドア数が減り、壁の色がグレーになっている
■ ロボットの色が白くなっている
■ 映っている人の服にジッパーがついている
■ 動画の最初のほうで、コップが上向きになっているように見える
③ Edge(エッジ)
背景の色味は異なるが、空間の再現能力は高い
④ Seg(セグメンテーション)
■ コップの形状や背景に乱れがある
■ ロボットのアームが全く別物になっている
■ マットの色が黒からグレーに変化している
⑤ Vis(ぼかし)
元の動画から変化はあまりない
3. 服装、コップの形状、マットの色を変更したプロンプトで生成
次に、元動画からあえて変化を与えたプロンプトを作成し、内容に沿った動画を生成できるか試しました。
■ 変更した内容
① 服装:パーカ→シャツ
② コップの形状:コップ→マグカップ
③ マットの色:黒→緑
In this video, two robotic arms positioned on either side of a white table
work in coordination to push an orange mug—placed upside down on a green
mat—onto the white surface of the table. The left arm begins to move, pushes
the mug, and then returns its hand to its original position, thereby moving
the mug. Meanwhile, the right arm remains completely still throughout this
sequence of movements. A person wearing a gray suit and black pants stands
nearby, staring intently at the robots. The background appears to be an office
or lab environment. In the background, you can see a collaborative robot arm
mounted on a stand with casters, an office chair, and a wooden door. The floor
is covered with beige carpet.
<日本語>
この動画では、白いテーブルの両側に配置された2本のロボットアームが協調して、
緑のマットの上に逆さまに置かれたオレンジのマグカップをテーブルの白い表面に押し出そうとしています。
左アームが動き始め、マグカップを押し、その後元の位置に戻ることでカップを移動させます。
一方、右アームは一連の動作を通じて完全に静止したままです。
グレーのシャツと黒いパンツを着た人物が近くに立ち、ロボットをじっと見つめています。
背景はオフィスまたはラボ環境です。
背景には、キャスター付きスタンドに取り付けられた協働ロボットアーム、オフィスチェア、木製ドアが見えます。
床はベージュのカーペットで覆われています。
◆ 結果
■ マグカップの取っ手が付け加えられるものはありませんでした。(形状変化には弱い可能性あり)
■ 色の変化はできるもの、服装をシャツにできるものなど、バリアントによって得意不得意がありそうです。
■ ひとまずは、背景などの情報量が少ない動画の色変更だけ試すのが良さそうです。
■ マットの色は、greenと言ってもいろんな色があるようで、バリアントによって異なる色になってしまいました。
① Multicontrol
■ 映っている人間の服装だけが、若干変化した。
■ 重みを調整 or マスク処理で対応できそうか。
② Depth(深度)
■ マットの色を変更、服装の変更ができた。
■ 映っている人間が、黒い手袋をしている。
③ Edge(エッジ)
マットの色は変更できたが、映っている人間の服装は変化せず。
④ Seg(セグメンテーション)
■ 検証1の試行と同様に、マットの数が増えた。
■ 映っている人間が、黒い手袋をしている。
⑤ Vis(ぼかし)
元動画とあまり変わらないが、映っている人の服装だけ少しシャツになっている。
ここまでのまとめ
cosmos-reason2で生成したプロンプトは、そのままでは精度が低いため人の手で修正してから使う必要がありそうです。
また、使用するバリアントによって、同じ動画と、その内容を再現する同じプロンプトを与えても生成結果が大きく異なりました。
cosmos-transfer2.5で動画を生成する際は、どこまでの変化を許容するかを考えた上で、どのバリアントを使うかやそれぞれの重みをどのように設定するかを決める必要がありそうです。
また、cosmos-transfer2.5を使ってみて、A100 80GBを使用しても5秒程度の動画の生成に30分かかっていることから、現時点ではデータセットの拡張に使用することも考えることは難しそうでした。
今回使用した動画は背景などの情報が多く、変更する部分が混乱してしまった可能性があるので、次は「SO-101」を使用し、背景などの情報も少ない動画で検証します。
4. SO-101を動作させた動画で、キューブの色を変更する
まず、cosmos-reason2を使用してSO-101でキューブを移動させている動画のプロンプトを作成し、内容を正しく修正した上でキューブの色を「青色」に変更しました。
This video shows two green robotic arms working on a black table.
The camera is positioned above the table, providing a clear view of the entire workspace.
In the center of the table is a black tray, surrounded by three blue cubes scattered around it.
The robotic arm on the right moves actively, manipulating these cubes.
At first, the robotic arm remains stationary, observing the situation. Then,
it begins manipulating the cubes. It picks up one cube and places it inside the circular dish. After that,
it repeats this action, picking up another cube and placing it in the dish. The arm continues this process,
moving back and forth between the cubes and the plate. Meanwhile, the left arm
remains almost completely still. Looking at the whole scene,
it is clear that only the right robotic arm is attempting to move the cubes onto the plate.
<日本語>
この動画では、黒いテーブルの上で2本の緑色のロボットアームが作業している様子が映し出されています。
カメラはテーブルの上方に設置されており、作業スペース全体がはっきりと見えます。
テーブルの中央には黒いトレイがあり、その周囲には3つの青い立方体が散らばっています。
右側のロボットアームは活発に動き、これらの立方体を操作しています。
最初は、ロボットアームは静止したまま状況を観察しています。その後、
立方体の操作を開始します。1つの立方体を拾い上げ、円形の皿の中に置きます。その後、
この動作を繰り返して、別の立方体を拾い上げ、皿に置きます。アームはこのプロセスを続け、
立方体と皿の間を行き来します。一方、左のアームは
ほぼ完全に静止したままです。全体を見渡すと、
立方体を皿に移そうとしているのは右のロボットアームだけであることが明らかです。
◆ 各バリアント(用途別の)で比較
① Multicontrol
visの重みが小さいのに、色の変化がなかった
"depth": {
"control_weight": 1.0
},
"edge": {
"control_weight": 0.2
},
"seg": {
"control_weight": 1.0
},
"vis": {
"control_weight": 0.5,
"preset_blur_strength": "high"
}
② Depth(深度)
■ 1個目のキューブを移動中に、キューブが1つ増えている。
■ ロボットアームの色が不安定で、全体的な質感も大きく変わっている。
③ Edge(エッジ)
■ キューブの2個目だけを掴んだときに色が黒くなるが、青色への変化はできている。
■ アームの手先の色が安定しない
④ Seg(セグメンテーション)
色変化はしたものの、アームの形状やキューブの個数、位置関係が変わってしまった。
⑤ Vis(ぼかし)
特に変化なし
◆ マスクを使った動画生成
キューブの色以外は変更したくなかったため、SAM2でマスクを作成し、変更可能箇所を指定して1番変化の大きかった「seg」で動画を生成してみました。
動画の長さもあるため、mask生成と動画生成に90分以上かかりました。
最初の時点でキューブの色を変更することには成功したものの、掴む際にキューブが隠れたり、皿の上に置いた時に色の見え方が変わることでマスクやsegが外れてしまい、色がおかしくなってしまいました。
マスクを工夫して、キューブよりも大きなサイズで覆うことで隠れたり皿の上で色が多少変わっても、ずっと認識できるようにしたものの、キューブを掴んだり置いたりした際に色が白に変わってしまいました。
動画の生成に時間がかかりすぎることから、cosmosをlerobotのデータセットの拡張に使いたい場合は、エピソードあたり5秒程度のものにしか使えなさそうです。
まとめ:やってみてわかったこと
今回の検証では、適切なバリアント選びとプロンプトの作り方によって、色変更ができることがわかりました。
また、動画のうち一部分だけを変更したい場合は、マスクを使うことが有効であるということもわかりました。
しかし、マスク生成や動画の生成に時間がかかりすぎることから、lerobotのデータセットの拡張に使いたい場合は、今のところはcosmosが有効であるとは言い難いと思われます。
おわりに
今後は、6月に公開された「cosmos3」を使用した検証も行う予定です。
CONTACT お問い合わせ
弊社へのお問い合わせは下記のページより承ります。
ご質問やご依頼など、お気軽にご連絡ください。