多視点3Dディスプレイ「Looking Glass Go」用に写真を立体化、AIによる単眼深度推定の方法と課題を解説
推定結果の確認
環境ができたので、推定結果が妥当かの確認を行います。Looking Glass Goの現物がないため深度マップを視覚で確認するのと、擬似的な再現として3DCGを使った疑似立体化を試します。 ・おじさん画像 まずはいつものように、ありふれたおじさんの生成した画像で。 かなりきれいに深度が推定できているようです。背景も誤判定なさそうですし、グレースケールではわかりにくいですが、歯や髪の毛も細かく取れています。 Marigoldは実写表現に強く、細かな描写も得意です。私がLooking Glass Goに期待している人物の表示には十分な性能がありそうです。元の画像が生成したもののため現実と矛盾した表現も含みますが、あまり気にせず使えそうです。
・深度推定の難しい画像 単眼深度推定が失敗しやすい表現はいろいろありますが、MiDaSでよく問題になったのが、無限遠や映り込み、透明、そして白飛びや黒つぶれなどでした。今度は難しそうな背景と合わせての深度推定です。 単眼深度推定の難しい対象に無限遠があると書きましたが、無限遠も色々です。無限遠といっても実際に無限とは限らず、宇宙空間のような何もない場合もあれば、単に遠方だとか、切り抜かれた画像素材のように非現実的な無限もあります。 そうしたさまざまな遠さを適切に推定するのは難しく、またそれをどのような深度マップとするのかも重要です。8bitの場合なら256段階の階調の中、近傍にあるものから無限といっていい距離まで、適切にマッピングしなければなりません。 Marigoldはこれまでの単眼深度推定より無限遠に強い印象ですが、それでもこの例では不自然さが目立ちます。理想的にはタワーや空は全て最も遠い、黒=0で判定してほしい所です。しかし左側がやや明るく、全体的に濃淡を持ってしまっています。その分人物の濃淡に割り当てる範囲が狭くなってしまい、十分な表現ができていません。 こうした問題は深度マップを16bitで出力できると対処できます。16bitなら65536段階の濃淡で扱えるため、柔軟にマッピングしなおせます。たとえLooking Glass Goに必要なのが8bitでも、16bitで加工して8bitに書き出せば問題ありません。 残念ながらMarigoldは、MiDaSと違って16bitでの推定に対応していないようです。MarigoldがDiffusionモデルの拡張なので仕方ないのかもしれませんが、16bitで補正できる方法も探したい所です。手間をかけてもいい場合は、擬似的にPhotoshopなどで16bitに変換して編集するのも良いでしょう。 他に、おじさんの眼鏡も不正に推定されています。ガラスなどの透明体はその奥が見えていても、深度としては透明体そのものの位置が正しいです。このような出力では眼鏡の中だけかなり奥まっていることになります。