
NVIDIA Cosmos Transfer 2.5 で、エッジの閾値と vis の重みが車載映像の変換結果に与える影響を検証してみた
こんにちは、製造ビジネステクノロジー部 モビリティチーム の若槻です。
前回の記事では、NVIDIA Cosmos Transfer 2.5 を NVIDIA Brev の H100 で動かし、公式サンプルの晴天の車載映像を、霧・雨・夜の映像に変換してみました。
その変換の結果から、次の 2 点を仮説として立てました。
- エッジマップに輪郭が写っていない領域では、モデルは変換元の車載映像(以降、入力動画と呼ぶ)の内容を参照せず、プロンプトの文章だけから映像を生成している
vis制御は入力動画の大まかな明るさの配置を出力に残すため、明るさを変えるプロンプトの指示と両立しないことがある(夜の映像に変換するプロンプトで「空は暗い」と指定したにもかかわらず、出力の空は入力動画と同じく明るい灰色だった)
どちらも出力の画像から推測した仮説で、パラメータを変更して確かめてはいなかったので、本記事では変更する変数を 1 個に限った対照実験で確かめてみました。
結論としては、次の 2 点が分かりました。
vis.control_weightを0.24から0.05に下げた場合:夜の空は暗くなった。入力動画と異なる箇所の量は0.24と同程度だったpreset_edge_thresholdをmediumからvery_lowに下げた場合:エッジマップの輪郭は増えたが、別の建物に置き換わっていたビルは入力動画と同じ外観にならなかった。中央奥のビルが木に置き換わる副作用も出た
検証の設計
前回と同じ assets/car_example/ の車載映像に対して、次の 2 件の実験を行いました。
| 変更するパラメータ | 比較の基準 | |
|---|---|---|
| 実験① | preset_edge_threshold: medium → very_low |
medium で霧に変換した出力 |
| 実験② | vis.control_weight: 0.24 → 0.05 |
0.24 で夜に変換した出力 |
生成の設定を記述する JSON ファイル(spec)のうち、seed: 42、guidance: 7、num_steps: 35、edge.control_weight: 0.35、vis.preset_blur_strength: very_high、prompt(プロンプト)、negative_prompt(ネガティブプロンプト)は変更していません。
実験には、NVIDIA Brev の H100 PCIe 80GB × 1 のインスタンスを使いました。
※ プロンプトは前回の記事のものを書き直して使っており、比較の基準にした霧と夜の出力も、このプロンプトで生成し直しています。そのため、これらの画像は前回の記事の画像とは異なります。
実験①の spec は次のとおりです。霧の spec から name と preset_edge_threshold だけを変更しています。
{
"name": "car_fog_edge_verylow",
"video_path": "/ephemeral/work/cosmos-transfer2.5/assets/car_example/car_input.mp4",
"prompt": "A driving scene through a modern urban environment, captured from a dashcam inside a vehicle. Dense fog fills the air, heavily reducing visibility. Distant buildings fade into a uniform gray-white haze, and the upper floors of the glass-facade towers are barely visible. A black car directly ahead is still visible, but its outline is softened and its red tail lights glow through the fog. Trees and pedestrians on the left sidewalk appear as faint silhouettes. The multi-lane road surface is damp and reflects the diffuse light. Traffic cones and white arrow road markings remain visible on the asphalt. The camera stays static as the vehicle drives steadily toward the intersection.",
"negative_prompt": "Clear sunny weather, high visibility, crisp sharp horizon, cloudless sky, bright sunshine, transparent air.",
"guidance": 7,
"num_steps": 35,
"seed": 42,
"edge": {
"control_weight": 0.35,
"preset_edge_threshold": "very_low"
},
"vis": {
"control_weight": 0.24,
"preset_blur_strength": "very_high"
}
}
実験②の spec は次のとおりです。夜の spec から name と vis.control_weight だけを変更しています。
{
"name": "car_night_vis005",
"video_path": "/ephemeral/work/cosmos-transfer2.5/assets/car_example/car_input.mp4",
"prompt": "A driving scene through a modern urban environment, captured from a dashcam inside a vehicle at night. The sky is dark. The scene is lit only by street lights, the headlights of cars, and the illuminated windows of the tall buildings along the road. Neon signs and traffic lights glow in red, green and orange, and their light reflects on the asphalt. The black car directly ahead shows bright red tail lights. Trees and pedestrians on the left sidewalk are dimly lit by the street lamps. Traffic cones and white arrow road markings are visible in the headlight beams. The camera stays static as the vehicle drives steadily toward the intersection.",
"negative_prompt": "Daylight, bright sky, sunshine, blue sky, overexposed scene, clear daytime visibility.",
"guidance": 7,
"num_steps": 35,
"seed": 42,
"edge": {
"control_weight": 0.35,
"preset_edge_threshold": "medium"
},
"vis": {
"control_weight": 0.05,
"preset_blur_strength": "very_high"
}
}
実験①と実験②の動画は、前回の記事と同じく examples/inference.py を使い、次のコマンドでまとめて生成しました。
python examples/inference.py \
-i specs/car_fog_edge_verylow.json specs/car_night_vis005.json \
-o outputs/hypo
生成にかかった時間は、実験①の動画が 17 分 07 秒、実験②の動画が 16 分 55 秒で、モデルの読み込みを含めた合計は 2,107 秒(35 分 07 秒)でした。nvidia-smi で記録した VRAM のピークは 67,517 MiB で、前回の記事の edge + vis の構成と同じ値でした。
以降の画像は、いずれも動画の 60 フレーム目を FFmpeg で取り出したものです。比較の基準として、入力動画の 60 フレーム目を載せておきます。

入力動画(公式サンプル)の 60 フレーム目
実験①:エッジの閾値の変更
実験①では、霧の映像への変換で、画面左側の高層ビルが別の建物に置き換わった問題に対処してみます。晴天の入力動画を preset_edge_threshold: medium の spec で霧の映像に変換したところ、画面左側の青いガラス張りの高層ビルが、横に窓が並ぶ灰色の建物に置き換わっていました。
preset_edge_threshold は、入力動画からエッジマップを自動生成するときの閾値で、very_low / low / medium / high / very_high の 5 段階のいずれかを指定します。閾値が低いほど、明るさの変化が小さい輪郭まで検出します(その分、ノイズも検出します)。
閾値が medium のときのエッジマップを確認すると、左側の高層ビルには縦の線が数本写っているだけで、ガラス面の輪郭はほとんど検出されていませんでした。

preset_edge_threshold: medium のエッジマップでは、左側の高層ビルと画面下部の路面に輪郭がほとんど写っていない

medium で生成した霧の出力では、左側の高層ビルが横に窓が並ぶ灰色の建物に置き換わっている
輪郭が検出されていないことが置き換わりの原因であれば、閾値を下げて輪郭を検出させれば、ビルは入力動画と同じ外観で生成されるはずです。そこで、ほかのパラメータは変えずに閾値を very_low に変更しました。このとき生成されたエッジマップは次のとおりです。

preset_edge_threshold: very_low のエッジマップでは、左側の高層ビルに縦の線が密に写っている
medium と比べると、輪郭が検出される範囲が明確に増えていますね。左側の高層ビルには縦のファサードの線が密に写り、右手のビルの窓割りや街路樹の輪郭も細かく検出されています。
このエッジマップで生成した出力は次のとおりです。

very_low で生成した霧の出力でも、左側の高層ビルは medium のときと同じく横に窓が並ぶ灰色の建物になっている
左側の高層ビルは、medium のときと同じく横に窓が並ぶ灰色の建物として生成されました。エッジマップには縦の線が写っているにもかかわらず、出力のビルは入力動画の青いガラス張りの外観になっていません。
入力動画と、変更前後の出力を並べると次のとおりです。
| 入力動画 | 変更前(medium) |
変更後(very_low) |
|---|---|---|
![]() |
![]() |
![]() |
入力動画と霧の出力の比較(いずれも 60 フレーム目)
一方で、閾値の変更によって、左側の高層ビルとは別の箇所の出力が変わりました。入力動画の中央奥にある灰色の中層ビルは、medium では建物として生成されていましたが、very_low では大きな木に置き換わっています。
右手のビルの窓割りは、medium と very_low のどちらでも入力動画に近い形で生成されています。ロードコーンは、入力動画では交差点の手前に数個置かれているだけですが、medium と very_low のどちらの出力でも数が増えています。閾値の値にかかわらず増えているので、ロードコーンの変化は閾値の変更によるものではないと考えられます。
これらの結果の原因は、今回の実験からは特定できていません。想定している原因は次のとおりで、いずれも未検証です。
- 左側の高層ビルが入力動画と同じ外観にならなかった:
edge.control_weightが0.35で、プロンプトの「glass-facade towers」の記述や霧の描写に対して、輪郭の情報が弱かった - 中央奥のビルが木に置き換わった:
very_lowのエッジマップでは、このビルの手前にある街路樹の輪郭が細かく検出されており、その影響でビルの領域まで木として生成された - ロードコーンが増えた:プロンプトに「Traffic cones」と書いたことで、入力動画より多く生成された
実験②:vis の重みの変更
実験②では、夜の映像に変換した出力で、空だけが昼間のように明るく生成された問題に対処してみます。晴天の入力動画を vis.control_weight: 0.24 の spec で夜の映像に変換したところ、建物の窓の明かりやネオン、信号機は夜の映像として生成された一方で、空は入力動画と同じく明るい灰色で生成されました。プロンプトでは「空は暗い」と指定しているので、空だけがプロンプトの指示と異なる結果になっています。

vis.control_weight: 0.24 で生成した夜の出力では、窓やネオンは夜になったが、空は明るい灰色から変わっていない
原因として疑われるのは、vis(ブラー)制御です。
vis の制御映像は、入力動画に強いブラーをかけたものです。細部は失われますが、どこが明るくてどこが暗いか、全体としてどのような色みかは保持されます。画像の中で明るさがゆるやかに変化している部分を、画像処理では低周波成分と呼びます。この後に載せているブラー制御映像が、低周波成分だけを残した例です。
vis はこの情報をモデルに渡す制御なので、入力動画の明るい空を出力に残しているのではないか、というのが今回の仮説です。
自動生成されたブラー制御映像を確認すると、入力動画の昼間の明るさと色が、そのまま保持されていました。空は白く、路面はグレーで、建物の色も残っています。この制御映像が control_weight: 0.24 の重みで出力に影響していたことになります。

自動生成されたブラー制御映像では、入力動画の昼間の明るさと色がそのまま保持され、空は白い
そこで、vis 制御の影響を小さくするために vis.control_weight を 0.05 まで下げました。spec では、この値のほかは変更していません。

vis.control_weight: 0.05 で生成した夜の出力では、空は暗くなったが、建物の形が変わり、画面下部にボンネットが生成されている
空が暗くなり、夜の映像になりました。街灯が路面を照らし、前走車のテールランプが赤く光っています。
入力動画と、変更前後の出力を並べると次のとおりです。
| 入力動画 | 変更前(0.24) |
変更後(0.05) |
|---|---|---|
![]() |
![]() |
![]() |
入力動画と夜の出力の比較(いずれも 60 フレーム目)
プロンプト・seed・guidance は 0.24 のときと同じなので、空の明るさが変わらなかった原因は vis 制御だったと考えられます。vis 制御が入力動画の明るさの配置を出力に残し、プロンプトの「空は暗い」という指示と両立していませんでした。
副作用
一方で、目視で比べた範囲では、入力動画と異なる箇所の量は 0.24 と同程度でしたが、異なる箇所の内容は変わっています。
車線の位置、矢印の標示、直前を走る車は、0.24 と 0.05 のどちらでも入力動画と同じ位置に生成されています。建物は、0.24 の時点で、左側の高層ビルが別の建物に置き換わり、中央奥には入力動画に写っていない高層ビルが生成されていて、すでに入力動画とは異なっていました。0.05 でも同じで、中央奥の高層ビルは、暗い影のような形で生成されています。
0.24 から変わった点は、車とボンネットです。右の車線を走っていた黒い車は、0.24 では生成されていましたが、0.05 の 60 フレーム目では生成されていません。画面下部には、0.24 ではフロントガラスに映り込んだダッシュボードのような半透明の模様が薄く生成されていましたが、0.05 ではこの模様は写っておらず、代わりに入力動画に写っていないボンネットが明確に生成されています。入力動画に写っていない信号機が多数生成される点は、0.24 と同じでした。画素値の差などは測っていないので、目視での比較である点はご了承ください。
今回の比較では、vis の重みを下げても、入力動画と異なる箇所の量は変わりませんでした。そのため、vis が建物の形や車の配置といった構図の保持にどの程度影響しているかは、判断できませんでした。
まとめ
本記事では、前回の記事で出力の画像から推測した 2 点の仮説を、変更する変数を 1 個に限った対照実験で確かめてみました。実験①②の結果を、出力の症状ごとにまとめると次のとおりです。
| 症状 | 対処 | 結果 |
|---|---|---|
| 特定の構造物が別の建物に置き換わる | preset_edge_threshold を下げる |
エッジマップの輪郭は増えたが、出力のビルは入力動画と同じ外観にならなかった。中央奥のビルが木に置き換わる副作用が出た(実験①) |
| 天候・時間帯の指示が反映されない | vis.control_weight を下げる |
反映された。入力動画と異なる箇所の量は変わらず、内容が変わった(実験②) |
| 輪郭を増やしても外観が戻らない | edge.control_weight を上げて、入力動画の内容を保つ役割を edge に移す |
未検証 |
| 画面下部の路面に、入力動画に写っていないダッシュボードやボンネットが生成される | 閾値の変更では解決しないと想定(路面は very_low でも輪郭が写らないため) |
解決策は見つかっていない |
出力が意図と異なるときは、パラメータを変更する前に、出力ディレクトリに保存される制御映像で次の 2 点を確認すると、変更するパラメータの見当を付けやすくなります。
- 入力動画と異なる内容が生成された領域に、エッジマップの輪郭が写っているか
- ブラー制御映像に保持されている明るさの配置が、プロンプトの指示と矛盾していないか
ただし実験①の結果のとおり、見当が付いても、パラメータの変更だけで出力が入力動画と同じ内容になるとは限りません。
本記事の実験①②の結果は、DevelopersIO 2026 Tokyo での登壇でも紹介しました。登壇の資料は、次の記事で公開しています。
参考
- nvidia-cosmos/cosmos-transfer2.5 — Cosmos Transfer 2.5 の GitHub リポジトリ
- Cosmos ドキュメント
- 前回の記事:NVIDIA Cosmos Transfer 2.5 で車載映像を霧・雨・夜に変換してみた — 環境構築と、セットアップで問題になった点はこちら
どなたかの参考になれば幸いです。
以上










