超解像アルゴリズム「PULSE」をWindows環境で試してみた


今年のCVPRで発表された、高性能の超解像アルゴリズム「PULSE:Self-Supervised Photo Upsampling via Latent Space Exploration of Generative Models」を試してみました。
流行りの「自己教師あり学習」です。

※論文の内容に関しては省略(いつか解説記事を書くかも?!)
 →書きました

「PULSE」のポイント

  • 今までとは評価ポイントが違う
    • 超解像した後の画像じゃなくて、超解像した後にダウンスケールした画像で比較
  • 今までの手法よりも超解像可能
  • 超解像自体はStyleGANを使用(CelebA-HQで学習済み)

このGIFがイメージをつかみやすいです。

ソースコード

ソースコードはGithubにて公開されています。
今回はこれをそのまま使います。

インストール

Python 3.7上で、以下のモジュールをインストールしました。

  • Anaconda NavigatorのGUIからインストール
    • matplotlib
    • numpy
    • pandas
    • pillow
    • scipy
    • requests
  • コマンドラインからインストール
    • pytorch
    • torchvision
    • cudatoolkit(今回は10.2を使用)

環境構築

超解像したい画像を入れておくフォルダを用意します。
ここではとりあえず「input」とします。

そこに超解像したい画像を入れます。(複数入れてもOK)
画像にはいくつか制限があります。

  • 縦横のサイズは同じ
  • サイズは1,024の約数
  • フォーマットはPNG(RGB)

実行

> python run.py

で実行します。

エラー対応

ほとんどの画像で、以下のようなエラーになります。

Loading Synthesis Network
Optimizing
BEST (100) | L2: 0.0058 | GEOCROSS: 4.3057 | TOTAL: 0.7981 | time: 10.0 | it/s: 9.98 | batchsize: 1
Could not find a face that downscales correctly within epsilon

上記の例の場合、L2の最小値が「0.0058」なのですが、デフォルトの閾値が「0.002」になっており、それより近づかないとエラーになります。

対応方法としては、引数「eps」で閾値の値を変更します。

> python run.py -eps 0.005

実行結果

実行結果は「runs」フォルダに保存されます。
出力される超解像画像は1,024x1,024のpngになります。

外国人バイアスがむごい...
あと、正面顔じゃないとダメそう。

感想

実行は簡単ですが、実際に使おうと思うと、いろいろとやらなくてはいけないことがいっぱいありそうです。