walkingmask’s development log

IT系の情報などを適当に書いていきます

MENU

学習済みの A3C モデルを使ってみる

github.com

上記の素晴らしいリポジトリの学習済みモデルを使って、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 くらいでした)。