エクサウィザーズ Engineer Blog

株式会社エクサウィザーズのエンジニアチームブログ

写真に写っていないところを復元する

f:id:kentaro-suto:20181024193158p:plain

こんにちは。エクサウィザーズAIエンジニアの須藤です。

みなさんはハイキングの写真でしずちゃんばかり写して、まともに撮られなかったジャイアンに殴られかけたことは無いでしょうか。 そんなとき「万能プリンター」があったら便利ですね。もう撮ってしまった写真の、向きやズームを後から修正して、写ってなかったところを復元して再プリントできるというものです。 しかし持ち主であるドラえもんは、うちにもまだ来ていません。仕方がないのでAIの力でなんとかしましょう。

目的

写真の外側に写っているものを推測し、自然な形で合成します。

f:id:kentaro-suto:20181024190925p:plain:w200

物体の部分画像からその種類ないし位置を推測し、既存画像を本に全体を復元することが、原理的には可能なはずです。 その過程を直接にプログラムすることは現実的ではありません。 代わりに畳み込みニューラルネットワーク(CNN)に、かいつまんで学習させます。

学習モデル

敵対的生成ネットワーク(GAN)のアルゴリズムに従います。目的に書いたとおりのことを行う生成器と、画像の本物らしさを判別する判別器を、交互に学習します。 f:id:kentaro-suto:20181024153648j:plain

  • 生成器を以下のように構成します。
    • 画像を特徴量マップにする多層CNN
    • 特徴量マップを縦横二倍に広げる多層転置CNN
    • 特徴量マップから画像を生成する多層転置CNN
  • 事前学習を行います。
    • 真ん中だけを切り取った画像から元の画像を生成するように、生成器を学習
  • 画像が本物かを判定する判別器を構成します。
  • 以下の学習を交互に繰り返します。
    • 生成器を通した画像に対して0、本物の画像に対して1を返すように、判別器を学習
    • 生成した画像に対して判別器が1を返すように、生成器を学習

データセット

はじめ様々な物体を含む画像データセットで学習を行いましたが、外周部のピクセルの色を拡散させる以上のことをしてくれませんでした。 どんな写真にも対応させるには、学習時間またはモデルの性能が不足しているようです。

そこで顔画像データセットであるLabelled Faces in the Wildを用いて学習することにしました。 処理すべき情報量が減るため、少なくとも顔の部分に関しては精度の高い結果が期待できます。 一方で、使い道が想像つかなくなりましたが、モデルの検証が目的ということでご理解ください。

結果

入出力の例です。本来の全体画像も正解として記載します。 入力画像はエクサウィザーズのメンバー紹介ページから借りました。

入力 出力 正解 コメント
f:id:kentaro-suto:20181024173438p:plain f:id:kentaro-suto:20181023105104p:plain f:id:kentaro-suto:20181023105052p:plain ネクタイができかけています。
f:id:kentaro-suto:20181024173458p:plain f:id:kentaro-suto:20181023105619p:plain f:id:kentaro-suto:20181023105603p:plain なぜか法衣みたいに。
f:id:kentaro-suto:20181024173509p:plain f:id:kentaro-suto:20181023104451p:plain f:id:kentaro-suto:20181023104439p:plain 背景のボケがいい感じに。予測モデル的には失敗です。
f:id:kentaro-suto:20181024173538p:plain f:id:kentaro-suto:20181023104803p:plain f:id:kentaro-suto:20181023104751p:plain これまた作務衣のよう。
f:id:kentaro-suto:20181024173600p:plain f:id:kentaro-suto:20181023105944p:plain f:id:kentaro-suto:20181023105934p:plain ワイルドに。
f:id:kentaro-suto:20181024173618p:plain f:id:kentaro-suto:20181023110015p:plain f:id:kentaro-suto:20181023110003p:plain ムーディーに。
f:id:kentaro-suto:20181024173631p:plain f:id:kentaro-suto:20181023105919p:plain f:id:kentaro-suto:20181023105907p:plain 背景色がきっちり伸ばされているところに注目。
f:id:kentaro-suto:20181024173712p:plain f:id:kentaro-suto:20181023104826p:plain f:id:kentaro-suto:20181023104814p:plain 髪型提案モデルとして使えるかも。
f:id:kentaro-suto:20181024173730p:plain f:id:kentaro-suto:20181023104742p:plain f:id:kentaro-suto:20181023104734p:plain はみ出るのが少ないと変な結果になりにくいです。
f:id:kentaro-suto:20181024173903p:plain f:id:kentaro-suto:20181023104723p:plain f:id:kentaro-suto:20181023104712p:plain 髪の毛が大増量です。
f:id:kentaro-suto:20181024173924p:plain f:id:kentaro-suto:20181023105652p:plain f:id:kentaro-suto:20181023105633p:plain 無地の背景はなんとかして避けようとします。
f:id:kentaro-suto:20181024173949p:plain f:id:kentaro-suto:20181023105721p:plain f:id:kentaro-suto:20181023105706p:plain 首を隠すとなぜか太くなりがちです。
f:id:kentaro-suto:20181024174015p:plain f:id:kentaro-suto:20181023105551p:plain f:id:kentaro-suto:20181023105521p:plain 襟があるかないか決めかねたようです。
f:id:kentaro-suto:20181024174026p:plain f:id:kentaro-suto:20181023111924p:plain f:id:kentaro-suto:20181023111914p:plain 妙にごつくなりました。
f:id:kentaro-suto:20181024174041p:plain f:id:kentaro-suto:20181023105757p:plain f:id:kentaro-suto:20181023105735p:plain やたらきらびやかになりました。
f:id:kentaro-suto:20181024174114p:plain f:id:kentaro-suto:20181023105438p:plain f:id:kentaro-suto:20181023105428p:plain ビシッと黒スーツです。

髪の毛や顎など、画像中に無いものが付け足されています。背景や髪の毛の色もある程度反映されます。手がかりが全くない場合、髪型は丸刈り、服装は黒スーツになるようです。

デモ

ブラウザ上で動作するデモを用意しました。こちらのページですぐに試すことができます。 https://base.exawizards.com/view/modelDetail?id=45

操作説明

f:id:kentaro-suto:20181023102234p:plain ページ下部のリンクをタップしてください。モデルのダウンロードが始まります。12MBほどあるので、通信環境によってはお時間をいただきます。
f:id:kentaro-suto:20181023104008p:plain お手持ちの顔写真を選択してください。計算は全てブラウザ上で行われます。写真データが外部に送信されることはありません。
f:id:kentaro-suto:20181023102321p:plain 写真が読み込まれました。写真を直接ドラッグすることで位置を、スライダーではスケールを調節できます。
f:id:kentaro-suto:20181023102406p:plain 顔が白い枠いっぱいに表示される状態になったら、決定ボタンを押してください。計算が始まります。
f:id:kentaro-suto:20181023102421p:plain 枠内の内容だけから再生成された画像が表示されます。別のファイルを選択するか、位置を変える操作を行うと、再計算ができます。

まとめ

学習に基づき写真の範囲を拡張するAIモデルを作りました。

本手法はこんなときに役に立つ、かもしれません。

  • 不完全な写真からポートレートを作成
  • 構図の良くない写真を修正
  • 写真一枚から環境マップを生成
  • 4:3の映像を16:9のテレビで見る際の余白埋め

尚、エクサウィザーズは優秀なエンジニア、社会課題を一緒に解決してくれる魔法使い”ウィザーズ”を募集しています。ご興味を持たれた方はぜひご応募ください。 採用情報|株式会社エクサウィザーズ

ExaWizards Engineer Blogでは、定期的にAIなどの技術情報を発信していきます。Twitter (https://twitter.com/BlogExawizards) で更新情報を配信していきますので、ぜひフォローをよろしくお願いします!