やみとものプログラミング日記 やみとものプログラミング日記
TOP PGGANの公式リポジトリをフォローする
PGGANの公式リポジトリをフォローする

PGGANの公式リポジトリをフォローする

ディープラーニング
作成日時: 2021年9月1日
更新日時: 2021年9月1日
こんにちは、やみとも(@yamitomo_blog)です。
今回は下のPGGAN(プログレッシブGAN)の公式リポジトリをフォローしてみようと思います。


システム要件

  • LinuxとWindowsどちらでもOK。ただしLinuxが強く推奨される。
  • 64bitのPython3.6とnumpy1.13.3以上。
  • ハイエンドGPU(※持ってないが手持ちのGPUでどこまでできるか試してみる)
  • NVIDIAドライバ391.25以上。CUDAツールキット9.0以上。cuDNN7.1.2以上。
  • requirements-pip.txtで指定してあるPythonパッケージ

まずクローンする。お好きなディレクトリで
git clone https://github.com/tkarras/progressive_growing_of_gans.git

Anacondaの仮想環境を作成する。(※Anacondaのインストール方法はググってください)
conda create -n pggan python=3.6

作成した仮想環境をアクティブ化し、クローンしたリポジトリに入って、requirements-pip.txtで指定してあるPythonパッケージをインストールする。
conda activate pggan
cd progressive_growing_of_gans
pip install -r requirements-pip.txt

データセットの準備

python dataset_tool.py create_cifar10 datasets/cifar10 ~/downloads/cifar10
公式サイトには上のようなコマンドが書いてあるが、僕の場合(たぶんWindows)動かなかった。
ソースコードを読んだりしてみると~/downloads/cifar10の部分には、data_batch_1からdata_batch_6までのcifar10のデータが入ったディレクトリを指定しないといけない模様。
僕の場合、C:\Users\【ユーザ名】\.keras\datasets\cifar-10-batches-pyというフォルダだった。
このフォルダはおそらくkerasでcifar10データセットをダウンロードしたときに自動で作られるフォルダだと思う。(確証はない)

以下のコマンドを実効する。※ユーザ名のところは自分のに置き換えて!!!
※2行になってるけど1行に書いて!!!
python dataset_tool.py create_cifar10 datasets/cifar10 C:\Users\yumiy\.keras\datasets\cifar-10-batches-py

ただし、これでも下のようなエラーが発生する。
Loading CIFAR-10 from "C:\Users\yumiy\.keras\datasets\cifar-10-batches-py"
Creating dataset "datasets/cifar10"
Added 0 images.
Traceback (most recent call last):
  File "dataset_tool.py", line 738, in 
    execute_cmdline(sys.argv)
  File "dataset_tool.py", line 733, in execute_cmdline
    func(**vars(args))
  File "dataset_tool.py", line 348, in create_cifar10
    tfr.add_image(images[order[idx]])
  File "dataset_tool.py", line 71, in add_image
    tfr_opt = tf.python_io.TFRecordOptions(tf.python_io.TFRecordCompressionType.NONE)
AttributeError: module 'tensorflow' has no attribute 'python_io'
これはおそらくインストールしたtensorflowのバージョンが高すぎるのが原因。
requirements-pip.txtにはtensorflow-gpu>=1.6.0と書いてあるのに、実際にはtensorflow-gpu 2.6.0が入っているので。
そこでtensorflowのバージョンを1.6.0まで下げる。
pip install tensorflow-gpu==1.6.0
すると今度は別のエラーが出る。
Traceback (most recent call last):
  File "D:\anaconda3\envs\pggan\lib\site-packages\tensorflow\python\platform\self_check.py", line 75, in preload_check
    ctypes.WinDLL(build_info.cudart_dll_name)
  File "D:\anaconda3\envs\pggan\lib\ctypes\__init__.py", line 348, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: [WinError 126] 指定されたモジュールが見つかりません。

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "dataset_tool.py", line 16, in 
    import tensorflow as tf
  File "D:\anaconda3\envs\pggan\lib\site-packages\tensorflow\__init__.py", line 24, in 
    from tensorflow.python import *
  File "D:\anaconda3\envs\pggan\lib\site-packages\tensorflow\python\__init__.py", line 49, in 
    from tensorflow.python import pywrap_tensorflow
  File "D:\anaconda3\envs\pggan\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 30, in 
    self_check.preload_check()
  File "D:\anaconda3\envs\pggan\lib\site-packages\tensorflow\python\platform\self_check.py", line 82, in preload_check
    % (build_info.cudart_dll_name, build_info.cuda_version_number))
ImportError: Could not find 'cudart64_90.dll'. TensorFlow requires that this DLL be installed in a directory that is named in your %PATH% environment variable. Download and install CUDA 9.0 from this URL: https://developer.nvidia.com/cuda-toolkit

ようはcudart64_90.dllが無いよーというエラーなのですが、まずDLLに関しては下のサイトが豆知識。

DLL IT用語辞典

このファイルはエラー文に書かれているようにCUDA 9.0をインストールすると入るようなので、エラー文に書かれているURLに飛ぶ。
ちなみにCUDAに関する解説は下のサイトを参照してください。

CUDA 【Compute Unified Device Architecture】

僕の場合、CUDAは以前インストールしていたのですが、バージョンが高すぎる模様。
CUDAのバージョンの確認は次のコマンドでできます。
nvcc -V
CUDAの過去バージョンが一覧されているURLは以下になります。
CUDA Toolkit Archive
ここからCUDA Toolkit 9.0を選んでインストールします。
インストールして、もう一度コマンドを実行してみると、またエラーが発生します。
>python dataset_tool.py create_cifar10 datasets/cifar10 C:\Users\yumiy\.keras\datasets\cifar-10-batches-py
Traceback (most recent call last):
  File "D:\anaconda3\envs\pggan\lib\site-packages\tensorflow\python\platform\self_check.py", line 87, in preload_check
    ctypes.WinDLL(build_info.cudnn_dll_name)
  File "D:\anaconda3\envs\pggan\lib\ctypes\__init__.py", line 348, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: [WinError 126] 指定されたモジュールが見つかりません。

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "dataset_tool.py", line 16, in 
    import tensorflow as tf
  File "D:\anaconda3\envs\pggan\lib\site-packages\tensorflow\__init__.py", line 24, in 
    from tensorflow.python import *
  File "D:\anaconda3\envs\pggan\lib\site-packages\tensorflow\python\__init__.py", line 49, in 
    from tensorflow.python import pywrap_tensorflow
  File "D:\anaconda3\envs\pggan\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 30, in 
    self_check.preload_check()
  File "D:\anaconda3\envs\pggan\lib\site-packages\tensorflow\python\platform\self_check.py", line 97, in preload_check
    % (build_info.cudnn_dll_name, build_info.cudnn_version_number))
ImportError: Could not find 'cudnn64_7.dll'. TensorFlow requires that this DLL be installed in a directory that is named in your %PATH% environment variable. Note that installing cuDNN is a separate step from installing CUDA, and this DLL is often found in a different directory from the CUDA DLLs. You may install the necessary DLL by downloading cuDNN 7 from this URL: https://developer.nvidia.com/cudnn
今度はcuDNNをインストールしろとのことです。
エラー文の最後に示されたURLからインストーラを探していって(nvidiaにログインが必要)インストールします。
cuDNN v7.1.2をインストールします。と思ったのですが、v7.1.2はLinuxのみサポートされているので、やむなくWindowsの場合はv7.1.3をインストールします。

ダウンロードしたzipを展開してcudaフォルダの中身をC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0の中に上書き保存します。
これでコマンドを実行してみると、僕の場合はうまく動きました。

訓練の実行

config.pyを開き、53行目付近の
desc += '-celebahq';            dataset = EasyDict(tfrecord_dir='celebahq'); train.mirror_augment = True
をコメントアウト。
55行目付近の
#desc += '-cifar10';             dataset = EasyDict(tfrecord_dir='cifar10')
のコメントを解除する。

以下のコマンドを実行する
python train.py

以下のようなエラーが出た。
Building TensorFlow graph...
Setting up snapshot image grid...
2021-09-01 08:48:41.866690: E C:\tf_jenkins\workspace\rel-win\M\windows-gpu\PY\36\tensorflow\stream_executor\cuda\cuda_dnn.cc:378] Loaded runtime CuDNN library: 7103 (compatibility version 7100) but source was compiled with 7003 (compatibility version 7000).  If using a binary install, upgrade your CuDNN library to match.  If building from sources, make sure the library loaded at runtime matches a compatible version specified during compile configuration.
2021-09-01 08:48:41.868020: F C:\tf_jenkins\workspace\rel-win\M\windows-gpu\PY\36\tensorflow\core\kernels\conv_ops.cc:717] Check failed: stream->parent()->GetConvolveAlgorithms( conv_parameters.ShouldIncludeWinogradNonfusedAlgo(), &algorithms)

おそらくcuDNNのv7.1.3をインストールしたことによるエラーだと思われる。
しょうがないのでtensorflowのバージョンを一つ上げる。
pip install tensorflow-gpu==1.7.0
しかし、このバージョンも駄目だった。
色々バージョンを試した結果、うまくいったのはv1.8.0。
pip install tensorflow-gpu==1.8.0