多視点3Dディスプレイ「Looking Glass Go」用に写真を立体化、AIによる単眼深度推定の方法と課題を解説
MarigoldとComfyUIでRGBD画像を出力
MarigoldはDiffusersという拡散モデルのライブラリを拡張して実装されています。DiffusersはStable Diffusionの画像生成でも使われるもので、以前は私もこれを使って生成処理を作っていました。同様にMarigoldでもPythonのスクリプトを書いてもいいのですが、家族にも使ってもらう場合など考えるとGUIがほしいです。 Pythonで動かすこの手のツールをGUIに組み込むのは、管理の手軽さまで考えると意外と面倒です。 幸い画像生成で常用しているノードベースのGUIツールComfyUI上から、直接Marigoldを使えるカスタムノードMarigold depth estimation in ComfyUIが公開されています。 今回はこれを使いComfyUIのWorkflowとして深度推定処理を用意します。WorkflowはComfyUIの処理をまとめたもので、手軽に再利用できます。 ・RGBD画像 Looking Glassのデバイスに渡せる深度情報付きのコンテンツは、RGBD写真またはビデオであると公式のドキュメントにあります。 RGBDのDがどう格納されるかというと、単にRGBのピクセルで構成された元画像と、Dを示すグレースケールのピクセルを並べたものでした。チャンネルやメタデータだとやや面倒でしたが、これならComfyUIで簡単に対応できそうです。 ComfyUIはMarigold対応も含めて、カスタムノードという仕組みで機能を追加できます。そうしたカスタムノードのひとつにImagesGridがあり、これを使えば生成した画像のタイリングが手軽に実行できます。 ImagesGridは多様な設定で生成した画像の比較を1枚に収める用途で使われることが多いですが、2枚の画像を単に横に並べることも可能です。 ComfyUIにMarigold depth estimation in ComfyUIとImagesGridを追加し、Looking Glass Goに渡せるRGBD画像を直接生成するよう構成したWorkflowが以下です。 Looking Glass Goの解像度は1440×2560の縦WQHDですが、フルサイズで扱うのはVRAM消費や推定時間が重かったため、入力画像は1080×1920の縦FHDとしました。それでもMarigoldの推論は重たく、1~2分はかかります。 推定結果の確認用ノードが多いため複雑そうに見えますが、処理はとても単純です。モデルを読み込み、パラメータを指定して深度の推論を実行、結果をカラーマップでも確認しつつ、元画像と結果画像を左右に並べて結合しファイル保存。一応推定結果のみの画像も保存。これだけです。 推定はグレースケールで出力されますが、それだけでは結果の良し悪しを視覚で確認しにくいです。そこでMarigold depth estimation in ComfyUIに含まれるColorizeDepthmapノードを使って、さまざまなカラーマップを割り当てています。 今回は単一画像だけしか扱っていませんが、ComfyUIで複数の画像を入力するノードは別にあるため、フォルダ丸ごとの推定に対応も問題なさそうです。 また画像の生成と推論をまとめて処理すれば、Looking Glass Go用にライブ生成表示する仕組みも作れそうです。ただしVRAMが同時に必要なので、手元の16GB環境ではFHDのままでは厳しいでしょう。