学習済みの 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 くらいでした)。
