mouseのゲーミングノートPCを使用してpythonのlightweight-ganを試したログ
主旨
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ドライブ上で実行した。
2GBのGPUメモリ上で128pxの設定で実行したため、バッチサイズを2以下にする必要があった。
モデル作成途中でプログラムが落ちることがあった。
しかし、残っているモデルから学習を始めることができるため、そこから再び始めた。
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になった。
レンタルサーバの容量節約のために、一つだけの生成画像を用いたGIFで出力した。
>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
その他参考サイト
- コマンドを参考にした。
実際に試した日本語のサイト
- GANの使い方も書かれていてわかりやすい。
- おせちがかなりきれいに生成されている。
- 一見遊戯王カードに見える。
次回
同様の手法でコロコロコミック表紙絵を学習データとして、画像生成を行った。
他の回
「Lightweight GAN 連載記事」でタグ付けを行っている。
広告
GANの本。
ディスカッション
コメント一覧
まだ、コメントがありません