masato-ka / airc-rl-agent

AI RC Car Agent that using deep reinforcement learning on Jetson Nano
MIT License
86 stars 24 forks source link

Error(v.1.5.0) #32

Closed natupan closed 3 years ago

natupan commented 3 years ago

<実行した環境> ubuntu / シュミレーターでの実装 anacondaで環境を構築

<インストールしたライブラリ一覧> _libgcc_mutex 0.1 main
_tflow_select 2.1.0 gpu
absl-py 0.9.0 py37_0
astor 0.8.0 py37_0
astroid 2.4.1 py37_0
attrs 19.3.0 py_0
blas 1.0 mkl
bzip2 1.0.8 h7b6447c_0
c-ares 1.15.0 h7b6447c_1001
ca-certificates 2020.1.1 0
cairo 1.14.12 h8948797_3
certifi 2020.4.5.2 py37_0
chardet 3.0.4 pypi_0 pypi cloudpickle 1.3.0 pypi_0 pypi cudatoolkit 10.0.130 0
cudnn 7.6.5 cuda10.0_0
cupti 10.0.130 0
cycler 0.10.0 py37_0
dbus 1.13.14 hb2f20db_0
decorator 4.4.2 pypi_0 pypi docopt 0.6.2 py37_0
donkeycar 3.1.2 dev_0 expat 2.2.6 he6710b0_0
ffmpeg 4.0 hcdf2ecd_0
fontconfig 2.13.0 h9420a91_0
freeglut 3.0.0 hf484d3e_5
freetype 2.9.1 h8a8886c_1
future 0.18.2 pypi_0 pypi gast 0.2.2 pypi_0 pypi glib 2.63.1 h3eb4bd4_1
google-pasta 0.2.0 pypi_0 pypi graphite2 1.3.13 h23475e2_0
grpcio 1.27.2 py37hf8bcb03_0
gst-plugins-base 1.14.0 hbbd80ab_1
gstreamer 1.14.0 hb31296c_0
gym 0.17.1 pypi_0 pypi gym-donkeycar 1.0.16 dev_0 h5py 2.8.0 py37h989c5e5_3
harfbuzz 1.8.8 hffaf4a1_0
hdf5 1.10.2 hba1933b_1
icu 58.2 he6710b0_3
idna 2.9 pypi_0 pypi imageio 2.8.0 pypi_0 pypi imageio-ffmpeg 0.4.2 pypi_0 pypi importlib-metadata 1.6.1 py37_0
importlib_metadata 1.6.1 0
intel-openmp 2020.1 217
isort 4.3.21 py37_0
jasper 2.0.14 h07fcdf6_1
joblib 0.15.1 pypi_0 pypi jpeg 9b h024ee3a_2
keras-applications 1.0.8 py_0
keras-preprocessing 1.1.0 py_1
kiwisolver 1.2.0 py37hfd86e86_0
lazy-object-proxy 1.4.3 py37h7b6447c_0
ld_impl_linux-64 2.33.1 h53a641e_7
learning-racer 1.5.0 pypi_0 pypi libedit 3.1.20181209 hc058e9b_0
libffi 3.3 he6710b0_1
libgcc-ng 9.1.0 hdf63c60_0
libgfortran-ng 7.3.0 hdf63c60_0
libglu 9.0.0 hf484d3e_1
libopencv 3.4.2 hb342d67_1
libopus 1.3.1 h7b6447c_0
libpng 1.6.37 hbc83047_0
libprotobuf 3.12.3 hd408876_0
libstdcxx-ng 9.1.0 hdf63c60_0
libtiff 4.1.0 h2733197_1
libuuid 1.0.3 h1bed415_2
libvpx 1.7.0 h439df22_0
libxcb 1.13 h1bed415_1
libxml2 2.9.10 he19cac6_1
lz4-c 1.9.2 he6710b0_0
markdown 3.1.1 py37_0
matplotlib 3.1.3 py37_0
matplotlib-base 3.1.3 py37hef1b27d_0
mccabe 0.6.1 py37_1
mkl 2020.1 217
mkl-service 2.3.0 py37he904b0f_0
mkl_fft 1.0.15 py37ha843d7b_0
mkl_random 1.1.1 py37h0573a6f_0
mock 4.0.2 py_0
more-itertools 8.4.0 py_0
moviepy 1.0.3 pypi_0 pypi ncurses 6.2 he6710b0_1
numpy 1.18.1 py37h4f9e942_0
numpy-base 1.18.1 py37hde5b4d6_1
olefile 0.46 py37_0
opencv 3.4.2 py37h6fd60c2_1
opencv-python 4.2.0.34 pypi_0 pypi openpmd-viewer 1.1.0 pypi_0 pypi openssl 1.1.1g h7b6447c_0
opt-einsum 3.2.1 pypi_0 pypi packaging 20.4 py_0
paho-mqtt 1.5.0 pypi_0 pypi pandas 1.0.4 py37h0573a6f_0
pcre 8.43 he6710b0_0
pillow 7.1.2 py37hb39fc2d_0
pip 20.1.1 py37_1
pixman 0.38.0 h7b6447c_0
pluggy 0.13.1 py37_0
prettytable 0.7.2 pypi_0 pypi proglog 0.1.9 pypi_0 pypi protobuf 3.12.3 py37he6710b0_0
py 1.8.2 py_0
py-opencv 3.4.2 py37hb342d67_1
pyglet 1.5.0 pypi_0 pypi pylint 2.5.2 py37_0
pyparsing 2.4.7 py_0
pyqt 5.9.2 py37h05f1152_2
pytest 5.4.3 py37_0
pytest-mock 3.1.1 pypi_0 pypi python 3.7.7 hcff3b4d_5
python-dateutil 2.8.1 py_0
pytz 2020.1 py_0
pyyaml 5.3.1 pypi_0 pypi qt 5.9.7 h5867ecd_1
readline 8.0 h7b6447c_0
requests 2.23.0 pypi_0 pypi scipy 1.4.1 py37h0b6359f_0
setuptools 47.3.0 py37_0
sip 4.19.8 py37hf484d3e_0
six 1.15.0 py_0
sqlite 3.31.1 h62c20be_1
stable-baselines 2.9.0 pypi_0 pypi stable-baselines3 0.8.0 pypi_0 pypi tensorboard 1.15.0 pypi_0 pypi tensorflow 1.15.0 pypi_0 pypi tensorflow-estimator 1.15.1 pypi_0 pypi tensorflow-gpu 1.13.1 h0d30ee6_0
termcolor 1.1.0 py37_1
tk 8.6.8 hbc83047_0
toml 0.10.0 py37h28b3542_0
torch 1.4.0 pypi_0 pypi torchvision 0.5.0 pypi_0 pypi tornado 6.0.4 py37h7b6447c_1
tqdm 4.46.1 pypi_0 pypi typed-ast 1.4.1 py37h7b6447c_0
urllib3 1.25.9 pypi_0 pypi wcwidth 0.2.4 py_0
werkzeug 1.0.1 py_0
wheel 0.34.2 py37_0
wrapt 1.11.2 py37h7b6447c_0
xz 5.2.5 h7b6447c_0
zipp 3.1.0 py_0
zlib 1.2.11 h7b6447c_3
zstd 1.4.4 h0b5b093_3

<実行時のコマンド> racer train -robot sim -vae vae-gt-30K-150.torch -device cpu -sim /home/natupan/DonkeySimLinux/donkey_sim.x86_64 -steps 10000

<実行時の出力> sim starting DonkeyGym env setting default: start_delay 5.0 setting default: max_cte 5.0 setting default: cam_resolution (120, 160, 3) setting default: log_level 20 donkey subprocess started Found path: /home/natupan/DonkeySimLinux/donkey_sim.x86_64 INFO:gym_donkeycar.core.client:connecting to 127.0.0.1:9091 /home/natupan/miniconda3/envs/donkey/lib/python3.7/site-packages/gym/logger.py:30: UserWarning: WARN: Box bound precision lowered by casting to float32 warnings.warn(colorize('%s: %s'%('WARN', msg % args), 'yellow')) WARNING:gym_donkeycar.envs.donkey_sim:waiting for sim to start.. loading scene generated_track INFO:gym_donkeycar.envs.donkey_sim:on need car config INFO:gym_donkeycar.envs.donkey_sim:sending car config. INFO:gym_donkeycar.envs.donkey_sim:done sending car config. Using cpu device Wrapping the env in a DummyVecEnv. /home/natupan/miniconda3/envs/donkey/lib/python3.7/site-packages/stable_baselines3/common/off_policy_algorithm.py:131: UserWarning: You passed a positive value for train_freq and n_episodes_rollout.Please make sure this is intended. The agent will collect data by stepping in the environment until both conditions are true: number of steps in the env >= train_freq and number of episodes > n_episodes_rollout "You passed a positive value for train_freq and n_episodes_rollout." ====RESET Logging to tblog/racer_learnig_log_7 Traceback (most recent call last): File "/home/natupan/miniconda3/envs/donkey/bin/racer", line 8, in sys.exit(racer_func()) File "/home/natupan/miniconda3/envs/donkey/lib/python3.7/site-packages/learning_racer/racer.py", line 84, in racer_func args.handler(args, config) File "/home/natupan/miniconda3/envs/donkey/lib/python3.7/site-packages/learning_racer/commands/subcommand.py", line 57, in command_train model.lean(callback=callback) File "/home/natupan/miniconda3/envs/donkey/lib/python3.7/site-packages/learning_racer/sac/custom_sac.py", line 63, in lean callback=callback) File "/home/natupan/miniconda3/envs/donkey/lib/python3.7/site-packages/stable_baselines3/sac/sac.py", line 293, in learn reset_num_timesteps=reset_num_timesteps, File "/home/natupan/miniconda3/envs/donkey/lib/python3.7/site-packages/stable_baselines3/common/off_policy_algorithm.py", line 238, in learn total_timesteps, eval_env, callback, eval_freq, n_eval_episodes, eval_log_path, reset_num_timesteps, tb_log_name File "/home/natupan/miniconda3/envs/donkey/lib/python3.7/site-packages/stable_baselines3/common/off_policy_algorithm.py", line 221, in _setup_learn total_timesteps, eval_env, callback, eval_freq, n_eval_episodes, log_path, reset_num_timesteps, tb_log_name File "/home/natupan/miniconda3/envs/donkey/lib/python3.7/site-packages/stable_baselines3/common/base_class.py", line 492, in _setup_learn callback = self._init_callback(callback, eval_env, eval_freq, n_eval_episodes, log_path) File "/home/natupan/miniconda3/envs/donkey/lib/python3.7/site-packages/stable_baselines3/common/base_class.py", line 431, in _init_callback callback.init_callback(self) File "/home/natupan/miniconda3/envs/donkey/lib/python3.7/site-packages/stable_baselines3/common/callbacks.py", line 52, in init_callback self._init_callback() File "/home/natupan/miniconda3/envs/donkey/lib/python3.7/site-packages/stable_baselines3/common/callbacks.py", line 156, in _init_callback callback.init_callback(self.model) AttributeError: 'NoneType' object has no attribute 'init_callback'

<contral+cでDonkey Simulatorの画面を落とした時の出力> ^CException ignored in: <module 'threading' from '/home/natupan/miniconda3/envs/donkey/lib/python3.7/threading.py'> Traceback (most recent call last): File "/home/natupan/miniconda3/envs/donkey/lib/python3.7/threading.py", line 1307, in _shutdown lock.acquire() KeyboardInterrupt Exception ignored in: <function DonkeyEnv.del at 0x7f60c697e830> Traceback (most recent call last): File "/home/natupan/projects/gym-donkeycar/gym_donkeycar/envs/donkey_env.py", line 95, in del File "/home/natupan/projects/gym-donkeycar/gym_donkeycar/envs/donkey_env.py", line 99, in close File "/home/natupan/projects/gym-donkeycar/gym_donkeycar/envs/donkey_sim.py", line 68, in quit File "/home/natupan/projects/gym-donkeycar/gym_donkeycar/core/client.py", line 70, in stop File "/home/natupan/miniconda3/envs/donkey/lib/python3.7/threading.py", line 1040, in join TypeError: 'NoneType' object is not callable

masato-ka commented 3 years ago

https://github.com/masato-ka/airc-rl-agent/blob/0a62dfaaf81b217458090765605c9d1ef9769a4c/learning_racer/sac/custom_sac.py#L59 learning_racer/sac/custom_sac.py の59行目を以下のように書き換えてください。バグ修正版を後ほど1.5.1でリリースします。 callback = CallbackList([c for c in [self.checkpoint_cb, callback] if c is not None)

natupan commented 3 years ago

修正ありがとうございます。

コードを修正して実装したところエラーが出ることなく実装することができました。 しかし、エージェントがコース(generated track)を出てもエピソードが終了することなくどこまでも進んでいってしまい強化学習ができておりません。

iPhoneから送信

2021/01/09 16:32、masato-ka notifications@github.comのメール:

 Closed #32 via 366ffa8.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

masato-ka commented 3 years ago

確認しました。最新のDonkeySIMに含まれていない、コースを対象に実装したため、エピソードの終了条件がよくないかもしれません。以下の行をコメントアウトして実行してみてください。 https://github.com/masato-ka/airc-rl-agent/blob/1d7b368901f8717c020cef883ec1884c8a5468d4/learning_racer/commands/subcommand.py#L46

報酬はある程度コース共通で使えると思いますが、カスタマイズしたい場合は以下のメソッドを書き換えてください。 https://github.com/masato-ka/airc-rl-agent/blob/1d7b368901f8717c020cef883ec1884c8a5468d4/learning_racer/sac/hyperparam.py#L20

masato-ka commented 3 years ago

気になったので、こちらでも確認してみました。上記のenv.set_episode_over_fn(episode_over_sim)のコメントアウトをすることで、generated-trackの学習ができます。

natupan commented 3 years ago

コメントアウトしたところ上手く学習させることができました。 ありがとうございます。 因みになのですが、報酬関数の閾値はどのようにして決めているのでしょうか?

iPhoneから送信

2021/01/09 19:58、masato-ka notifications@github.comのメール:

 確認しました。最新のDonkeySIMに含まれていない、コースを対象に実装したため、エピソードの終了条件がよくないかもしれません。以下の行をコメントアウトして実行してみてください。 https://github.com/masato-ka/airc-rl-agent/blob/1d7b368901f8717c020cef883ec1884c8a5468d4/learning_racer/commands/subcommand.py#L46

報酬はある程度コース共通で使えると思いますが、カスタマイズしたい場合は以下のメソッドを書き換えてください。 https://github.com/masato-ka/airc-rl-agent/blob/1d7b368901f8717c020cef883ec1884c8a5468d4/learning_racer/sac/hyperparam.py#L20

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

natupan commented 3 years ago

learningracer/sac/hyperparam.pyのepisode_over_simメソッドは何をしているメソッドになるのでしょうか?

iPhoneから送信

2021/01/09 19:58、masato-ka notifications@github.comのメール:

 確認しました。最新のDonkeySIMに含まれていない、コースを対象に実装したため、エピソードの終了条件がよくないかもしれません。以下の行をコメントアウトして実行してみてください。 https://github.com/masato-ka/airc-rl-agent/blob/1d7b368901f8717c020cef883ec1884c8a5468d4/learning_racer/commands/subcommand.py#L46

報酬はある程度コース共通で使えると思いますが、カスタマイズしたい場合は以下のメソッドを書き換えてください。 https://github.com/masato-ka/airc-rl-agent/blob/1d7b368901f8717c020cef883ec1884c8a5468d4/learning_racer/sac/hyperparam.py#L20

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

masato-ka commented 3 years ago

報酬関数に定義されてるパラメーターはコースの道幅や車速をログに出力し、その値を参考にヒューリスティックに決定しています。episode_over_simメソッドは各エピソードの終了条件を決めています。コースを外れるとepisode_over_simがTrueを返し、エピソードを終了します。

natupan commented 3 years ago

返信が遅くなり申し訳ございません。

報酬関数とepisode_over_simについて教えて頂きありがとうございます。

私はgenerated track専用の報酬関数を作成しようと考えているのですが何か報酬関数を作成するコツを教えていただけないでしょうか? よろしくお願いします。

iPhoneから送信

2021/01/10 20:51、masato-ka notifications@github.comのメール:

 報酬関数に定義されてるパラメーターはコースの道幅や車速をログに出力し、その値を参考にヒューリスティックに決定しています。episode_over_simメソッドは各エピソードの終了条件を決めています。コースを外れるとepisode_over_simがTrueを返し、エピソードを終了します。

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

masato-ka commented 3 years ago

私もコツを掴むほど作ったことはないのでアドバイスは差し上げにくいのですが、一般的に短期的な報酬が良いと言われています。例えば1つのアクションですぐに結果がわかるものです。逆に長期的な報酬、例えば1周回ったら得られる報酬はよくないとされています。しかし、あえて長期的な報酬を組み込む事で性能をあげてる方もいらっしゃいます。

natupan commented 3 years ago

返信ありがとうございます。 わかりました。 一度短期報酬を意識して作成してみます。

2021/01/12 22:16、masato-ka notifications@github.comのメール:

私もコツを掴むほど作ったことはないのでアドバイスは差し上げにくいのですが、一般的に短期的な報酬が良いと言われています。例えば1つのアクションですぐに結果がわかるものです。逆に長期的な報酬、例えば1周回ったら得られる報酬はよくないとされています。しかし、あえて長期的な報酬を組み込む事で性能をあげてる方もいらっしゃいます。

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/masato-ka/airc-rl-agent/issues/32#issuecomment-758648492, or unsubscribe https://github.com/notifications/unsubscribe-auth/ANMAHWZTKCOX44KEWJD5DS3SZRDUDANCNFSM4V3LK3JQ.