uDepth:Pixel 4でリアルタイムに奥行情報を測定

uDepth:Pixel 4でリアルタイムに奥行情報を測定

1.uDepth: 4でリアルタイムに奥行情報を測定まとめ

・Pixel 4の高速暗闇顔認証はuDepthと呼ばれる赤外線(IR)深度センサー群とソフトウェアで実現した
・uDepthは自然な風景が局所的には平面である事などを利用して計算を簡素化して速度を向上している
・3D写真などのコンピュテーショナルフォトグラフィでも利用するために独自の学習データも作成

2.uDepthとは?

以下、ai.googleblog.comより「uDepth: Real-time 3D Depth Sensing on the Pixel 4」の意訳です。元記事の投稿は2020年4月10日、Michael SchoenbergさんとAdarsh Kowdleさんによる投稿です。ずっと見ていると人間でも奥行が良くわからなくなってくるアイキャッチ画像のクレジットはPhoto by Eric Saunders on Unsplash

深度センシング(depth sensing)と呼ばれる、風景内の三次元情報を測定できる機能は、開発者とユーザーの両方にとって貴重なツールです。

深度センシングは、ポートレートモード拡張現実(AR)などのアプリケーションから、透明な物体の検出などの根本的なセンシングの革新に至るまで、研究が非常に活発なコンピュータビジョンの分野です。

典型的なRGBベースのステレオ深度センシング技術は、必要な計算量が多く、質感が薄い領域で問題があり、極端に暗い場所では全く機能しません。

Pixel 4に実装されているフェイスアンロック機能は、高速かつ暗闇で機能する必要があるため、別のアプローチが必要でした。

そのため、Pixel 4の前面には、uDepthと呼ばれるリアルタイム赤外線(IR)アクティブステレオ深度センサーが含まれています。

このテクノロジーはPixel 4の主要なコンピュータービジョン機能を支えており、顔認証システムがユーザーを識別し、なりすまし攻撃から保護するのにも役立ちます。

また、写真撮影後のレタッチ、深度ベースのセグメンテーション、背景のぼかし、ポートレートエフェクト、3D写真など、多くの斬新な機能もサポートしています。

最近、uDepthにCamera2 APIを通じてアクセスできるようにしました。Pixel Neural Core、2台のIRカメラ、およびIRパターンプロジェクターを通じて、時間同期された深度フレーム(DEPTH16)を30Hzで提供します。

Googleカメラアプリは、このAPIを使用して、Pixel 4で撮影した自撮りのピントを向上させます。本投稿では、uDepthの仕組み、基礎となるアルゴリズムについて詳しく説明し、Pixel 4の例を使用してアプリケーションについて説明します。

ステレオ深度センシングの概要
全てのステレオカメラシステムは、視差を使用して奥行き情報を再構築します。この効果を実感するには、物体を見つめて、片目を閉じてから、閉じている目を切り替えてください。物体の見かけ上の位置が移動し、近くにある物体はより多く移動しているように見えます。

uDepthは、各画素の視差を計算して推定する高密度ローカルステレオマッチングテクニックの一種です。

これらのテクニックは、1台目のカメラで撮影した画像の各ピクセルの周囲領域を元に、2台目のカメラで対応する画像領域を見つけようとします。適切に対応付けできた場合、生成される再構成は基準として使用できます。すなわち、そこに三角測量の原理を利用して実際の物理的な距離を計算できます。


Pixel 4のフロントセンサーの位置、アクティブステレオシステムの一例

質感がない領域を処理し、光量が少ない状況に対処するために、「アクティブステレオ」設定を使用します。これは、ステレオIRカメラで検出された風景にIRパターンを投影するアプローチです。このアプローチにより、質感がない領域の特定が容易になり、その結果、システムの計算量が軽減されます。

uDepthの独創性は何ですか?
ステレオセンシングシステムは非常に計算量が多いため、30Hzで動作するセンサーは低消費電力で動作しつつ高品質を維持することが重要です。uDepthは、これを実現するためにいくつかの重要な洞察を活用しています。

洞察の1つは、互いに類似している1組の領域が与えられた時、ほとんどの場合、それらの領域が対応するサブセットも類似しているということです。例えば、8×8の画素からなる2つ領域が類似している場合、そのペアの左上の4×4のサブ領域も類似している可能性が非常に高くなります。

これは、uDepthパイプラインの初期化手順にとって有力な洞察です。初期化手順では、各画像の重複しない領域を比較し、最も類似している領域を選択することにより、深度情報をピラミッドのように構築していきます。このプロセスは1×1の領域から始まり、最初の低解像度の深度マップが生成されるまで階層的に蓄積します。

初期化後、ニューラル深度調整(neural depth refinement)と言う新しい手法を適用し、Pixel 4で通常のグリッドパターンイルミネーターをサポートします。

一般的なアクティブステレオシステムは、疑似ランダムグリッドパターンを投影して、風景内の一致箇所を明確にしますが、uDepthは繰り返しグリッドパターンをサポートできます。

このようなパターンで繰り返し構造を作成すると、ステレオペア間で類似した領域が生成され、誤った部分を一致と誤認識する可能性があります。この問題は、軽量(75kパラメーター)のたたみ込みアーキテクチャーにIR輝度と隣接情報を使用する事で対処でき、フレームあたり1.5ミリ秒未満で誤った一致を調整できます。


ニューラル深度調整アーキテクチャ

ニューラル深度調整に続いて、適切な深度推定値が隣接する領域から繰り返し伝播されます。これ以降のパイプライン手順では、uDepthの成功の鍵となる別の洞察を活用します。

自然な風景は通常、局所的には平面であり、平面から逸脱する部分はわずかです。この洞察により、風景をカバーする平面領域を見つけ、後で領域内の各画素の個々の深度を調整するだけで済み、計算負荷を大幅に削減できます。

最後に、隣接する平面候補の中から最適な一致領域が選択され、適切な一致が見つからなかった場合はサブピクセルの調整と無効化が行われます。


簡素化された深度アーキテクチャ
緑のコンポーネントはGPU、オレンジ色はCPU、青はPixel Neural Coreで実行されます

スマートフォンを激しく落下させると、ステレオカメラの工場出荷時の設定からカメラ位置がずれてしまう事があります。現実世界での利用に耐えて高品質な結果を保証するために、uDepthシステムは自己較正をしています。

スコアリングルーチンは、すべての深度画像を評価して、不整合の兆候がないかどうかを確認して、デバイスの状態に対する信頼性を向上させています。ミスキャリブレーションが検出されると、現在撮影した風景からキャリブレーションパラメータが再生成されます。これは、特徴の検出と調整、サブピクセル調整、バンドル調整からなる一連のパイプラインです。


左:不正確なキャリブレーションでのステレオ深度
右:自動キャリブレーション後のステレオ深度

詳細については、uDepthのベースとなっているSlanted O(1)Stereoを参照してください。

コンピュテーショナルフォトグラフィ(Computational Photography)の深度
uDepthセンサーからの生データは、正確、且つ基準となるように設計されています。これは、顔認証(face unlock)システムの基本的な要件です。

コンピュテーショナルフォトグラフィには、ポートレートモードや3D写真などの非常に異なったニーズがあります。これらの使用例では、動画がコマ落ちしないようフレームレートを維持する事は必要ではありませんが、奥行きはスムーズで、先端部分が揃っていて、カメラの視野全体で完全でなければなりません。


左から右に「生の深度検出結果」、「そこから予測された深度」、「結果を使った3D写真」壁が滑らかに回転している事に注目してください。これは、単一の平面に焦点を合わせた結果ではなく、深度勾配を連続的に補足している事を示しています。

これを実現するために、生のuDepthデータを拡張するエンドツーエンドのディープラーニングアーキテクチャをトレーニングし、完全で高密度の3D深度マップを推測しました。

これは「RGB画像」、「人物の切り抜き」、「生の深度情報」を組み合わせて学習し、ドロップアウト手法を使って各入力の情報を強制的に学習させます。


コンピュテーショナルフォトグラフィの深度を拡張するためのアーキテクチャ

ラベル付きトレーニングデータを作成するために、写真のようにリアルな人物モデルを作成できるボリュームキャプチャシステムを活用しました。

これは、331のカスタムカラーLEDライトを備えたgeodesic sphere(測地線球)と高解像度カメラ群のセットです。

Pixel 4スマートフォンをセットに追加し、残りのハードウェア(ライトとカメラ)と同期させました。生成されたトレーニングデータは、Pixel 4カメラの視点からの実際の画像と合成レンダリングの組み合わせで構成されます。


データ収集の概要

全てを一緒にする実装
これら全てのコンポーネントを配置すると、uDepthは30Hzで深度ストリーム(Camera2を介して利用)と、写真用のスムーズで後処理された深度マップ(深度対応の自撮り写真を撮ったときにGoogleカメラアプリを介して利用)の両方を生成します。

私達のシステムが生成するスムーズで高密度な画素単位の深度は、ソーシャルメディア深度機能が有効になっていれば全てのPixel 4自撮りで利用できます。これにより、ソーシャルメディア用の写真にボケや3D写真などの撮影後効果を適用できます。



アプリケーションの例
3D写真が複数の面に焦点を合わせている事に注目してください。

最後に、uDepthからリアルタイムの点群(point cloud)視覚化するために使用できるデモアプリケーションを紹介させていただきます。下部リンクのstorage.googleapis.comからudepth.zipをダウンロードしてください。(このアプリはデモンストレーションと研究のみを目的としており、商用利用される事は意図としていません。Googleはどのようなサポートもアップデートも提供しません)

このデモアプリは、Pixel 4から得た3D点群を視覚化します。深度マップは時間同期されており、RGBイメージと同じ座標系にあるため、以下の視覚化例のように、テクスチャを三次元で表示できます。


Pixel 4のシングルフレームからuDepthを使って構成したRGBの点群

謝辞
この作品は、多くの人々の貢献なしでは実現できなかったでしょう。下記の人々を含みますが、名前を掲載した方だけに限定されているわけではありません。Peter Barnum, Cheng Wang, Matthias Kramm, Jack Arendt, Scott Chung, Vaibhav Gupta, Clayton Kimber, Jeremy Swerdlow, Vladimir Tankovich, Christian Haene, Yinda Zhang, Sergio Orts Escolano, Sean Ryan Fanello, Anton Mikhailov, Philippe Bouchilloux, Mirko Schmidt, Ruofei Du, Karen Zhu, Charlie Wang, Jonathan Taylor, Katrina Passarella, Eric Meisner, Vitalii Dziuba, Ed Chang, Phil Davidson, Rohit Pandey, Pavel Podlipensky, David Kim, Jay Busch, Cynthia Socorro Herrera, Matt Whalen, Peter Lincoln, Geoff Harvey, Christoph Rhemann, Zhijie Deng, Daniel Finchelstein, Jing Pu, Chih-Chung Chang, Eddy Hsu, Tian-yi Lin, Sam Chang, Isaac Christensen, Donghui Han, Speth Chang, Zhijun He, Gabriel Nava, Jana Ehmann, Yichang Shih, Chia-Kai Liang, Isaac Reynolds, Dillon Sharlet, Steven Johnson, Zalman Stern, Jiawen Chen, Ricardo Martin Brualla, Supreeth Achar, Mike Mehlman, Brandon Barbello, Chris Breithaupt, Michael Rosenfield, Gopal Parupudi, Steve Goldberg, Tim Knight, Raj Singh, Shahram Izadi。
また、デバイスとサービスの壁を越えて協力をしてくれた、Google Researchチーム、Androidチーム、そしてGoogle Xの皆さん

3.uDepth:Pixel 4でリアルタイムに奥行情報を測定関連リンク

1)ai.googleblog.com
uDepth: Real-time 3D Depth Sensing on the Pixel 4

2)storage.googleapis.com
udepth.zip

3)ieeexplore.ieee.org
SOS: Stereo Matching in O(1) with Slanted Support Windows