AsaHP
AI・深層学習

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)

目次

背景と概要

Getting Started

SB3 DQN サンプル

Highway Planning サンプル

Parking HER サンプル

Social Attention DQN サンプル

利用論文

AI・深層学習