Social Attention DQN サンプル - 交通流の強化学習ツール highway-env
強化学習におけるOpenAI Gymを拡張させたツールに、交通流を扱うhighway-envがある。その解説ページにあるSocial Attention DQNのサンプルについて説明する。
以下は2023/2時点での情報である。
計算手法と前処理
このサンプルでは、交通密集地における社会的アテンション(LM19)という手法を使っている。
以下のソースは執筆中の2023/2時点のものではなく、少し前のものである。2023/2時点のソースは学習・テストの処理が明らかにおかしい。学習回数が1で、最後のテスト処理が学習処理になっている。一見正しく動くように見えるが、学習時の状況で動かしているので意味がない。
エージェントはeleurent/rl-agentsを使っている。highway-envとrl-agentsの最新版はGymの最新版を要求するが、Colabに最初からある0.25.2を使うよう修正した。最新版のGymはColabで動画が出たり出なかったりして、条件が良く分からない。今後Gymのバージョンが変わる事を考えても、バージョンを固定した方が扱いやすいと思われる。
LM19は交通密集地において自車・他者の相互干渉を捉える手法であり、深層Q学習(DQN)を使用している。2019年の論文であり、highway-envを利用して論文を作成している。画像・動画上で自車・他車の相互干渉を確認できる。論文はこのサイトから取得できる。
##### 修正点、バージョン調整 !pip install 'gym==0.25.2' !pip install 'highway_env==1.6.0' !pip install git+https://github.com/eleurent/rl-agents.git@afd12de017 # Environment #!pip install highway-env import gym import highway_env # Agent #!pip install git+https://github.com/eleurent/rl-agents#egg=rl-agents # Visualisation utils import sys %load_ext tensorboard !pip install tensorboardx gym pyvirtualdisplay !apt-get install -y xvfb python-opengl ffmpeg !git clone https://github.com/eleurent/highway-env.git 2> /dev/null sys.path.insert(0, '/content/highway-env/scripts/') from utils import show_videos
上記の「修正点」は私がソースを修正した箇所である。このページに書いてあるソースは、上から順に実行すると2023/2時点のColabで動作するようになっている。
学習の準備
以下の処理で学習の準備を行う。環境は信号のない交差点で、かなり混沌とした衝突しやすい状況である。
from rl_agents.trainer.evaluation import Evaluation from rl_agents.agents.common.factory import load_agent, load_environment # Get the environment and agent configurations from the rl-agents repository !git clone https://github.com/eleurent/rl-agents.git 2> /dev/null %cd /content/rl-agents/scripts/ env_config = 'configs/IntersectionEnv/env.json' agent_config = 'configs/IntersectionEnv/agents/DQNAgent/ego_attention_2h.json' env = load_environment(env_config) agent = load_agent(agent_config, env) evaluation = Evaluation(env, agent, num_episodes=3000, display_env=False, display_agent=False) print(f"Ready to train {agent} on {env}")
TensorBoard起動
以下の処理でTensorBoardを起動する。TensorBoard上で計算途中の報酬などを確認できる。
%tensorboard --logdir "{evaluation.directory}"
学習
以下の処理で学習を行う。56分程度の計算時間が掛かる。
evaluation.train()
テスト結果
以下の処理でテスト結果を動画で確認できる。実行するごとに結果は変わる。かなり混雑した状況だが、半分程度はすり抜けられるようだ。衝突にはならないが時間切れになる場合もある。自車の注意対象が表示されるので、相互干渉が分かりやすい。
env = load_environment(env_config) env.configure({"offscreen_rendering": True}) agent = load_agent(agent_config, env) evaluation = Evaluation(env, agent, num_episodes=3, recover=True) evaluation.test() show_videos(evaluation.run_directory)
目次
Social Attention DQN サンプル