walkingmask’s development log

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

MENU

OpenAI Universe の Mini World Of Bits (MiniWoB) のデモデータを作る

GitHub リポジトリこちら。データセット作るぞ!

システム環境

  • macOS 10.13
  • pyenv-virtualenv

準備

デモを撮るために、以下をしておく必要があります。

  1. MiniWoB の Docker コンテナから 'app' ディレクトリをダウンロードする
  2. '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_iddocker 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-bitsmake コマンドを使うことでデモを撮れます。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 のようにこれを使えます。

関連エントリー

walkingmask.hatenablog.com