3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GameGan-codeが動いたので、動かし方のメモ

Last updated at Posted at 2021-06-23

#概要

 GameGanとはゲームの画像と操作履歴をGeneratorに学ばせて、そのゲームを再現できるというものです。
 このコードを動作させる方法を説明します。
 動作させる方法のメモなので、処理内容については詳しくは説明していないので、内容については論文を読むことを推奨します。

#動作環境
 以下の環境で動作させましたが、設定で小さくしたモデルをギリギリ動作可能というレベルでした。
 おそらく実用レベルのものを作ろうと思うと、ビデオメモリお化けGPU界のポルシェとかが必要になるだろうなと思っています。(うまく設定すれば必要ないかもしれません。)
 また、最初はWindowsで動作させようとしたのですが、pytorchのバージョン1.4.0がうまくインストールできなかったので、Ubuntuで動作させることを推奨します。

OS Ubuntu 20.04 LTS
CPU intel core i7 8700
GPU GeForce RTX 2060 SUPER
メモリ 32GB

#データの作成

 まずは上のリポジトリをクローンし、以下のコマンドを実行する。

docker image build -t wm:1.0 -f docker/Dockerfile.wm .
docker container run -p 8888:8888 --gpus '"device=0"' --detach -it --name wm wm:1.0
docker attach wm

 すると 「/home/ubuntu/WM」にいるはずなので、「cd WorldModels」で移動する。
 次に以下のコードを実行することで、データの作成が開始される、結構時間がかかるので気長に待つ。
 処理が終わると、「results/WorldModels/DoomTakeCover-v0/record」の下にデータが入っている。

bash launch_scripts/wm_doom.bash

 コンテナをCtrl+P,Ctrl+Qで抜け、「sudo docker cp」を使って、コンテナ内のデータをホストにある「GameGAN_code/data/vizdoom」へコピーする。

#コードの修正と加筆
 このままではデータを読み込めないので、「GameGAN_code/data/dataloader.py」を以下のように修正します。
 これで、正常にゲームの画像と操作履歴を読み込むことができます。

dataloader.py
#globをimportする
import glob

class vizdoom_dataset(data_utils.Dataset):

    def __init__(self, opts, set_type=0,  permute_color=False, datadir=''):
        self.opts = opts
        self.set_type = set_type
        self.permute_color = permute_color

        self.samples = []
        #ここをコメントアウト
        #list_=os.listdir(datadir + "/*.npz")
        #下の1行を追加
        list_ = glob.glob(datadir + "/*.npz")
        num_data = len(os.listdir(datadir))
        print(num_data)
        if set_type == 0:
            sample_list = list(range(0, int(num_data*0.9)))
        else:
            sample_list = list(range(int(num_data*0.9), num_data))
        #ここをコメントアウト、ファイル名はシード値です
        #for el in sample_list:
        #    self.samples.append('%s/%d.npy' % (datadir, el))
        #下の2行を追加
        for el in list_:
            self.samples.append(el)
        self.end_bias = 0
        if utils.check_arg(self.opts, 'end_bias'):
            self.end_bias = self.opts.end_bias

    def __len__(self):
        return len(self.samples)

    def __getitem__(self, idx):
        fn = self.samples[idx]
        #下をコメントアウト、読み込むデータにitem()はありません
        #data = np.load(fn, allow_pickle=True).item()
        #下の1行を追加
        data = np.load(fn, allow_pickle=True)
        #以下コードが続く


 ビデオメモリ少ないGPUを使う場合は、GameGAN_code/scripts/vizdoom_multi.shを以下のように書き換えてください。
 以下の設定でGeForce RTX 2060 SUPERがギリギリ動くことを確認しました。
 なにをしたのかというと、私も中途半端にしか理解していないのですが、generatorへ入力する画像の枚数を表す「num_steps」を半分に減らし、初期の予測画像を再起的に処理する枚数を設定する「warm_up」を「num_steps」に設定した数よりも少なくし、何かの窓長を設定する「config_temporal」を「num_steps」以下にしています。(実は「config_temporal」を減らすだけで動くかもしれません。)

#!/usr/bin/env bash

python main_parallel.py \
 --data vizdoom:./data/vizdoom \
 --log_dir ./results/ \
 --num_steps 16 \
 --warm_up 8 \
 --warmup_decay_epoch 60 \
 --bs 4 \
 --num_components 2 \
 --fine_mask \
 --config_temporal 16 \
 --do_memory \
 --cycle_loss \
 --alpha_loss_multiplier 0.000075 \
 --softmax_kernel \
 --sigmoid_maps \
 --save_epoch 5 \
 --rev_multiply_map \
 --num_gpu 1 \
 --temperature 0.1 \
 --nfilterG 16 \
 --spade_index 2 \
 --seed 1 \
 --img_size 64 \
 --end_bias 0.5 \
 --simple_blocks

#実行

 「GameGAN_code/scripts/vizdoom_multi.sh」を実行すれば大体、1日くらいすれば、ちゃんとした画像が作成されるようになります。
 結果はtensorboardで確認できます。
 「tensorboard --port=PORT --logdir=./results」

#参考文献
Learning to Simulate Dynamic Environments with GameGAN
https://github.com/nv-tlabs/GameGAN_code
https://github.com/zacwellmer/WorldModels

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?