没入感のあるARを作ろう

Source: Deep Learning on Medium

没入感のある AR を作ろう(エッジコンピューティング編)

こんにちは、NTT の森田です。

AR(拡張現実)ってご存知でしょうか? 例えばポケモン GO などで、現実の背景の上でゲームのキャラクターなどを動かしたりできるアレですね。

私、ゲームの AR 機能って、微妙だなと思うことが多いです。現実世界の背景と、仮想世界のオブジェクトが調和していなくて、いかにも「AR」という感じの画面になっていることが多いと思うんですよね。そこで今回は、現実と仮想を調和させて、没入感のある AR を作ることを考えてみます。

没入感のある AR

最近の iPhone は、3D モデルをダウンロードするだけでお手軽に AR 機能を使えるので、試してみました。

カエルはこちらのCrystalさんのモデル (CC BY 4.0) を使っています。

ちゃんとカエルの影が机に表示されていたりと、かなり頑張っています。でも、やっぱり「AR」という感じの画面なんですよね。背景とキャラクターの質感の違いのせいか、このカエルは仮想のオブジェクトだ、とわかってしまう。

そんなことを考えていたら、最近 XR Kaigi というイベントに参加した人から、AR の没入度を向上させる手法の話を聞きました。画風変換という技術を使っています。それが以下の動画。

AR 画面の画風を深層学習(AI 技術)によって変換し、現実と仮想の調和が取れた、没入感のある AR を実現しています。すごいですね。

この手法ですが、画風変換の処理がとても重たいということで、モバイル端末だけでは処理できないそうです。そのため、背中に PC の入ったバックを背負って、PC の処理能力も使うことで実現しているみたいです(作者様から直接お話を聞いたわけではないので、違っていたらごめんなさい)。

現実的に、常に背中に PC を背負って AR ゲームを行うことは難しいですよね。なので、ここはひとつ NTT の研究者的には、ネットワークの力を借りて、没入感のある AR を作ることを考えてみます。

AI 処理をエッジで

エッジコンピューティングという考え方がありまして、重たい処理をスマホなどのデバイスではなくて、近くのサーバなど(エッジ)で処理したりします。

https://www.ntt.co.jp/RD/product/case/case-sclab/edge.html

エッジでの処理は、クラウドでの処理より低遅延に実行できるので、AR のようなリアルタイム性が重要な用途に向いています。

今回の場合は、画風変換処理をエッジで行うのが良さそうです。ただし、そのためには

  • 変換前の AR 画面をエッジへアップロード
  • 変換後の AR 画面をエッジからダウンロード

の二つが必要になります。YouTube などの動画をモバイルで見ることが当たり前の世の中ですから、AR 画面のダウンロードはまぁ良いかもしれません。ですが、AR 画面のアップロードは少々気になりますね。5G の時代になっていくとは言え、モバイルからのカメラ動画を皆がゲーム中にアップロードするのが当たり前になるかというと、うーん・・・どうですかね。

解決方法は色々あると思いますが、ここではもう一つ AI 技術を組み合わせてみましょう。超解像という技術を使います。

超解像とは低解像度の画像を、高解像度の画像に変換する技術です。4K テレビとかでも高精細な映像を表示させるために搭載している技術ですね。低解像の動画をアップロードし、エッジ側で高解像に変換できれば、アップロードのために使用するネットワーク帯域も少なくて済みそうです。

まとめると、以下のように処理すれば、PC を背中に背負わなくても、没入度の高い AR が実現できそうな気がします。

実際に試してみよう

このままでは机上の空論なので、実際に試してみましょう。先ほどのカエルの動画を使います。

動画の縮小

とりあえず元動画の縦と横のサイズをそれぞれ 4 分の 1 に縮小してみます。これによって、アップロードする動画の転送サイズは 16 分の 1 になります。縮小した動画はこちらです。

粗くなったことを分かりやすくするため、元の動画と同じ大きさで表示しています。

だいぶ粗くて AR 画面としてこれでいいのか心配になるレベルですが、とりあえず続けてみましょう。

超解像

ここから AI 技術を使っていきます。超解像によって、縮小された動画の縦と横を4倍に拡大しましょう。使用する手法は ESRGAN で、こちらのプログラムを利用します。

超解像結果は以下の通り。

粗い動画がだいぶ精彩に戻りました。実は超解像を自分で試したのは始めてだったのですが、今の技術はすごいですね。

キャラクター表示などの AR 処理は、エッジ側で超解像後の画面に描画しても良いかもしれませんね。画面も綺麗になりますし、モバイル端末の負荷も減らせそうです。

画風変換

最後に画風変換処理を行いましょう。CycleGAN という手法を用います。使用するプログラムはこちらです。本当は AR 画面の変換に特化した学習データを用いると良いのですが、今回はありもののデータで試してみましょう。ポール・セザンヌ風の絵画に画風変換する学習データを使います。

以下が、カエル動画をセザンヌ風に画風変換した結果です。

没入感・・・、ありますかね?

やっぱり AR 画面用の学習データではないので、没入感という点では少々微妙かもしれません。ただ、背景の現実感が減ったことで、AR っぽさはだいぶ軽減されたのではないでしょうか。没入感を向上させることを目的として学習した AI を用いれば、もっと臨場感がある画面になりそうです。VR グラスを覗くと、こういう世界が体験できるようになると楽しそうですね。

課題

色々試してみましたが、課題もあります。本当はこの一連の処理を、カメラ映像を入力としてリアルタイムに行いたいのですが、超解像も画風変換も重たい処理なので、リアルタイムにはできていないです。AI処理には最先端の GPU (Tesla V100) を用いましたが、超解像も画風変換も、1秒あたり3〜4枚ぐらいの画像しか処理できませんでした。実際のアプリケーションで使用するためには、この3倍ぐらいの速度は欲しいところです。

最初に紹介した YouTube の AR ゲームではリアルタイムに画風変換をしているので、頑張って最適化すればうまくいくかもしれません。今回は GitHub 上にあるプログラムをそのまま使っているので、TVM などの深層学習コンパイラを使ってみたりすると、それだけでもだいぶ高速になりそうですね。

他にも、没入感を向上させるための AI 学習を行ったり、実際の XR デバイスで一連の処理を実装してみたり、さらには既存の AR 開発環境と連携してみたりと、やってみたいことは山ほどあります。一緒に面白いことをしてみたい方、是非ご連絡ください! お待ちしております。