ユーザーガイド

第4章 — 補助ウィンドウ

メインウィンドウ(3Dビューポートおよびインスペクター)のほかに、RadianceKitはさらに6つのウィンドウを管理しており、そのすべてがHelpメニューから開けます。メニューには上から順に8つの項目があります:User Guide (⌘?)、Keyboard Shortcuts (⌘/)、Open Training Logs… (⇧⌘L)、Open Exports Folder…、Manage Storage…、Pareto Dashboard… (⇧⌘D)、Holdout Analysis… (⇧⌘H)、BayesOpt Console… (⇧⌘B)。2つの「Open …」項目はアプリのウィンドウではなくFinderを開くものなので、ここでは扱いません。3つのウィンドウ—Dashboard、Holdout、BayesOpt—は独立した分析ツールです:これらはメインウィンドウとは無関係に動作し、ディスク上のJSONファイルを読み書きします。これら3つのウィンドウはいずれもHelp menuから開き、その後ウィンドウ内で評価したいファイルやフォルダ自体を選択します—「Open Reports Folder…」、「Open transforms.json…」、あるいは「Start」ボタンを使って。この3つのウィンドウだけは翻訳されておらず、そのボタンやスライダー、列見出しはどの言語版でも英語のままです。したがって、ここで挙げた表記は画面上でもそのまま見つかります。

3つのシンプルなウィンドウ(User Guide、Keyboard Shortcuts、Manage Storage)と2つのフォルダーメニュー項目(Open Training Logs / Open Exports Folder)については、各コントロールごとに簡潔な項目を用意しています。3つの分析ウィンドウについてはより詳しく説明します—それぞれ、ウィンドウに何が表示されるか、いつ開くべきか、表示された図をどう解釈すればよいかを説明する導入文付きです。

章の最後には、メインウィンドウのインスペクターへのクロスリファレンスの節があります:トレーニング実行中にライブ損失チャートとGaussian数の表示から何を読み取れば有用か、という内容です。

ユーザーガイド (W1–W4)

左側にサイドバー、右側にレンダリングされたMarkdownコンテンツがあるユーザーガイドウィンドウ
左側にサイドバー、右側にレンダリングされたMarkdownコンテンツがあるユーザーガイドウィンドウ

それは何か: アプリに同梱されている guide_<sprache>.md をレンダリングする、組み込みのヘルプウィンドウ。言語はSettings(Tab General → Language)から、そこに「System」と指定されている場合はmacOSの言語設定から導出される。レイアウトはクラシックで、左にすべての見出しを表示するサイドバー、右に本文が表示される。

個々のポイントについて素早く確認したいとき — つまりキーワード代わりとして使う場合。詳細なリファレンスはこのマニュアルであり、組み込みのヘルプウィンドウは素早く調べるための短縮版だ。アプリのリリースごとに更新されるが、内容はより表面的にとどめられている。

W1NavigationSplitView(サイドバー + 詳細)

場所

Help → User Guide (⌘?)。

技術詳細

コンテンツツリー用の細いサイドバー(幅は最低180 pt)と、実際のMarkdownコンテンツ用のスクロール可能な詳細領域からなる2カラムレイアウト。ウィンドウの最小サイズは700 × 500 pt。初回起動時にウィンドウはアプリバンドルから該当する guide_<lang>.md を読み込み(フォールバックは guide_en.md)、それをブロックレコード(見出しH1–H4、段落、リスト、テーブル、区切り線)にパースし、サイドバー用に見出し構造を別途抽出する。インライン書式(太字、斜体、コードスパン)は組み込みのMarkdownエンジンによってレンダリングされる。 言語はアプリの設定から読み込まれ、中国語(zh-Hans)とブラジルポルトガル語(pt-BR)は特殊ケースとして完全なロケールタグのまま保持される。これはこれらのバリアントがそれぞれzhおよびptと異なるためである。

W2List(見出しサイドバー)

場所

ユーザーガイドウィンドウの左カラム。

技術詳細

現在のMarkdownドキュメントのすべてのH2・H3見出しの一覧。H2項目はインデントなしで中程度のフォントウェイトで表示され、H3項目は左に16 ptのインデントと控えめなフォアグラウンドスタイルで表示される。それ以外のレベル — H1もH4以下も同様に — はサイドバーに表示されない。表示すると見通しが悪くなるためだ。アンカーIDは見出しテキストからスラッグ化によって生成される(小文字化 + スペースをダッシュに変換 + 文字・数字・ダッシュのみへのフィルタリング — これはGitHubがMarkdownアンカーに使用しているのと同じアルゴリズムであり、ドキュメントへの外部URLも潜在的に同じアンカーに到達しうる)。リストにはネイティブのmacOSスタイルが使われる。

W3Button(見出し → アンカージャンプ)

場所

サイドバーの各行にひとつずつ配置されたボタン。

技術詳細

各サイドバー項目はボタンであり、現在のアンカーを設定するが、見た目はリスト項目のように見える。オブザーバー変数がそれをトリガーとして、0.3秒のなめらかなアニメーションで対応するアンカーへスクロールジャンプする。ジャンプ後、アンカー値はリセットされる。これは同じアンカーへの次のクリックでも再度発火させるためだ(そうしないと値が変化していないため、オブザーバーが再発火しない)。

W4ScrollView(詳細コンテンツ)

場所

右カラム。

技術詳細

スクロール可能な、垂直に積み重なるコンテンツ領域で、遅延レンダリングを採用している。長めのガイドでは200個を超えるMarkdownブロックになることも珍しくなく — 遅延読み込みでない場合はすべてを同時にインスタンス化することになってしまう。各ブロックには固有のIDが付与され、見出しアンカー(レベルにかかわらずすべての見出しに付与される)またはインデックス用のプレースホルダーのいずれかが使われる。 最大幅は720 pt、パディングは水平32 / 垂直24で、長い行でも読みやすいレイアウトが保たれる。テーブルはセル単位で水平スタックと区切り線を使ってレンダリングされ、インラインコードは組み込みのMarkdownエンジンによって処理される。実際のコードブロックは現状では段落として扱われる — これはヘルプウィンドウの既知の制限である。

キーボードショートカット (W5–W6)

Keyboard Shortcuts ウィンドウ — Navigation/Views/Capture/Editor/Trainingの5つのグループ。左にホットキー列、右に説明
Keyboard Shortcuts ウィンドウ — Navigation/Views/Capture/Editor/Trainingの5つのグループ、 左にホットキー列、右に説明

5つのセクションに分かれた静的なリファレンスリスト。Navigation: Mouse Drag(Orbit/Fly)、 Shift+Drag/Right-Drag(Pan)、Scroll(Zoom)、WASD(Fly-Through移動)、 Q/E(Up/Down)、F(Orbit/Fly切り替え)、Double-click(再センタリング)、 Cmd+Scroll(FoV調整)。Views: R(Camera Reset)、T (自動回転)、P(Camera Playback)、B(Background切り替え)、0–9 (Training-Camへジャンプ 1=10%/5=50%/0=last)、Left/Right Arrow (前/次のCam)。Capture: S(デスクトップへScreenshot)、V (Turntable動画)、C(Camera情報をコピー)。Editor: Tab (Editモード)、Click/Drag(ペイント選択)、Option+Click(選択解除)、 X / Delete(選択を削除)、Cmd-Z(直前の削除を取り消し)、 [ / ](ブラシサイズを縮小/拡大)、Esc(選択解除)。 Training: Option+Space(Trainingの一時停止/再開)、Cmd+E (シーンをエクスポート)。ここに書かれているのはこれだけだ — Start、Cancel、延長操作は Trainingメニュー(第1章)から行う。

これは何か: すべてのキーボードショートカット — Navigation、Views、Capture、Editor、Training — をまとめた、シンプルな静的一覧だ。内容は固定で組み込まれており、ファイルから読み込まれるわけではない。

Viewport内で何かを最速で行う方法を探しているときに。WASDでのFly-Through、Rでの Camera Reset、BでのBackground切り替え — すべてここに載っている。

W5ScrollView(コンテンツ領域)

場所

Help → Keyboard Shortcuts (⌘/)。

技術詳細

中に縦方向のリストが入った、シンプルなスクロール領域。周囲に20 ptのPaddingがあり、 サイドバーのナビゲーションツリーはない(リストは十分短いため)。内容は 5つのセクション(Navigation、Views、Capture、Editor、Training)にグループ化されている。 各キーの組み合わせごとに、両カラムに翻訳可能なテキストを持つ1行がある。左カラム(キーコード)は 幅180 ptに固定されており、右側の説明が縦方向に揃うようになっている。スクロール以外の インタラクションはない — 行をクリックしても何も起こらず、キーボードショートカットは メニューとViewport上での本物のキーボードModifierだ。

W6VStack(ショートカットセクション)

場所

ScrollViewの内部。

技術詳細

左揃えで16 ptの間隔を空けて積み重ねられたセクション。5つのセクションそれぞれの中に Heading + 行の並びがある。Headingにはセカンダリなsubheadlineスタイルを使用している — セクションが ナビゲート可能である必要はないため、意図的にTitle形式は使っていない。内容は意図的に フラットにしてある(Disclosureなし、Searchなし、Filterなし)ため、このコンポーネントは どのmacOSバージョンでも変わらず動作し、ファイルも読みやすい状態を保てる。

ストレージを管理 (W7–W12)

Manage Storage Fenster — Header zeigt „1,356 items · 55.1 GB total”, Tabelle mit Export-PLY-Dateien sortiert nach Datum, jeweils Icon + Dateiname + Größe + Datum
「Manage Storage」ウィンドウ — ヘッダーには「1,356 items · 55.1 GB total」と表示され、テーブルには日付順に並んだExport-PLYファイルが、それぞれアイコン + ファイル名 + サイズ + 日付 という形式で並んでいる

RadianceKitが管理するすべてのファイルのテーブル表示。ヘッダーには1,356件のアイテム、合計55.1 GBと表示されている。上部のツールバー: 「Show in Finder」+「Refresh」。各行の内容: Exportアイコン、ファイル名(例: training_20260718T194416Z.ply)、 Export日時、サイズ(このキャプチャでは7.8 MBから2.24 GBまでばらつきがある)、虫眼鏡アイコン (Reveal)、ゴミ箱アイコン(Move to Trash)。ソート順はまずカテゴリ別、カテゴリ内では日付順で新しいものが上に来る。 この画面ではPLYエクスポートが大半を占めているが、これはこの保存先に主にトレーニング結果が保存されているためだ。

これは何か: RadianceKitが ~/Documents/RadianceKit/ 以下に保存する すべてのもの — ログ、エクスポート、シーン、(iOSコンパニオンからの)キャプチャバンドル、 インポート(入力画像のステージングコピー) — についてのディスク使用状況の一覧だ。各項目にはバイト単位のサイズと 2つのボタンがある: 「Finderで表示」と「ゴミ箱に入れる」。これは自動的な クリーンアップでは【ない】— アプリ自体は何も削除しない。あなたが項目ごとに 判断する。このウィンドウはローカライズされていて、ドイツ語では「Speicher verwalten」という名称になり、 ヘッダーの2つのボタンは「Im Finder anzeigen」と「Aktualisieren」、行のボタンは「Im Finder anzeigen」と「In den Papierkorb legen」という名称になる。下記の各項目にある英語名は 英語版での表記だ。

ディスクが一杯になってきたとき。特にログは たまりやすい(トレーニング試行1回につきJSONLが1つ、加えて _qualityMetrics.json)。エクスポートも当然たまる(PLYは生データそのまま100%で、 エクスポート1回につき1ファイル)。クラッシュ後、Importsのステージングディレクトリに 古い入力画像のコピーがまだ残っている場合にも役立つ。

W7「Show in Finder」ボタン

場所

ストレージブラウザウィンドウ右上のヘッダー。

技術詳細

RadianceKitのデータフォルダをFinderで開く — まさにこのウィンドウが一覧表示している内容のディレクトリだ。これにより フォルダ構成(Logs、Exports、Scenes、Captures、Imports)を 直接見ることができ、Finder自体でファイルを移動やコピーすることもできる。この操作は 新しいFinderウィンドウを開くだけで、このウィンドウ内のリストがそれに合わせて更新されることはない — そのために「Refresh」(W8)がある。

W8「Refresh」ボタン

場所

ヘッダー、Finderボタンの隣。

技術詳細

ユーザーが起動した非同期タスク上で実行される バックグラウンドスキャンをトリガーする。これにより大きなディレクトリツリーのスキャンが UIをブロックしないようになっている。実際のウォーク処理は既知の サブフォルダ(Logs、Exports、Scenes、Captures、Imports)をすべて 巡回し、直下の子要素ごとにストレージエントリを生成する。各エントリについて 再帰的なサイズが計算される — 優先されるのは実際のディスク消費量 (APFSのハードリンク共有を考慮したもの)で、フォールバックとして論理的な ファイルサイズが使われる。

W9List(ストレージ項目一覧)

場所

ヘッダー下のメインコンテンツ。

技術詳細

各行が次のレイアウトを持つリスト: カテゴリ 固有のSF Symbolsアイコン(Logsは書類、Exportsは上向き矢印、 Scenesは立方体、Capture-Bundlesはスマホ、Importsはトレイ)、名前 + サブタイトル (種類ラベル + フォーマット済みの更新日時)、右側のバイトカウンター (右揃え、等幅フォント)、Revealボタン(虫眼鏡アイコン)、Trashボタン (ゴミ箱アイコン)。ソート順: まず種類(Scenesが最初、その後 Exports、Logs、Captures、Imports、Otherの順)、次に更新日時の 降順(新しいものが上)。スキャンがまだ進行中の場合は、その部分に 「Scanning…」という進捗表示が代わりに出る。何も見つからなかった場合は、 トレイアイコン付きの空状態表示になる。

W10行内ボタン「Reveal in Finder」

場所

各行、右側の虫眼鏡アイコン。

技術詳細

Finderを開き、特定の項目(ファイルまたはフォルダ)を 選択状態にする。W7との違い: W7はルートディレクトリを開くのに対し、 W10はまさにこの1つの項目だけを選択状態にする。実践的な ワークフロー: 大きな項目を特定し、虫眼鏡をクリックし、 例えば外部ボリュームへコピーする、という流れになる。

W11行内ボタン「Move to Trash」

場所

各行、虫眼鏡の隣にあるゴミ箱アイコン。

技術詳細

確認ダイアログボックス(W12)をトリガーする。 確認後にはじめてmacOS標準の「ゴミ箱に移動する」操作が 実行される(つまり可逆的であり、即時削除ではない)。ゴミ箱移動が 成功すると、その項目はリストから削除され、合計バイトカウンターが 更新される。エラー発生時にはモーダルの エラーダイアログが表示される。

W12ConfirmationDialog(削除確認)

場所

W11によってトリガーされ、macOSのシートとして表示される。

技術詳細

動的なタイトル「Delete <name>?」を持つ 標準的な確認ダイアログで、メッセージ行には項目がゴミ箱に 入り、そこから(ゴミ箱が空にされるまでは)復元可能であることが 明示的に記載されている。ボタンは2つ: 破壊的な操作(赤色で表示)としての「Move to Trash」と、Escキーが 自動的に割り当てられた「Cancel」。このダイアログは非モーダルという 意味合いでは、このウィンドウのみをブロックし、アプリ全体は ブロックしない — これは可逆的な削除に対するmacOSの標準的な挙動だ。

Paretoダッシュボード (W13–W22)

Pareto Dashboard — leerer Zustand vor Report-Import
Paretoダッシュボード — レポートをインポートする前の空の状態

空の状態(初回起動直後)— 「Open Reports Folder…」という Call-to-Action 付きの Empty-State。トレーニングレポートが読み込まれると、次のスクリーン ショットのようにデータポイントが表示される。

Pareto Dashboard mit 384 geladenen Benchmark-Reports — Gaussians vs PSNR mit Pareto-Front, Scene/Strategy/Mip-Filter
384件のベンチマークレポートを読み込んだParetoダッシュボード — Gaussians vs PSNR、Paretoフロント、Scene/Strategy/Mipフィルター付き

ヘッダーツールバー右側には 「384 reports of 384」と表示されている(選択したフォルダ内の全レポートの パースに成功したことを示す)。左側の「Open Reports Folder…」ボタンの 隣には、読み込んだフォルダの名前(ここでは「Benchmarks」)が表示される。 軸:X-Axis-PickerはGaussians、Y-Axis-PickerはPSNR (dB)、その隣に 「Show Pareto Front」のチェックが入っている。左上の凡例:青 = mcmc、 緑 = classic、オレンジ = hybrid、加えてMip-Splatting On/Offを表す シンボル形状。破線のParetoフロントラインは、達成された最良のPSNR値 に沿って延び、約30万Gaussiansの時点でPSNR≈30 dBあたりでプラトーに 達する。点群は150万Gaussians超まで広がっている。右側のフィルター チップ:30を超えるScenes(bicycle、bonsai、family、flowers、garden、 kitchen、stump、truck、および番号付きの360・drone・photoテスト シリーズなど)、3つのStrategies(classic、hybrid、mcmc)、3つの Mip-Splattingオプション(All、On、Off)で「All」が有効。現時点では Scene・Strategyのフィルターは設定されていないため、点が密集した クラスターになっている。

これは何か: 複数の学習結果を比較するツール。過去に複数の シーンを学習させたり、同じシーンを異なるPresetで学習させたりした 場合、ベンチマーク評価の結果として学習実行ごとにJSONレポートファイル が生成される。このファイルにはFinal-PSNR、SSIM、LPIPS、Gaussian-Count、 実時間(Wallclock)などが含まれる。この評価を行うためのスイッチは インターフェース上には存在しない。ダッシュボードは、選択した フォルダ内にすでにレポートとして存在するものを評価するだけである。 こうしたレポートが入ったフォルダ全体を一度に読み込み、選択可能な軸 を持つ2Dの散布図としてプロットする。さらに、Paretoフロント(非劣解 の集合)が破線として描き込まれる。

少なくとも3つか4つの学習レポートを作成した後。 点の数が少ないと、フロンティアラインの信頼性が低くなる。典型的な ユースケース:屋外シーンの再構築を試み、P3 Balanced (Classic)、 P4 Quality (Classic)、P8 Quality (MCMC)、P9 Drone / Aerialを順番に 実行した — ここで、トレーニング時間1秒あたりのPSNRが最も良い 構成、あるいは与えられたPSNRに対して最少のGaussiansで済む構成を 知りたい、という場合。

両軸は自由に選択できる(X軸:Gaussians、 トレーニング時間、PSNR、SSIM、LPIPSなど。Y軸も同様)。Paretoフロント の計算は各メトリクスについて「小さいほど良い」(LPIPS、Gaussians、 Training Time、BRISQUE)か「大きいほど良い」(PSNR、SSIM、FSIM、 MS-SSIM)かを把握している — したがって軸の選び方次第で、線は 左下から右上へ、あるいは左上から右下へと延び、常に達成された最良の 組み合わせに沿って通る。ある点がPareto最適であるのは、他のどの点 も両方の次元で少なくとも同等以上ではない場合(つまり他の点に支配 されていない場合)である。Pareto最適な点はライン上に位置し、それ 以外の点は(軸の向きによって)その右側/上側に位置する。ライン 「上」にある点が本当の「最良Preset」候補であり、ラインから「大きく 外れた」点は無駄になった学習時間である。

選択を特定のシーンに絞り込むことができる (例えば屋外Runのみを比較したい場合)。特定のStrategy(classic、 hybrid、mcmc)に絞り込むこともできるし、Mip-Splattingの有効/無効 で絞り込むこともできる(Mip-Splattingは上級者向けのオプション設定 なので、直接比較する価値がある)。

「truck」シーンについて3つのレポートが1つの Reportsフォルダにあるとする:Run A(P4 Quality (Classic)、52.4万 Gs、105秒、PSNR 23.4)、Run B(P8 Quality (MCMC)、15万Gs、693秒、 PSNR 24.6)、Run C(P5 Ultra Detail、125万Gs、312秒、PSNR 25.8)。 X軸をTraining Time、Y軸をPSNRに設定する。Run Bは右上、Run Cはさらに 右上、Run Aは左下に位置する。Paretoフロントは AとCを結ぶ — 両方 とも非支配である。Run Bは「lost」(CはTimeとPSNRの両方でより優れて いる)。得られる知見:「truck」ではMCMCの手法は割に合わない。速く てそこそこ(A)か、時間がかかるが非常に良い(C)かのどちらかである。 Cの構成をPresetとして保存する(Inspector → I1 Save Preset)。

次にすべきこと: 最良の構成をPresetとして保存する。具体的 には、Pareto上の点を確認し(ホバーするとツールチップにPSNR/SSIM/ LPIPS/Gs/Timeが表示される)、Time-vs-Quality のトレードオフのうち どれが自分に最も合うかを判断し、該当するレポート(ファイル名に Runのタイムスタンプが含まれる)を開き、そのトレーニング構成を新しい Runにコピーするか、次のトレーニングセッション後にInspector経由で Presetとして保存する。

W13「Open Reports Folder…」ボタン

場所

ツールバー左上。

技術詳細

「Select a folder containing benchmark .json reports」という 案内文付きのフォルダ選択ダイアログを開く。確定すると、フォルダ内の すべての.jsonファイルを順次パースするバックグラウンドタスクが 走る。壊れたレポート(JSON構文エラー、スキーマ不一致)はまとめて サイドバー下部に「N file failed to parse」として表示される — クラッシュ はしない。1回目の読み込みがまだ実行中に2回目のクリックが行われた 場合、以前のタスクはキャンセルされ、2つの結果が同時にStateへ書き 込まれることはない。

選択したフォルダは永続的には記憶されない:ヘルプ → Pareto Dashboard… (⇧⌘D)でウィンドウを開き直した後は、ここで再度選び直す必要がある。 読み込んだフォルダの名前は、その後ボタンの右側に表示される。

W14「X-Axis」ピッカー

場所

チャート上部、左側。

技術詳細

ダッシュボードモジュールで利用可能なすべてのメトリクス軸 (PSNR、SSIM、LPIPS、Gaussian-Count、トレーニング時間など)を含む メニューピッカー。デフォルトはGaussian-Count。切り替えると、ホバー していた点の状態がリセットされる。これは、これまでハイライトして いた位置が軸の変更後は古い座標系上で意味を持たなくなるためである。 ピッカーはコンテンツ幅に制限されており、幅いっぱいには広がらない。

W15「Y-Axis」ピッカー

場所

チャート上部、X-Axisの隣。

技術詳細

W14と同じだが、デフォルトはPSNRになっている。軸の選択は それぞれ独立して保存されるため、意味のない組み合わせ(X=PSNR、 Y=PSNR — すべての点が対角線上に並ぶ)を選ぶこともできる。ただし そのような組み合わせは特に阻止されない。これは意図的な判断であり、 「SSIM vs PSNR」の比較も、メトリクス同士がどれだけ一貫した挙動を するかを見るうえで十分に興味深いためである。

W16「Show Pareto Front」トグル

場所

軸ピッカーの右隣。

技術詳細

デフォルトでオンになっているチェックボックス。Paretoフロント は点群に加えて、チャート上に線として重ねて描かれる — 破線 (ストロークパターン4–4)、グレーの半透明、線幅1.5 pt。注意: リリース版では、このチェックはチャートに影響を与えない — フロント ラインはチェックの有無にかかわらず常に描画される。フロントは軸を 変更するたびに、またフィルターを変更するたびに再計算される。

W17「Scene」フィルターチップ

場所

ダッシュボードウィンドウの右サイドバー。

技術詳細

読み込んだレポートに登場する各シーンごとのフィルターチップ。 幅がいっぱいになると自動的に複数行へ折り返す独自のフローレイアウト を使用する。アクティブなチップにはアクセントカラーの背景が付き、 非アクティブなチップは中立的な標準マテリアル背景になる。複数選択 が可能(Setのセマンティクス)。チップが1つも選択されていない場合、 すべてのシーンが「通過」する扱いになる — つまり「選択が空 = すべて」というSetロジックであり、「選択が空 = 何もなし」ではない。

W18「Strategy」フィルターチップ

場所

サイドバーのScene-Filterの下。

技術詳細

W17と同じ仕組みだが、学習ストラテジー用 — 一般的には 「classic」「hybrid」「mcmc」の3つの値で、ベンチマークレポートJSON のStrategyフィールドから導出される。複数のストラテジーのレポート が混在していて、1種類だけを表示したい場合に役立つ(例:「Classicは すでに除外したのでMCMC Runだけ表示したい」)。

W19「Mip-Splatting」フィルターチップ

場所

サイドバーのStrategy-Filterの下。

技術詳細

(W17/W18のようなSetではなく)3値のフィルター: 「All」/「On」/「Off」。背景:Mip-Splattingはシーンによって効果が あったりなかったりするマルチスケール拡張機能である — そのため 意図的にオン/オフ切り替え可能な設定として残されており、標準では 有効になっていない。Mip on/offの比較を行う際には、はっきりと区別 したい場合が多い。そのため「すべて通過させる」「Mip onのみ」「Mip offのみ」という状態を持つ専用の三値フィルターが用意されている。 このサイドバーセクションは、読み込まれたセットにレポートが1件でも 含まれていれば表示される — つまり実質的には常に表示され、何も 読み込まれていない場合にのみ消える。

W20ChipButton(フィルタートグル、all/on/off)

場所

ヘルパーコンポーネント。W17/W18/W19で使用される。

技術詳細

最小限のボタンラッパー。内容:Captionサイズのラベル テキスト、水平パディング10・垂直パディング5。背景は条件付き: アクティブな場合はアプリのアクセントカラーに白テキスト、非アクティブ な場合は中立的な標準マテリアル背景に通常のテキストカラー(ライト /ダークの外観に応じて自動調整)。形状はカプセル(ピル型)。 Plainボタンスタイルにより、カプセルのマテリアルがシステムの境界線 で覆われないようになっている。

W21チャート(Pareto散布図)

場所

ダッシュボードの中央エリア。

技術詳細

2つのレイヤーを持つSwift Chartsのダイアグラム:1つ目は レポート1件につき1点 — 位置は選択されたX・Yメトリクスから、色は Strategyに応じて、シンボルはMipの状態に応じて決まる。シンボルの サイズは通常80、ハイライト時(IDが現在ホバー中のレポートと一致 する場合)は200。2つ目はParetoフロント用の線(W16参照 — 常に 描画される)。加えて、現在ホバー中の点はシーン名を小さなカプセル として自身の上に表示する。

チャートオーバーレイ:透明な矩形がマウスの動きを検知する。フレーム ごとにプロットフレーム内でユークリッド距離的に最も近い点の位置が 求められ、距離が24 px未満であればホバー中のレポートが更新される (それ以外の場合はリセットされる)。これにより、クリックせずに ツールチップを表示できる — ホバーするだけでよい。

W22ツールチップ(ホバー詳細)

場所

チャートの下、ホバー時に表示される。

技術詳細

横方向のスタック:シーン名(見出し)、Strategyタグ (Caption)、区切り線、そのあとPSNR/SSIM/LPIPS/Gs/Timeの各メトリクス が小さな縦方向のグループ(ラベル+等幅フォントの値)としてそれぞれ 並ぶ。Mipが有効だった場合は、さらにアクセントカラーの「Mip」カプセル タグが追加される。背景は半透明のぼかし、角丸矩形で半径8 pt。マウス が実際に点の上にあるときのみ表示される。カーソルが離れると自動的に 消える。

Holdout Analysis (W23–W29)

Holdout Analysis — transforms.json読み込み前の空の状態
Holdout Analysis — transforms.json読み込み前の空の状態

空の状態には空状態表示と「Open transforms.json…」の呼びかけボタンが表示される。NeRF-Studio形式とInstant-NGP形式に対応。カメラのマーカーは transforms.json が読み込まれた時点で表示される — 次の図を参照。

86台のカメラ、5つのFold、Angular Strategyが有効なHoldout-Globe
86台のカメラ、5つのFold、Angular Strategyが有効なHoldout-Globe

ヘッダーには読み込まれたファイル (transforms.json)とカメラ数(「86 cameras」)が表示される。左サイドバー: Strategy-Pickerには2つの選択肢がある — Angular (longitudinal) が有効 (カメラをオービット周りの経度角でソートし、その後Foldへ順番に振り分ける) と Linear (round-robin) (同じ順番振り分けだが、視点角度ではなく画像の順序に基づく)。k-Foldsスライダーは 5に設定されており、Test-Fold-PickerはFold 1になっている。Exportボタンは fold-assignment.json を生成し、外部の評価ツールでの再利用に使う。中央パネル: 86台のカメラすべてを3D Globe上に投影したもので、球全体に分布している — 緑の点 = Train、赤の点 = 現在のTest-Fold(Fold 1、18台のカメラ)。右サイドバー(Angular Correlation): Foldごとのカメラ数 + Mean Nearest Angle(Fold 1: 18台 / 8.5°、Fold 2: 17台 / 6.1°、Fold 3: 17台 / 6.2°、Fold 4: 17台 / 6.7°、Fold 5: 17台 / 6.4°) — 値が小さいほど、 各テストカメラの近くに学習用カメラが存在することを意味し、テストが容易であることを示す。

これは何か: カメラ配置を可視化する3Dビジュアライザーで、交差検証のロジックを備えている。 transforms.json(Nerfstudio / Instant-NGPがカメラポーズに使う標準形式)を読み込むと、アプリはすべてのカメラを読み取り、 視線方向を単位球面へ投影し、仮想的なグローブ上に小さな球状マーカーとして表示する。その後、選択した戦略(angularまたはlinear)に従って カメラをk個のFoldへ分割し、学習用の部分を緑、テスト用(Holdout)の部分を赤でマークし、 Foldごとにangular correlationスコアを計算する。このスコアは、視線角度空間においてテストFoldが学習Foldからどれだけ離れているかを示す。

Holdout評価をしたいとき — つまり、モデルが未見の視点に対してどれだけ汎化するかを知りたいときだ。 学習時のデフォルトは「every-8th view as Holdout」(Mip-NeRF360の慣習)だが、これは非常に線形な分割方法である。 たとえば画像が時間的にクラスタ化されている場合(まず対象物の片側、次にもう片側)、「every-8th」は代表的とは言えない — 無作為なシーケンス位置がテストに入っても、その隣接画像はすべて学習側に入ってしまい、簡単すぎるテストになる。 「angular」を使うと、代わりに視線角度空間に基づいて層化する:各Foldはオービットのあらゆる方向のカメラを含むため、 テストは本当に汎化のギャップを検証することになる。

Angular対Linear: - Angular(標準): すべてのカメラを経度角(Y軸周りのφ座標)でソートし、 その後順番にk個のFoldへ割り当てる — リングの最初のカメラはFold 1に、2番目はFold 2に入り、k台のカメラを経た後は 再び最初から回り始める。利点: 各Foldにはオービットのあらゆる方向のカメラが均等にリング全体に分布して含まれる。 古典的なオービット撮影に適している。分割が撮影順序に依存しなくなるためだ。 - Linear (Round-Robin): 同じ順番振り分けだが、角度ではなく画像位置に基づく(Foldインデックス = image_index modulo k)。 これは単純な「every-k-th」分割である。画像の順序に空間的バイアスが全く無い場合(例:無作為な順序のドローン撮影)に機能する。 画像が時間的にクラスタ化されている場合はうまく機能しない — その場合、隣接フレームが異なるFoldに入ってしまい、テストが簡単になりすぎる。

3Dグローブを見るとすぐにわかる: 緑の点(Training)と赤の点(Test)。赤い点がすべて一箇所に固まっている場合、 Holdoutは良くない(良い汎化テストにならない)。緑の点の間に均等に分布していれば良好である。 Foldごとのangular correlationスコア(右サイドバー、単位は度)はさらに次のことを教えてくれる:値が小さい = テストが学習に近い(各テストカメラの近くに学習用カメラがあり、テストが簡単)、値が大きい = テストが学習から遠い(より厳しい汎化テスト)。

Truckシーンを251枚の画像で撮影し、メニュー項目M33(Export SfM transforms.json)経由で nerfstudioファイルをエクスポートしたとする。Holdoutウィンドウ(⇧⌘H)を開き、「Open transforms.json…」でJSONを読み込み、 グローブを確認する。k=5(デフォルト)で5つのFoldが得られる。「Fold 3」をクリックして — 赤いマーカーがある程度均等かどうか確認する。 均等であれば: 「Export fold-assignment.json」。エクスポートされたファイルは外部の評価ツール(Nerfstudio、Instant-NGP)向けであり、 RadianceKit自身はこれを再度読み込むことはなく、引き続き自身のHoldout標準「every-8th」に対して学習を行う。 つまりこのウィンドウは、そもそもカメラのセットが公平なテストを可能にしているかどうかを判断するためのものである。

W23ボタン「Open transforms.json…」

場所

ツールバー左上。

技術詳細

JSONファイルに限定されたファイル選択ダイアログを開く。確定すると、Holdoutモジュールがファイルを 読み込む。ローダーはnerfstudio形式(カメラのIntrinsicsに加え、画像パスと変換行列を持つフレームのリスト)と instant-ngp形式(同じ構造)の両方を解析できる。フレームごとに、変換行列から視線方向(カメラローカル基底のz軸)を 抽出して保存する。解析に失敗した場合、左サイドバーにメッセージが表示される — ただし、それはすでに何らかのシーンが 読み込まれていた場合のみで、最初の試行では、ウィンドウは目に見えるメッセージなしで空の状態のままとなる。

読み込まれたファイルは永続的に記憶されない: ウィンドウをヘルプ → Holdout Analysis…(⇧⌘H)経由で再度開くと、 ここで再度選択し直すことになる。選択後、そのファイル名がボタンの右側に表示される。

W24ピッカー「Strategy」(angular/linear)

場所

左サイドバー、上部。

技術詳細

AngularとLinearの2つの選択肢を持つラジオピッカー。 戦略を切り替えると自動的にFoldの再計算がトリガーされる。視線方向は球面上の3D単位ベクトルのリストであり、 Angular戦略はこれらを経度角φでソートしてから順番にFoldへ割り当て、 Linear戦略は同じ順番の割り当てをフレームインデックスに基づいて行い、幾何学的な情報を完全に無視する。 そのため両方の戦略は同じサイズのFoldを生成する。両者の違いは、事前にどの基準でソートするかだけである。

W25スライダー「k Folds」

場所

左サイドバー、中央。

技術詳細

3から10までのスライダー、ステップ幅1。 変更すると、Fold計算が自動的に再度トリガーされ、Foldのリスト、学習/テストのインデックス、 Foldごとのスコアが即座に再計算される。選択した値は等幅数字のテキストとしてラベルの右側に表示される。

経験則: k=5が標準(各Foldで20%のテストが得られ、交差検証としては一般的)。データが非常に多く、 統計的な信頼性のためにより多くのFoldが必要な場合はk=10。データが少ない場合はk=3。

W26ピッカー「Test Fold」

場所

左サイドバー、kスライダーの下。

技術詳細

メニューピッカー。設定されているFold数と同じ数の項目を、 「Fold 1」から「Fold N」までのラベルでリストする。以前選択されていたインデックスがk以上の場合 (例えばkを10から5に減らした場合)、自動的に0にリセットされる。選択されたTest-Foldは グローブ上で赤く表示され、それ以外はすべて緑で表示される。

W27ボタン「Export fold-assignment.json」

場所

左サイドバー、下部。

技術詳細

デフォルトのファイル名 fold-assignment.json を持つ保存ダイアログを開く。 確定すると、Holdoutモジュールが現在の分割をJSONスキーマ(フレームごとのFold割り当てに加え、 Strategyのメタ情報ブロック)にエンコードする。このファイルは外部の評価ツール向けであり — RadianceKitはこれを再度読み込むことはない。カメラファイルが読み込まれていない間、このボタンは グレーアウトされている。成功時は「Saved to (filename)」、書き込みエラー時は「Export failed: …」と 表示される — どちらも同じ場所、ボタンの下に表示され、両方とも緑色の文字であるため、 色による区別はできない。

W28SCNView(3D Camera Globe)

場所

Holdoutウィンドウの中央パネル。

技術詳細

SceneKit製のグローブビュー。シーンは次の要素から構成される: ワイヤーフレームの球体(半径1.0、36セグメント、ダークグレー)、3本の色付き軸の短い棒 (赤/緑/青がX/Y/Zに対応、それぞれ長さ1.2)、そしてカメラごとに小さなマーカー球 (半径0.03)が、単位球面上の対応する視線方向の位置に配置される(ワイヤーフレーム球の 「中」に消えないよう、わずかに外側に配置)。マーカーは、Foldが変わるたびに再構築されることは ない — 再構築が必要なのは、フレームリストが変わったとき(つまり新しいJSONが読み込まれたとき)だけである。 その代わり、更新のたびにマテリアルの色をその場で更新する処理が行われる: テストのインデックスには赤、 学習には緑、どちらでもない場合には明るいグレー。これにより、N > 1000台のカメラであっても スライダーの操作は快適な速度を保つ。

カメラコントロールが有効になっている — マウスでグローブを回転、ズーム、パンできる。 ライティングにより、マーカーが平坦に見えないようになっている。背景はダークグレー。

W29FoldCard(タップしてFoldを選択)

場所

右サイドバー、「Angular Correlation」セクション。

技術詳細

Foldごとに1枚のカードビュー — 半径6ptの角丸長方形、 パディング10、2行構成の垂直レイアウト(上段「Fold N」+ カメラ数、下段「Mean nearest angle:」+ 度単位の値)。背景色は条件付き: 有効なFoldはアクセントカラーの半透明、非有効なFoldは 標準の中立マテリアル。タップするとそのFoldが選択され、グローブの色がリアルタイムで変わる。

「Mean nearest angle」スコアは、テストカメラごとの最も近い学習用カメラまでの最小角度の平均 (内部ではラジアンで計算され、UI上では度で表示される)。

BayesOptコンソール (W30–W39)

BayesOptコンソール — トライアル開始前の空の状態
BayesOptコンソール — トライアル開始前の空の状態

サーチスペース・ピッカー(RadianceKit defaults (6-dim))、 トライアル・バジェット・スライダー(デフォルト40)、ランダムシード(42)、 そしてConvergence-Chart・Trial Log・サーチスペース・パラメータリストの 3つの空パネルからなる空の状態。Convergence-ChartとTrialテーブルは、 ランの開始とともに埋まっていく — 次の図を参照。

40トライアル後のBayesOptコンソール — Convergence-ChartはTrial 13まで急上昇、Best Value 0.9943、init/bo/restartタグ付きTrial Log
40トライアル後のBayesOptコンソール — Convergence-ChartはTrial 13まで 急上昇、Best Value 0.9943、init/bo/restartタグ付きTrial Log

右上のステータスに「Finished — best 0.9943 after 40 trials」、その隣に「Save Best Config」ボタン。左上には 「Start」ボタン。左サイドバー: サーチスペース・ピッカーは RadianceKit defaults (6-dim)、Trial-Budget 40、Random Seed 42。 パラメータリストには、チューニング対象の6つのハイパーパラメータと その値域が表示される: mipSmoothing3DScale [0.05, 0.5]mipFilter2DVariance [0.1, 0.6]densifyGradThreshold [5e-07, 5e-06]ssimWeight [0.05, 0.5]mcmcNoiseScale [1e-05, 0.0001]mcmcRelocationInterval [50, 200]。中央: Convergence-Chart 「Convergence (best value so far)」(X = トライアル・インデックス 0–40、Y = Objective Value 0–1)— 青い点 = 初期サンプル、緑の点 = BayesOpt-Acquisition、オレンジの点 = リスタート・トライアル(#22は0.5303、 #31は0.4885)。青いベスト値ラインはトライアル~5まで急上昇し、そこから トライアル~13まではわずかな改善にとどまり、それ以降は1.0近くの 平坦なプラトーになる。右サイドバー: トライアル・ログ、ここではトライアル #8–#36までスクロールされた状態で、スコアとタグ(init/bo/restart)が表示される。 右上のSave-Best-Config-ボタンはbayesopt-best.jsonを書き出す。

これは何か: ハイパーパラメータ探索のためのベイズ最適化コンソール。 ベイズ最適化とは、できるだけ少ない実験回数で未知の関数の最適点を 見つけようとする自動化された手法 — 典型的な例としては「Gaussianの 上限値、SSIM重み、Densifyしきい値のどの組み合わせが、 このシーンクラスにとって最良のPSNRをもたらすか?」といった問い。 6^4 = 1296通りのグリッド探索を行う代わりに、BayesOptは約40–100回の 情報を活用したトライアルを試み、それによって最適解に近づく。

重要: アプリに現在同梱されているバージョンは、実際のトレーニング・ラン に対して最適化を実行するのではなく(それでは数日かかってしまう)、 合成デモ・オブジェクティブ — ヒルクライミング的な特性をもつ マルチモーダルな地形に軽いノイズを加えたもの — に対して実行する。 これは意図的な設計だ: このウィンドウの目的は、最適化アルゴリズムの 振る舞い(収束の推移、サンプル点、Best-So-Far)を見せ、サーチスペースの 定義を理解してもらうことにある。実際のトレーニング駆動のBayesOptラン (同梱プリセットの開発時に実行されたもの)には、アプリ外の別の評価手段が 使われる。このウィンドウは、見て学ぶためのライブ版だ。

3つのユースケースがある: 1. BayesOptがどう動くかを 理解したい — その場合はデモ・ランを開始し、Convergence-Chartを観察しよう。 2. 新しいシーンクラス(例えば「水槽」や「アンティーク家具」)を計画していて、 15個の組み込みプリセットが完璧には合わない場合。頭の中でサーチスペースを 定義し、「Bowl demo (1-dim)」や「densify-until + ssim-weight + grad-thresh」 で試してみて、Best-ConfigをJSONとしてエクスポートし、 実際のトレーニング・ランの出発点として使おう。3. 同梱の標準サーチスペース (Mip-Subset、RadianceKit Defaults)を確認したい — これらは左サイドバーの パラメータ・パネルに一覧表示される。

- Convergence-Chart(中央列): Y = これまでに到達した最良のObjective関数値。X = トライアル・インデックス。 最初は急上昇する(BayesOptは初期サンプルをランダムに試し、一部は運良く 当たる)が、その後は近-最適領域が探索し尽くされるため次第に平坦になる。 20回以上トライアルしてもラインが平坦なままであれば、ランを止めても構わない — それ以上のトライアルはもう成果を生まない。チャート上の個々の点は (「best so far」ではなく)個別のトライアル値であり、フェーズごとに色分け されている: 青 = 初期サンプル、緑 = BayesOpt-acquisition、 オレンジ = リスタート。- Trialテーブル(右列): #1、#2、#3、… それぞれに値とフェーズ・タグが付く。これまでの最良トライアルには黄色い星 がマークされる。テーブルからベスト・トライアルを特定し、後でエクスポート時 にそのパラメータ値を確認できる。- サーチスペース・インスペクタ (左サイドバー): 選択中のプリセットについて、すべてのパラメータ名と その探索範囲[lo, hi]を表示する。「RadianceKit defaults (6-dim)」の プリセットでは、例えば「densifyGradThreshold [5e-7, 5e-6]」のように 表示される — つまりこの2つの値の間でログ一様分布になっている。

プリセット「RadianceKit defaults (6-dim)」、 Trial-Budget 40、Seed 42を選ぶ。「Start」をクリック。観察: 最初の8トライアル は青(初期サンプル、Latin-Hypercube)、続くトライアルは緑(BayesOpt取得)。 Convergence-ChartはTrial ~13まで急上昇し、その後平坦になる。 Trial ~30–40でベスト値が安定する。「Save Best Config」をクリック — プリセット名、トライアル・インデックス、値、デコードされたパラメータ値を含む bayesopt-best.jsonが保存される。このJSONは、あなたのプリセット定義に 手動で取り込むことができる。

W30「Start」ボタン

場所

左側のツールバー、Idle/Finishedステートの時。

技術詳細

トライアル・リストをリセットし、Running- ステートに切り替え、(複数回のStartクリックによるStale検出のために) 新しいラン-IDを生成し、新しいPause-Gateを作成する。その後、 オプティマイザを非同期ストリームとして実行するバックグラウンド・タスクを 開始する。初期サンプル数はバジェットに応じて増えるが、 最大でも8個まで — つまりバジェットが28以上の場合は典型的に8個の Latin-Hypercubeサンプル、小さいバジェットではそれより少なくなる。 Trialの更新は逐次受信されリストに追加される。 Stale-Run-Protection: この間に2度目のStartクリックがラン-IDを 再設定した場合、古いランからの更新は破棄される。

目立つボタン見た目のためのプライマリー・アクション・スタイル。

W31「Pause」ボタン

場所

左側のツールバー、Runningステートの時。

技術詳細

Pause-Gateをアクティブにし、Paused-ステートに 切り替える。実際の効果: ランナーは次のObjective関数を評価する前に 50msのポーリング・ループで待機する。つまり、現在実行中のトライアルは 最後まで実行される(合成的なもので、実行にはマイクロ秒しかかからない)が、 次のトライアルは開始されない。Resumeが実行されると、 中断した所から続行される。

W32「Stop」ボタン

場所

左側のツールバー、Running・Pausedステートの時。

技術詳細

ランナー・タスクを中断し、参照をnullにし、 (まだPausedだった場合は)Pause-Gateを解除して、Finished-ステート (トライアルが存在する場合)あるいはIdle-ステート(存在しない場合)に 切り替える。すでに計算済みのトライアルはリストに表示されたまま残る — Stopはそれらを削除しない。デストラクティブ・ボタンの役割により、 ランを中断するという意味で赤色で表示される。

W33「Resume」ボタン

場所

左側のツールバー、Pausedステートの時。

技術詳細

Pause-Gateを解除し、Running-ステートに戻す。 ランナー・タスクはすでに実行中で(ポーリング・ループで待機している)、 一時停止が解除されたことをループが検知すると、実行を続け次の トライアルを開始する。

W34「Save Best Config」ボタン

場所

右側のツールバー、常に表示される(ただし、まだ 最良のランが存在しない間はグレーアウトされる)。

技術詳細

デフォルトのファイル名bayesopt-best.jsonで、 JSONに限定された保存ダイアログを開く。確定後、ペイロード・ ディクショナリが構築される: プリセット名、トライアル・インデックス、値 (Objectiveスコア)、パラメータ(デコードされたパラメータ名 → 値の ディクショナリ)。デコード処理は、正規化されたサーチスペース座標 [0,1]^dを、(log-uniform/linear/integerのスケールに応じて) 元の値域に逆投影する。JSON出力はプリティプリントされ、キーは ソートされる。書き込みエラーの場合は(現在のデモ版では) サイレントに無視される — これはデモ用パスなのでエラーUIはない。

このボタンは、トライアルが1回も実行されていない間はグレーのままである。

W35「Search Space」プリセット・ピッカー

場所

左サイドバー、上部。

技術詳細

4つのプリセット・オプションを持つメニュー・ ピッカー: - 「RadianceKit defaults (6-dim)」— 6つの標準 ハイパーパラメータすべてを含む完全な標準サーチスペース。 - 「Mip subset (2-dim)」— mipSmoothing3DScale [0.05, 0.5](log-uniform)とmipFilter2DVariance [0.1, 0.6](linear)のみ。特定のシーンクラス向けにMip-Splattingを チューニングしたい場合に便利。- 「densify-until + ssim-weight + grad-thresh」 — 3つのDensify関連パラメータ(densifyGradThresholdはlog-uniform、 ssimWeightはlinear、densifyUntilIterはinteger)。 - 「Bowl demo (1-dim)」— 「BayesOptはこうやって動く」というデモの ための、教育目的の単一パラメータ・サーチスペース。

ランが実行中の間は、サーチスペースを切り替えることはできない (オプティマイザを混乱させてしまうため)。

W36「Trial Budget」スライダー

場所

左サイドバー、サーチスペース・ピッカーの下。

技術詳細

10から200までのスライダー、刻み幅5。デフォルト 40。これは、BayesOptが最大N回のトライアルを実行できることを意味する。 そのうち最初の数回は初期サンプル(Latin-Hypercube)で、残りは実際の BayesOptトライアルとなる。実践上の目安: d次元のサーチスペースには、 良好な最適解のためにdの約10~20倍のトライアル数が必要となる。 6次元のデフォルトなら60–120、2次元のMip-Subsetなら20–40、 1次元のBowl-Demoなら10–20。

ラン実行中はスライダーが無効化される。

W37「Random Seed」スライダー

場所

左サイドバー、Budgetスライダーの下。

技術詳細

1から100までのスライダー、刻み幅1。デフォルト 42。このシードは、初期のLatin-Hypercubeサンプルにも、デモ・ オブジェクティブのノイズ成分にも渡される。再現性: 同じシード + 同じ サーチスペース + 同じバジェットは、まったく同一のトライアル・ シーケンスを生む。「同僚全員がデモを再構築したとき、同じランになるか」 という用途に便利。ラン実行中は無効化される。

W38チャート(Convergence)

場所

ウィンドウの中央列。

技術詳細

2つのレイヤーを持つSwift Chartsのダイアグラム: 1. トライアルごとの「best-value-so-far」を表すライン — アクセント カラーの単調増加または横ばいの曲線。2. 個々のObjective値を表す トライアルごとの点、フェーズによって色分け。シンボル・サイズは40。 3つのフェーズ・ラベル: 「init」(青)、「bo」(緑)、「restart」 (オレンジ)。

左上に小さな凡例が表示され、フェーズの色を示す。トライアル・リストが 空の場合(最初のStart前)、代わりにチャート・アイコンと 「Press Start to begin a BayesOpt run.」というメッセージを含む Empty-State表示になる。

W39テーブル(Trial Log)

場所

ウィンドウの右列。

技術詳細

遅延スタック描画されたトライアル行を含む スクロール領域。各行は水平スタックになっている: トライアル番号 (3桁のモノスペース、左寄せ)、値(モノスペース、右寄せ、幅70pt)、 フェーズ・タグ(Capsule、25%の不透明度で塗りつぶし — 「init」は グレー、「bo」は青、「restart」はオレンジ。これは隣のチャートの 点の色とは意図的に異なる色になっている)、そのトライアルが 現在の最良である場合はオプションで黄色い星。新しいトライアルが 追加されるたびに自動的に最後尾にジャンプするAuto-Scroll機構がある — そのため、自分でスクロールしなくても画面下部でライブの推移を 追い続けられる。

メインウィンドウ:損失推移とガウシアン数(I39–I41、相互参照)

メインウィンドウの Inspector 表示のうち3つは、トレーニング実行中は常に目にするものであり、また推移が健全に見えるかどうかを判断する重要な経験則があるため、個別に説明する価値がある。これらの表示は Inspector の進捗セクション内、折りたたみ可能なグループ損失推移(第2章 — Inspector を参照)にあり、上述の Aux ウィンドウにおけるホールドアウト分析を補完するものだ。

Loss カーブが健全なのはどんなとき? 健全な Loss カーブは3つのフェーズを示す。(1) ウォームアップ — 最初の200–500イテレーションで、Loss はシーンにもよるが高い値(L1+SSIM 結合で典型的に0.15–0.25)からその半分程度まで急激に下がる。このフェーズで Loss が下がらない場合、たいてい入力に問題がある(画像が壊れている、SfM のポーズが悪い、初期ガウシアン数が少なすぎる、など)。(2) Densification — ~500 から densifyUntilIteration(クラシックでは典型的に15K、MCMC では20K または25K まで)の間、Loss はさらに下がり続け、Densify 操作が新しいガウシアンを挿入してオプティマイザがそれを活用するたびに小さな段差状の下降が見られることが多い。このフェーズではガウシアン数が増加する。(3) リファインメント — その後、Loss はだんだん平坦になっていくテールに入る。目安となる典型的な最終値としては、良好に照明されたオブジェクトシーン(例えば Tanks-&-Temples の Truck を P4 Quality で処理した場合)では L1 ≈ 0.023 に落ち着き、Mip-NeRF 360 のような広範囲の屋外シーンでは当然それより高め(0.04–0.07)になる。

プラトーは何を意味するのか? プラトー(Loss カーブが数千イテレーションにわたって水平に推移する状態)には2つの解釈がある。(a) モデルが収束しており、これ以上トレーニングしても意味がない — これは良いケースだ。(b) モデルがスタックしている(局所最小値、勾配情報が乏しい、バッファ上限に達したなど) — これは悪いケースだ。両者はチャート上では同じに見える。見分け方:ガウシアン数を確認しよう。もしそれも平坦で、かつ MCMC の Cap に近い(例えば Preset P8 Quality (MCMC) で150K のうち150K に達している場合)なら、上限に達している状態だ — Cap を上げるか、プラトーを受け入れるかのどちらかになる。ガウシアン数がまだ増えているのに Loss が下がらない場合は、スタックしている。

いつ中止し、いつトレーニングを続けるべきか? 経験則:10K イテレーションの間 Min-Loss の改善が見られなければ中止する。それ以上続けてもイテレーションが無駄になる。それより前の段階では、Training メニュー → Continue Training → 「+5,000 iterations」から延長を追加できる(限界的な改善が見られる場合。これに対応するキーボードショートカットはない)。注意:MCMC の場合、プラトーは本物であることが多い — Cap が自然な限界だからだ。

ガウシアン数のプラトーは「完了」のシグナルではない。 それは単に MCMC が Cap に達したか、Classic Densification が限界まで使い切られたことを意味するにすぎない。本当の「完了」の問いに答えられるのは、独立したテストセットに対する PSNR/SSIM/LPIPS だけだ — その数値は Pareto Dashboard(W13–W22)で評価するベンチマークレポートに記載されている。ホールドアウトウィンドウ(W23–W29)はこれらのメトリクスを提供しない。それが判断するのは、あなたのカメラセットがそもそもトレーニング用とテスト用の視点に公平に分割できるかどうかだけだ。

PSNR/ホールドアウトこそが真実であり、Loss はあくまで代理指標にすぎない。 Loss は相対的なメトリクスであり、モデルがトレーニング用ビューに適応するにつれて下がっていく。しかし Loss が低いからといって、自動的に良いモデルというわけではない — もしモデルがトレーニング画像を丸暗記してしまっていたら(過学習)、Loss は小さくなる一方で、未見のビュー(ホールドアウト)に対する PSNR は悪くなるだろう。だからこそ、最終的な品質評価では常にホールドアウトのメトリクスを見るべきであり、最終 Loss だけを見てはいけない。

経験則ボックス

  • User Guide と Keyboard Shortcuts は静的なヘルプです — キーワードで調べたいときは素早く使え、深く知りたいときはこの本編のマニュアルを使ってください。
  • ディスクの空き容量が10%を下回ったら Manage Storage を開きましょう。ログと Imports のステージングが大抵の元凶です。
  • Pareto Dashboard は少なくとも3つか4つのトレーニングレポートが揃ってから意味を持ちます。X軸はコスト(Time / Gs)、Y軸は品質(PSNR / SSIM)です。Pareto フロントは効率的な組み合わせを示します。
  • 他の人とPSNRベンチマークを公開する前に Holdout Analysis を使ってください — テストセットが本当に代表的なものであることを保証できます。エクスポートされたFold分割は外部ツール向けのものです。RadianceKit自体は引き続き「every-8th」に対してトレーニングします。
  • BayesOpt Console は基本的に探索空間の定義を学び検証するためのツールです — 実際のトレーニング実行ではなく、デモ用の関数に対して計算します。
  • Loss-Plateau と Gaussian-Count-Plateau は別々に解釈する必要があります。Cap-Limit は「完了」のシグナルではありません。本当の品質はHoldout-PSNRでしか測れません。
  • Min-Lossの改善なしに10,000イテレーションが経過したら → トレーニングを停止してください。