学習済みの A3C モデルを使ってみる
上記の素晴らしいリポジトリの学習済みモデルを使って、A3C が Breakout をプレイする様子を録画したいと思います。いくつかバージョンが違いますが、とりあえず動いたので良し。まずはインストール。
git clone https://github.com/muupan/async-rl.git cd async-rl && pyenv virtualenv anaconda3-4.3.0 async-rl pip install 'chainer==1.8.1' pip install 'cached-property==1.3.0' pip install h5py pip install opencv-python # ale を brew でインストールしたせいか demo_a3c_ale.py を実行した時に無いって怒られた git clone https://github.com/mgbellemare/Arcade-Learning-Environment.git brew install cmake sdl cd Arcade-Learning-Environment mkdir build && cd build cmake -DUSE_SDL=ON -DUSE_RLGLUE=OFF -DBUILD_EXAMPLES=ON .. make -j 4 pip install .. cd ../.. wget https://atariage.com/2600/roms/Breakout.zip unzip Breakout.zip
これで demo_a3c_ale.py
が実行できるはずです。プレイ動画を残すために --record-screen-dir
オプションをつけて実行します。
mkdir record python demo_a3c_ale.py ./Breakout.bin trained_model/breakout_ff/80000000_finish.h5 --record-screen-dir ./record
しばらくすると record
に大量の png が出力されます。opencv で動画にします。
from pathlib import Path import cv2 mov_file = 'record.mov' fourcc = cv2.VideoWriter_fourcc(*'mp4v') fps = 60.0 size = (320, 210) video = cv2.VideoWriter(mov_file, fourcc, fps, size) for i in range(10): pngs = sorted(Path('./'+str(i)).glob('*.png')) for png in pngs: img = cv2.imread(str(png)) video.write(img) video.release()
を record/png2mov.py
として保存して
cd record python png2mov.py
しばらく待つと、record.mov
が生成されます (24MB くらいでした)。