mouseのゲーミングノートPCを使用してpythonのlightweight-ganを試したログ

2022年5月4日

Google Ad

主旨

StyleGANよりも、少ない学習データでの学習速度が速く、出力データも精巧であるLightweight GANを試したログである。

目的

ページの目的を以下に記す。

  • 学習速度をみる
  • 出力傾向をみる

期間

2021年9月10日~2021年9月12日

開発に用いたもの

  • Windows 10 Home
  • Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz 2.21 GHz
  • GeForce GTK 1050
  • CUDA Toolkit
  • Python(自分でコードを書いた部分はなし)
  • lightweight-gan

Pythonバージョン

  • Python 3.6.8
  • torch 1.8.0
  • torchaudio 0.8.0
  • torchvision 0.9.0
  • lightweight-gan 0.20.4
  • kornia 0.4.1

手順

CUDAをインストールする

CUDAのページ一番下のDownload CUDA Toolkitから自分のPCに合うものをダウンロードする・インストールする。

NVIDIAドライバも最新版にする。

Pythonモジュールをインストールする

Pythonモジュールを下記のようにインストールする。

このとき、CUDA11.4をインストールしていても10.1指定で次のモジュールをインストールしなければうまくいかない。

>pip install torch==1.7.1+cu101 torchvision==0.8.2+cu101 torchaudio===0.7.2 -f https://download.pytorch.org/whl/torch_stable.html
>pip install kornia kornia einops adabelief-pytorch gsa-pytorch fire retry

モデル作成

空き容量が4TBある外付けHDDのEドライブ上で実行した。

128pxで実行した場合、バッチサイズを2以下に指定しなければ、2GBのGPUメモリでは足らなかった。

途中でプログラムが落ちても、残っているモデルから学習を始めた。

10,000ステップ目、20,000ステップ目、34,000ステップ目はそのように再開した地点である。

>cd /d E:
>lightweight_gan --data E:\gan --image-size 128 --batch-size 2 --amp

画像生成

>lightweight_gan --generate

GIF画像生成

生成画像と同じ数だけ表示するGIFにすると、56.8MBになった。

レンタルサーバの容量節約のために一つだけの画像で出力した。

>lightweight_gan --num-image-tiles 1 --generate-interpolation

より詳しい引数の説明

学習データ

最近アップロードした画像の中から食品を選んで学習データにした。

WordPressによってアップロード時に自動で150×150に変換されたものを使用した。

経過

すべてのモデルはコマンドプロンプトで実行したドライブの一番上の階層のmodelsフォルダの中に出力される。

すべての画像はコマンドプロンプトで実行したドライブの一番上の階層のresultsフォルダの中に出力される。

開始時ログ

>lightweight_gan --data E:\gan --image-size 128 --batch-size 2 --amp
default<E:\gan>:   0%|                                                                      | 0/150000 [00:00<?, ?it/s]G: -4.43 | D: 2.13 | GP: 11.93 | SS: 43.86
default<E:\gan>:   0%|                                                          | 46/150000 [01:19<65:23:25,  1.57s/it]G: 5.47 | D: 0.77 | GP: 0.83 | SS: 0.15
default<E:\gan>:   0%|                                                          | 96/150000 [02:37<62:04:09,  1.49s/it]G: 5.99 | D: 1.26 | GP: 0.12 | SS: 0.22
default<E:\gan>:   0%|                                                         | 146/150000 [03:55<61:58:55,  1.49s/it]G: -1.56 | D: 1.86 | GP: 0.09 | SS: 0.15
default<E:\gan>:   0%|                                                         | 196/150000 [05:17<63:31:48,  1.53s/it]G: 1.84 | D: 0.69 | GP: 0.16 | SS: 0.03
default<E:\gan>:   0%|                                                         | 246/150000 [06:38<64:01:02,  1.54s/it]G: 1.97 | D: 0.61 | GP: 0.27 | SS: 0.01
default<E:\gan>:   0%|                                                         | 295/150000 [08:01<68:35:08,  1.65s/it]G: 1.49 | D: 0.25 | GP: 0.93 | SS: 0.01
default<E:\gan>:   0%|▏                                                        | 348/150000 [09:31<67:25:01,  1.62s/it]G

開始時経過画像

すべての学習でデータを混ぜただけのように見える。

20,000ステップ目経過画像

学習データそのものが見えてきつつある。

40,000ステップ目経過画像

学習データそのものしか見えなくなったため、本来150,000ステップ行うつもりだったがここで中断。

学習データから画像生成

ログ

>lightweight_gan --generate
continuing from previous epoch - 40
loading from version 0.10.0
sample images generated at ./results/default/generated-09-12-2021_11-22-32

生成画像

生成するのに16秒かかった。

学習データからGIF画像生成

ログ

>lightweight_gan --num-image-tiles 1 --generate-interpolation
continuing from previous epoch - 40
loading from version 0.10.0
100%|████████████████████████████████████████████████████████████████████████████████| 100/100 [00:03<00:00, 31.87it/s]
interpolation generated at ./results/default/generated-09-12-2021_11-32-11

生成画像

生成に9秒かかった。840KBだった。

考察

学習速度について

40,000ステップ目までで、19時間58分32秒かかった。

150,000ステップ目まで75時間程度、つまり3日と3時間程度かかる計算になる。

128×128の画像を生成することは、ローカルでも可能であるとわかった。

出力傾向について

比較的早い段階で、床の雰囲気と光の反射は再現できている。

学習後のGIFから、学習データ同士の間をとった画像が鶏のお惣菜以外ほぼできていないことがわかる。

これらの点から、鶏のお惣菜程度に学習データ同士が似ている学習データのセットを選ぶべきだと分かった。

人の顔がGANで精巧に出力できるのは皆大体同様だからと考えられる。

まとめ

  • 家で学習できる程度の処理だった
  • 学習データ同士の類似性を高くするとよい

参考文献

元論文

Towards Faster and Stabilized GAN Training for High-fidelity Few-shot Image Synthesis | OpenReview

Github

GitHub - lucidrains/lightweight-gan: Implementation of 'lightweight' GAN, proposed in ICLR 2021, in Pytorch. High resolution image generations that can be trained within a day or two

その他参考サイト

実際に試した日本語のサイト

次回

同様の手法でコロコロコミック表紙絵を学習データとして画像生成を行った。

他の回

「Lightweight GAN 連載記事」でタグ付けを行っている。

広告

GANの本。

広告