このエントリーをはてなブックマークに追加

GFPGAN の利用

GFPGANは、顔画像の復元や高品質化を目的とした生成対抗ネットワーク(GAN)ベースの深層学習モデルですが、コマンドを利用することで写真から顔の抽出ができます。

環境構築時にはまったのでメモとして残しておきます。

環境構築

前提条件

  • windows11環境

  • pythonバージョン : Python 3.10.6

  • CUDAバージョン : 12.8

実施手順

  1. インストール先のフォルダを作成

    「C:\app\tools」を起点として環境を構築します。

  2. コマンドプロンプトを起動

  3. 以下のコマンド群を実行する

    • インストール用の資材をgitからCloneする。

      git clone https://github.com/TencentARC/GFPGAN.git
      cd GFPGAN
      
    • 仮想環境を利用するため以下のコマンドを実行する

      python -m venv venv
      venv\Scripts\activate
      
      (venv) C:\app\tools\GFPGAN>   ← このような表示になることを確認
      
      pip install basicsr
      
      pip install facexlib
      
      pip install -r requirements.txt
      python setup.py develop
      
      pip install realesrgan
      
    • 途中以下の内容でたら指示に従ってupdateする

      [notice] A new release of pip available: 22.2.1 -> 25.2
      [notice] To update, run: python.exe -m pip install --upgrade pip    
      
  4. 以上でインストールは完了です。

  5. インストール後の動作確認

    以下のコマンドを実行して動作を確認します。 事前に「C:\app\tools\GFPGAN\output」を作成しておきます。

    動作イメージとしては「C:\app\tools\GFPGAN\inputs\whole_imgs」に抽出元の画像を配置し、「C:\app\tools\GFPGAN\output」のフォルダに出力されます。 インストール直後はinputs配下に以下のような構成でファイルが配置されています。

    顔抽出前

    以下のコマンドを実行します。

    python inference_gfpgan.py -i "C:\app\tools\GFPGAN\inputs\whole_imgs" -o "C:\app\tools\GFPGAN\output" -v 1.3 -s 1 --ext png --bg_upsampler=none
    

    以下のように個人単位で顔が抽出されます。

    顔抽出成功後

    • 以下のエラーが出た場合には

      (venv) C:\app\tools\GFPGAN>python inference_gfpgan.py -i "C:\app\tools\GFPGAN\inputs\whole_imgs" -o "C:\app\tools\GFPGAN\output" -v 1.3 -s 1 --ext png --bg_upsampler=none
      Traceback (most recent call last):
      File "C:\app\tools\GFPGAN\inference_gfpgan.py", line 7, in <module>
          from basicsr.utils import imwrite
      File "C:\app\tools\GFPGAN\venv\lib\site-packages\basicsr\__init__.py", line 4, in <module>
          from .data import *
      File "C:\app\tools\GFPGAN\venv\lib\site-packages\basicsr\data\__init__.py", line 22, in <module>
          _dataset_modules = [importlib.import_module(f'basicsr.data.{file_name}') for file_name in dataset_filenames]
      File "C:\app\tools\GFPGAN\venv\lib\site-packages\basicsr\data\__init__.py", line 22, in <listcomp>
          _dataset_modules = [importlib.import_module(f'basicsr.data.{file_name}') for file_name in dataset_filenames]
      File "C:\Users\snowh\AppData\Local\Programs\Python\Python310\lib\importlib\__init__.py", line 126, in import_module
          return _bootstrap._gcd_import(name[level:], package, level)
      File "C:\app\tools\GFPGAN\venv\lib\site-packages\basicsr\data\realesrgan_dataset.py", line 11, in <module>
          from basicsr.data.degradations import circular_lowpass_kernel, random_mixed_kernels
      File "C:\app\tools\GFPGAN\venv\lib\site-packages\basicsr\data\degradations.py", line 8, in <module>
          from torchvision.transforms.functional_tensor import rgb_to_grayscale
      ModuleNotFoundError: No module named 'torchvision.transforms.functional_tensor'
      

      basicsr の最新版を GitHub から直接インストールすることで対応することが可能性があります。

      エラーは basicsr/data/degradations.py 内で from torchvision.transforms.functional_tensor import rgb_to_grayscale をしていることに起因しています。バージョンによってはこの import が修正済みのコミットがあり、最新の basicsr ソースに更新すれば解決することがあります。

      pip uninstall basicsr -y
      pip install git+https://github.com/XPixelGroup/BasicSR.git
      

参考にさせていただいたサイト