CodeFormerで、低画質の顔画像を高画質化する

1.はじめに

 今回ご紹介するのは、Transfomer ベースの予測ネットワークを使うことによって、低画質の顔画像を高画質化する CodeFormer という技術です。

*この論文は、2022.6に提出されました。

2.CodeFomerとは?

 下記は、CodeFormerの概要図で、2段階で学習を行います。まず、(a)自己再構成学習を行います。高画質画像(Ih)から高画質エンコーダー(HQ Encoder)を通して画像特徴量(Zh)を抽出し、ニアレストネイバー法(Nearest-Neighbor Matching)で離散コードブック(Codebook C)にマッピングし、デコーダー(HQ Decoder)で高画質画像に戻すことを学習します。ここで学習した離散コードブック以降は次で使用します。

 次に、(b)最終的なネットワークの学習を行います。低画質画像(IL)から低画質エンコーダー(LQ Encoder)を通して画像特徴量(ZL)を抽出します。ここで、Transformer による予測ネットワーク(Code Prediction)を使って、先程学習した離散コードブック以降に接続して学習するのがミソです。さらに、CFT で低画質エンコーダーからデコーダーへ流す情報を重み で調整することによって画像品質と忠実度のトレードオフを調整することができます。

3.コード

 コードはGoogle Colabで動かす形にしてGithubに上げてありますので、それに沿って説明して行きます。自分で動かしてみたい方は、この「リンクをクリックし表示されたノートブックの先頭にある「Open in Colab」ボタンをクリックすると動かせます。

 まず、セットアップを行います。

 

 最初に、inference_codeformer.py を使用し、引数に–has_aligned を加えてクロップした顔を高画質化してみます。入力画像は、inputs/cropped_faces フォルダに入っているものを使用します。

 最初の5枚のみ表示しています。

 次に、inference_codeformer.py を使用し、引数に–bg_upsampler realesrgan を加えて背景も含めて画像全体を高画質化してみます。入力画像は、inputs/whole_imgs フォルダに入っているものを使用します。

 最初の5枚のみ表示しています。

 それでは、オリジナル画像でやってみましょう。picフォルダに自分の用意した画像をアップロードして下さい。そして、picにファイル名を1つ指定して実行します。とりあえず、picフォルダには、01.jpg〜04.jpgまで4枚の画像がサンプルとして入っていますので、このサンプルで動かしてみましょう。

 下記を実行すると高画質化した画像をダウンロードします。

 picを02.jpg〜04.jpgに変更し、同様に実行してみます。

 従来のGANを使用する方法より安定した高画質化が出来ている様です。また、現在 HuggingFace でこの機能をWeb UIで簡単に試すことが出来ます。

 では、また。

(オリジナルgithub)https://github.com/sczhou/CodeFormer

2022.9.23 動画版Colabの追加

 動画(音声付き)を一旦フレームにバラして、フレーム毎に高画質化して、動画にまとめるコードのリンクを追加します。1秒間の動画(30フレーム)を高画質化するのに1分程度かかるので短い動画でお試し下さい。

2022.11.21 白黒動画版Colabの追加

 白黒動画(音声付き)を高画質化し、さらにカラー化(DeOldify)するColabをのリンク追加します。1秒間の動画(30フレーム)を高画質化するのに1分程度かかるので短い動画でお試し下さい。

(twitter投稿)

5 件のコメント

  • このブログでAIに興味を持ち、いつも勉強させていただいています。

    動画版Colabのソースコードを拝見し、参考にしながら、自分のPCでローカル構築してみました。おかげさまで稼働はするのですが、1点わからない箇所があり、ご教授いただければ幸いです。

    「動画の読み込み」1分1800フレームの制限を外すには、どのファイルのどこをどのように修正したらいいのでしょうか?

    よろしくお願いいたします。

    • ふぃあさん
      ローカル構築さすがです!
      「動画の読み込み」1分1800フレームの制限は、function.py の50行にある、length = 1800 の値を修正して下さい。

      • 早々の返信ありがとうございます。
        早速、function.pyを修正して試したらできました。
        お手数おかけしました。ありがとうございます。

  • いつもこちらのブログで勉強させていただいております。
    さて、基本的な質問で恐縮ですが「pic」フォルダはどちらにありますでしょうか。
    すべてのフォルダを見たのですが見つからず、、、よろしくお願いいたします。

  • 名無し へ返信する コメントをキャンセル

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

    ABOUTこの記事をかいた人

    アバター

    ディープラーニング・エンジニアを趣味でやってます。E資格ホルダー。 好きなものは、膨大な凡ショットから生まれる奇跡の1枚、右肩上がりのワクワク感、暑い国の新たな価値観、何もしない南の島、コード通りに動くチップ、完璧なハーモニー、仲間とのバンド演奏、数えきれない流れ星。