DATAFLUCT Tech Blog

データ技術・データサイエンス・MLOps に関するトレンドを追いかけます

【大人気!?】GFPGANで人物画像を鮮明にしてみた

 

こんにちは!

皆さんは技術トレンドをチェックしたりしているでしょうか。
僕は技術トレンドを把握するために定期的にGitHubのトレンドをチェックしています。
様々なプロジェクトが入れ替わり「今、何が盛り上がっているか?」が分かるので、非常に面白いです。

ある日のこと、2021年の12月から2022年の1月にかけて、2ヶ月ほどトレンドに浮上している「GFPGAN」というレポジトリを発見しました。
「何やら盛り上がってる!」と気になったので、さっそくGFPGANを試し

てみました。

GFPGANについて

GFPGANは顔画像の復元を行うためのプロジェクトです。

ここでいう、顔画像の復元というのは古い写真や、ピントがボケてしまっている写真、部分的に顔が隠れてしまっているような写真を、現在のような綺麗な写真や隠れてしまっている部分を補完するような作業のことを指します。

しかし、顔画像の復元というのは非常に難しく、人の手による作業や、従来のアルゴリズムでは思ったような精度が出ませんでした。

ここ最近では機械学習、特にディープラーニングを用いた顔画像の復元が勢いを増しており、このGFPGANもディープラーニングを用いて、顔画像の復元を行なっています。

 

従来の顔画像の復元モデルと比べてみると、その出力結果に驚かされます。

引用元: https://arxiv.org/pdf/2101.04061.pdf

 

GFPGANが出力した画像を渡されても、機械学習モデルが生成したものだと気づくことすら出来ないほど自然な仕上がりです。

GFPGANは入力された顔画像から事前情報を作成し、作成した事前情報を人の顔画像で学習済みのStyleGAN2という高画質に特化した生成モデルで使用することで、高画質な顔画像の復元を実現しています。

we leverage Generative Facial Prior (GFP)
for real-world blind face restoration, i.e., the prior implicitly encapsulated in pretrained face Generative Adversarial
Network (GAN) [18] models such as StyleGAN [35, 36].

引用元: https://arxiv.org/pdf/2101.04061.pdf / Introduction

さっそく試してみた

GFPGANの公式レポジトリの「ColabDemo」よりGoogleColabratoryのノートブックを開くことが出来ます。

こちらを自分のGoogleドライブにコピーして、あとは上から順番に説明に従って実行していきます。

4まで進めると出力結果を確認することができます。

1.Preparations

各種ライブラリのインストールを行います。ノートブック上で実行しましたが、特にエラーは発生せずに、1分ほどで終了します。

余談ですが、筆者のM1 MacでGitHubからcloneして同様の手順でインストールを進めたのですが「pip install facexlib」がコケてしまいました。M1 Macが原因なのでしょうか。。

2.Upload Images / Use the demo images

推論をしたい画像を用意します。
初めてノートブックを開いた時点では「inputs/upload」というディレクトリは作成されていないですが、このセルを実行することで、ディレクトリが生成されます。

「ファイル選択」のボタンよりファイル選択画面が表示されます。

こちらから、推論したい画像を選択することが出来ます。これは便利ですね。

選択した画像が「inputs/upload」に保存されました。

3. Inference

いよいよ推論です。実行すると、推論された画像が「results」ディレクトリ内に保存されます。

以下のコードからも分かるように、このセルが実行される度に「results」ディレクトリは削除されるので、再度、推論を行う際には注意が必要です。

!rm -rf results

補足: resultsの中身

  • cmp -> 顔部分を切り抜いた入力した画像と出力した画像が横並びで保存される
  • cropped_faces -> 顔部分だけを切り抜いた画像
  • restored_faces -> 顔部分だけを切り抜いた画像の推論結果
  • restored_imgs -> 元画像の推論結果

4. Visualize

3の推論結果をmatplotlibで可視化してくれます。1つの目のセルは顔部分だけ。2つ目のセルは元画像全体を入力前と入力後を比較して表示してくれます。

推論には愛してやまない若きマイケルジャクソンの写真を使用しました。

出典元: https://gigazine.net/news/20071112_mj_history/

 

どうでしょうか。
かなり古い写真でしたが、輪郭がハッキリとして、顔の各パーツがシュッとしました。
髪の毛のボケていた部分もしっかりと線が見えます。20年来の癖毛の自分から見ても、癖毛の生え際に違和感がないです。凄いですね。。。

その一方で、肌がかなりテカテカとしているのが気になります。まるで油絵のようです。

また、顔以外の部分は高画質化されませんでした。顔だけを復元するモデルなので、これは当然の結果です。

 

次は白黒画像でも試してみます。
使用したのは次の一万円になる渋沢栄一の肖像画です。

出典元: https://ja.wikipedia.org/wiki/%E6%B8%8B%E6%B2%A2%E6%A0%84%E4%B8%80

論文によると1ステップで顔の復元と着色を行うことが可能だと記述がありますが、このノートブックでは着色まではしてくれませんでした。

our GFP-GAN could jointly restore facial details and enhance colors with just a single forward pass

引用元: https://arxiv.org/pdf/2101.04061.pdf

カラー画像の時と同じように輪郭部分はハッキリとしましたが、艶やかになった一方で、渋沢栄一の貫禄ある顔本来のシワが所々、消えてしまいました。

まとめ

ここ1ヶ月ほど、GitHubのトレンドをザワつかせているGFPGANを試してみました。

公開されているノートブックで簡単に推論を試すことが出来ました。
輪郭がハッキリとして、かなり復元されました。その一方で艶やかすぎるような気もします。

他にもいろいろな画像で試してみたいですね。ぜひお試しください!

 

参考文献