機械学習で改善されたPixel 3のポートレートモード(2/2)

  • 2018.12.01
  • AI
機械学習で改善されたPixel 3のポートレートモード(2/2)

1.機械学習で改善されたPixel 3のポートレートモード(2/2)まとめ

・Pixel 3のポートレートモードは視差以外の様々な手がかりを使い奥行情報の精度を上げている
・多様な手がかりは人間が設計したアルゴリズムでは活用が難しいが機械学習ならば有効活用できる
・機械学習用に専用のリグを作成し学習用のデータを収集した

2.機械学習を用いたPixel 3のポートレートモード

以下、ai.googleblog.comより「Learning to Predict Depth on the Pixel 3 Phones」の意訳です。元記事は2018年11月29日、Rahul GargさんとNeal Wadhwさんによる投稿です。前編はこちら

奥行情報の推定を改善する
Pixel3のポートレートモードでは、ステレオアルゴリズムで使われる視差は手がかりの1つにすぎず、対象画像内には他にも多くの奥行き情報に関連する手がかりがあるという事実を利用して、これらのエラーを修正します。

例えば、ピントがあっていない場所、つまりフォーカスから離れた場所は、フォーカスの近くにある場所より写りが鮮明ではありません。これは、デフォーカスの深さ、つまりどのくらいぼかすべきかに関する手がかりを与えます。更に、平面的な画像であっても、私たちはほとんどの物体の大まかなサイズを知っているのでその物体までの距離がどのくらいであるかを知ることができます。(例えば、人物の顔を構成している画素の数を数えて、その人物が写真内でどのくらい離れているか知る事ができます)。これはセマンティックキュー(意味による手がかり)と呼ばれます。

これらの異なる手がかりを有効に組み合わせるアルゴリズムを人間が頭で設計することは非常に困難ですが、機械学習を使用することによって、PDAFの視差に加えて様々な手掛かりを有効活用しながら奥行情報の推定を行うことができます。具体的には、TensorFlowで書かれた畳み込みニューラルネットワークを訓練し、PDAFを入力として受け取り、奥行情報を予測することを学ばせます。この新しい、改良された機械学習ベースの奥行推定方法は、Pixel 3のポートレートモードを改善する能力の源泉となります。


我々の畳み込みニューラルネットワークは、入力としてPDAFを取り込み、深度マップを出力します。ネットワークは、Encoder-Decorderスタイルの構造で、スキップ接続および残差ブロック(residual blocks)を取り入れています。

ニューラルネットワークのトレーニング
ネットワークを訓練するためには、多くのPDAFとそれに対応する高品質な深度マップが必要です。 また、ポートレートモードでの奥行情報の予測を有効にするため、スマートフォンで撮影する写真と似た訓練データも必要です。

これを実現するために、5台のPixel 3スマートフォンと、全てのスマートフォンから同時に(約2ミリ秒の許容範囲内で)撮影できるWi-Fiベースのシステムを含む独自のカスタム「Frankenphone」リグを作り上げました。このリグでは、動きから構造を求める手法とマルチビューステレオを使用して、写真から高品質な奥行情報を計算しています。


左:トレーニングデータを収集するために使用されるカスタムリグ。中央:5つの画像を連続でGIFアニメにした例。異なった視点から同時に撮影する事で、このような動きのある風景でも奥行き情報を計算できます。右:本当の奥行情報。信頼性の低い点、すなわちステレオマッチングが困難な箇所は黒で塗りつぶされ、トレーニング中は使用されません。(Sam Ansari and Mike Milne)

このリグで撮影したデータは、以下の理由でニューラルネットワークのトレーニングに最適です。

1)5つの視点は、複数の方向に視差があり、したがって開口の問題がないことが保証されます。

2)5つのカメラを効率的に配置する事により、画像内のある点は少なくとも2つのカメラから撮影できているようにする事が可能であり、奥行情報の計算が不可能な点を少なくできます。

3)5つのカメラ間の距離は、PDAFの2視点間の距離よりもはるかに大きく、より正確な奥行情報の推定を得る事ができます。

4)カメラ間の同期により、上記のような動きのあるシーンでも奥行きを計算できます。

5)リグは持ち運びが比較的容易なため、様々な場所でユーザがスマートフォンで撮影する写真を模した写真を撮ることができます。

しかし、このリグを使って撮影したデータは理想的ですが、風景内の各物体までの絶対的な距離を予測することは依然として非常に困難です。PDAFのペアは、レンズの特性やフォーカスの位置など、様々な要因に影響を受けてしまうのです。これを考慮に入れて、私達は絶対的な距離ではなく風景内の物体の相対的な距離を予測します。満足のいく品質のポートレートモードを撮影するためには相対的な距離で十分です。

全てを同時に素早く実行する
この機械学習ベースの奥行情報推定は、ユーザーがポートレートモード撮影時に長時間待つ必要をなくすためにPixel 3で高速に実行する必要があります。

しかし、わずかなデフォーカスの違いと視差を手がかりに奥行情報の推定を行うためには、解像度が高くサイズの大きいPDAF画像を複数枚、ニューラルネットワークで処理する必要があります。高速に処理するために、私達は、モバイルおよび組み込み機器での機械学習モデルを実行するためのクロスプラットフォームソリューションであるTensorFlow Liteと、Pixel 3の強力なGPUを使用しています。そして、得られた奥行情報の推定値と人物を画素単位で特定するセマンティックセグメンテーションニューラルネットワークからの情報を組み合わせて、美しいポートレートモードの結果を生成しています。

貴方自身で試してみてください
Google Camera Appのバージョン6.1以降では、深度マップはポートレートモードの画像に埋め込まれています。 つまり、Google Photosの深度エディタを使用して、撮影後にぼかしの量やフォーカスポイントを変更できます。また、サードパーティ製の深度マップ抽出機能を使用してjpegから深度マップを抽出し、それを自分自身で確認することもできます。また、下部リンクのアルバムからは、Pixel 2までのステレオベースのポートレートモードとPixel 3の機械学習ベースのポートレートモードの比較ができます。

謝辞
この作品はSam Ansari、Yael Pritch Knaan、David Jacobs、Jiawen Chen、Juhyun Lee、Andrei Kulikなしでは不可能でした。Mike MilneとAndy Radinが5カメラリグによる撮影対象になってくれたことに感謝します。

(機械学習で改善されたPixel 3のポートレートモード(1/2)からの続きです)

3.機械学習で改善されたPixel 3のポートレートモード(2/2)関連リンク

1)ai.googleblog.com
Learning to Predict Depth on the Pixel 3 Phones

2)photos.google.com
Stereo vs Learned Comparison