OpenAI Universe の Mini World Of Bits (MiniWoB) のデモデータを作る
システム環境
- macOS 10.13
- pyenv-virtualenv
準備
デモを撮るために、以下をしておく必要があります。
- MiniWoB の Docker コンテナから 'app' ディレクトリをダウンロードする
- 'app' に入っている 'gym-demonstration' and 'universe-envs/controlplane' をインストールする
1. 'app' のダウンロード
'app' をダウンロードするために、MiniWob コンテナを以下のような python スクリプトで起動します。
import gym import universe env = gym.make('wob.mini.ClickButton-v0') env.configure(remotes=1, fps=12, vnc_driver='go', vnc_kwargs={'encoding': 'tight', 'compress_level': 0, 'fine_quality_level': 100, 'subsample_level': 0}) env.reset() while True: pass
起動させておいて、docker cp
を使って 'app' をコピーします。
docker cp (container_id):/app ~/
container_id
は docker ps
で確認できます。コピーが完了したら、python スクリプトとコンテナを削除しておきます。
2. 'gym-demonstration', 'universe-envs/controlplane' をインストールする
まずはじめに、いくつかのパッケージを brew からインストールします。
brew install cmake ffmpeg
次に、app/gym-demonstration/gym_demonstration/event_readers.py
を変更します。
269 - if method == 'env.reward': 269 + if 'env.reward' in method:
最後に、以下を実行します。
cd app/gym-demonstration pip install -e . cd app/universe-envs/controlplane pip install -e . # if you need pip install scipy
デモを撮る
app/universe-envs/world-of-bits
で make
コマンドを使うことでデモを撮れます。ENV
は好きなものに変更してください。
cd app/universe-envs/world-of-bits make URL='quay.io/openai/universe.world-of-bits' demo ENV='wob.mini.ClickButton-v0 -f 12' open vnc://localhost:21037 # pass: openai
上記を実行した後、Screen Sharing.app でデモを行ういます。デモデータは /tmp/woball/
に保存されます。
デモビデオの再生
デモデータは mp4 に変換して見ることができます。
その前に、app/gym-demonstration/bin/wob_video.py
を少し変更します。
26 - parser.add_argument('-d', '--logfile-dirs', required=True, nargs='+', help=... 26 + parser.add_argument('-d', '--logfile-dir', required=True, help=... 48 - reader = vnc_reader.VNCReader('wobdemo', ... 48 + reader = vnc_reader.VNCReader(args.logfile_dir, ... ... 118 + render_episodes(eps)
変更したら
python wob_video.py -d /path/to/demo -f 12 -s 1 -g 1x1 open out.mp4
正しくはわかりませんが、'-s' をつけないとエピソードが正しく保存されないようです。
デモデータを python オブジェクトとして扱う
app/gym-demonstration/bin/wob_video.py
における 'eps' は list
、'frame' は numpy.ndarray
で 'action' は universe.spaces.vnc_event
です。
もしも、デモデータを python スクリプトで利用したい場合は、example.py
のようにこれを使えます。