Pixel 3は写真の奥行きを決定する方法を学習します

Pixelスマートフォンのポートレートモードでは、背景をぼかして被写体に注目を集めるプロ並みの写真を撮ることができます。 昨年、単一のカメラと位相検出オートフォーカス(位相検出オートフォーカス、PDAF)( デュアルピクセルオートフォーカスとも呼ばれる)を使用して深度を計算する方法について説明しました。 このプロセスでは、トレーニングなしで従来のステレオアルゴリズムを使用しました。 今年のPixel 3では、機械学習を採用して深度評価を改善し、ポートレートモードでさらに優れた結果を提供しました。





左: HDR +でキャプチャされた元の画像。 右側は、従来のステレオ学習と機械学習の深度を使用したポートレート結果の比較です。 学習成果は、より少ないエラーを生成します。 従来のステレオ結果では、人間の後ろの多くの水平線の深さは、人間自身の深さと等しく誤って推定され、その結果、それらは鋭いままです。



前の資料への短い遠足



昨年 、ポートレートモードでは、ニューラルネットワークを使用して人物の画像と背景画像に属するピクセルを分離し、この2レベルマスクをPDAFピクセルから取得した深度に関する情報で補完することを説明しました。 これはすべて、深さに応じて、プロのカメラが提供できるものに近いぼかしを得るために行われました。



動作するために、PDAFはシーンの2つのわずかに異なるショットを取ります。 画像を切り替えると、人物が動いておらず、背景が水平方向に動いていることがわかります。この効果は視差と呼ばれます。 視差はカメラからの点の距離と2つの視点間の距離の関数であるため、ある画像の各点を別の画像の対応する点と比較することで深度を決定できます。





左側と中央のPDAF画像は似ていますが、右側の拡大部分に視差が見られます。 拡大の中心にある丸い構造が最もわかりやすいです。



ただし、PDAF画像でこのような対応を見つけること(この方法はステレオ深度と呼ばれます)は、写真間のポイントの動きが非常に弱いため、非常に難しいタスクです。 さらに、すべてのステレオ技術には、開口の問題があります。 小さな開口部を通してシーンを見ると、ステレオベースラインに平行なライン、つまり2つのカメラを接続するラインのポイントの対応を見つけることは不可能です。 言い換えると、提示された写真の水平線(または縦向きの写真の垂直線)を調べると、ある画像の別の画像に対するすべてのシフトはほぼ同じに見えます。 昨年のポートレートモードでは、これらすべての要因により、深度の決定にエラーが発生し、不快なアーティファクトが表示される可能性がありました。



深度評価の改善



Pixel 3のポートレートモードでは、ステレオ写真からの視差が画像内の多くの手がかりの1つにすぎないという事実を使用して、これらのエラーを修正します。 たとえば、焦点面から遠いポイントはシャープではないように見えますが、これは焦点が合っていない深度からのヒントになります。 さらに、フラットスクリーンで画像を表示する場合でも、日常のオブジェクトのおおよそのサイズがわかっているため、オブジェクトまでの距離を簡単に推定できます(つまり、人の顔を表すピクセル数を使用して、その位置を評価できます)。 これは意味的な手がかりになります。



これらのヒントを組み合わせたアルゴリズムを手動で開発することは非常に困難ですが、MOを使用すると、PDAF視差のヒントのパフォーマンスを向上させながらこれを行うことができます。 具体的には、 TensorFlowで記述された畳み込みニューラルネットワークをトレーニングし、PDAFピクセルを入力として受け取り、深さを予測することを学習しています。 MOに基づいて深度を推定するこの新しい改良された方法は、Pixel 3ポートレートモードで使用されます。





畳み込みニューラルネットワークは、入力でPDAF画像を受け取り、深度マップを発行します。 ネットワークは、追加のスキップ接続と残余ブロック備えたエンコーダーデコーダー形式のアーキテクチャを使用します。



ニューラルネットワークトレーニング



ネットワークをトレーニングするには、多くのPDAF画像と対応する高品質の深度マップが必要です。 また、ポートレートモードで有用な深度予測が必要なため、ユーザーがスマートフォンで撮った写真に似たトレーニングデータが必要です。



これを行うために、特別なFrankenfonデバイスを設計しました。このデバイスでは、Pixel 3の5台の電話を組み合わせて、それらの間にWiFi接続を確立しました。 このデバイスでは、複数の角度からのモーションとステレオの両方を使用して、写真に基づいて高品質の深度マップを計算しました。





左:トレーニングデータを収集するためのデバイス。 中央:5枚の写真を切り替える例。 カメラの同期により、ダイナミックシーンの深度を計算できます。 右:全体の深さ。 テクスチャの弱さのために異なる写真のピクセルの比較が不確実だった信頼性の低いポイントは黒く塗られ、トレーニングには使用されません。



このデバイスを使用して取得したデータは、次の理由でネットワークのトレーニングに最適でした。





ただし、このデバイスを使用して取得したデータの理想性にもかかわらず、シーンオブジェクトの絶対深度を予測することは依然として非常に困難です。特定のPDAFペアはさまざまな深度マップに対応できます(すべてレンズの特性、焦点距離などに依存します)。 これをすべて考慮するために、シーンオブジェクトの相対的な深さを評価します。これは、ポートレートモードで十分な結果を得るのに十分です。



これをすべて組み合わせる



Pixel 3でMOを使用して深度を推定すると、ユーザーがポートレートの結果を長時間待つ必要がないようにすばやく機能するはずです。 ただし、小さなデフォーカスと視差を使用して適切な深度推定値を取得するには、写真のニューラルネットワークに最大解像度でフィードする必要があります。 高速な結果を確保するために、モバイルおよび組み込みデバイスでMOモデルを起動するためのクロスプラットフォームソリューションであるTensorFlow Liteと、異常に大きな入力データの深度をすばやく計算できる強力なPixel 3 GPUを使用します。 次に、取得した深度推定値とニューラルネットワークのマスクを組み合わせます。これにより、人物をポートレートモードで撮影した場合に最も美しい結果が得られます。



自分で試してみてください



Google Camera Appバージョン6.1以降では、深度マップはポートレートモードの画像に埋め込まれています。 これは、 Google Photos Depth Editorを使用して、写真の撮影後にぼかしの度合いと焦点を変更できることを意味します。 サードパーティのプログラムを使用して、jpegから深度マップを抽出し、自分で調査することもできます。 また、ポートレートモードで相対的な深度マップと対応する画像を示すアルバムを作成して、従来のステレオとMOのアプローチを比較するリンクたどります。



All Articles