Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

304쪽 9.5.4 ml-agent에서의 모방학습 결과 #62

Open
Accountance opened this issue Aug 31, 2023 · 20 comments
Open

304쪽 9.5.4 ml-agent에서의 모방학습 결과 #62

Accountance opened this issue Aug 31, 2023 · 20 comments

Comments

@Accountance
Copy link

Accountance commented Aug 31, 2023

mlagents-learn [trainer-path] --env=[env-path]/build_name --run-id==[run-id]

trainer-path에 Kart.yaml
env-path에 Kart.exe 빌드 폴더 위치
run-id는 모르겠네요.
제가 말씀드린게 맞나요?

각 괄호 안에 어떤 명령어들이 들어가야 하나요??

@Kyushik
Copy link
Contributor

Kyushik commented Aug 31, 2023

네네 말씀하신대로 trainer-path에는 yaml 파일의 경로
env-path에는 빌드된 환경의 경로
run-id의 경우 진행하는 학습과 관련된 파일들을 저장할 경로라서 임의대로 이름을 정해주시면 됩니다.
예를 들어 kart_test라는 이름으로 run-id를 설정하시면 학습을 진행하신 경로에 result라는 폴더가 생성되고 해당 폴더 안에 kart_test라는 폴더가 생성되며 그 안에 tensorboard 이벤트 파일이나 파이토치 모델, onnx 등이 저장됩니다.

@Accountance
Copy link
Author

kart.yaml 의 경로 = C:\Users\nnn75\OneDrive\Batang\Unity_ML_Agents_2.0-main\Unity_ML_Agents_2.0-main\config
빌드파일(KART.exe)의 경로 = C:\envs\Kart_Windows
빌드 파일 이름 : KART.exe

입력 명령어
C:\Users\nnn75>mlagents-learn C:\Users\nnn75\OneDrive\Batang\Unity_ML_Agents_2.0-main\Unity_ML_Agents_2.0-main\config --env= C:\envs\Kart_Windows/KART.exe --run-id=kart_run

결과

usage: mlagents-learn.exe [-h] [--env ENV_PATH] [--resume] [--deterministic] [--force] [--run-id RUN_ID]
[--initialize-from RUN_ID] [--seed SEED] [--inference] [--base-port BASE_PORT]
[--num-envs NUM_ENVS] [--num-areas NUM_AREAS] [--debug] [--env-args ...]
[--max-lifetime-restarts MAX_LIFETIME_RESTARTS]
[--restarts-rate-limit-n RESTARTS_RATE_LIMIT_N]
[--restarts-rate-limit-period-s RESTARTS_RATE_LIMIT_PERIOD_S] [--torch] [--tensorflow]
[--results-dir RESULTS_DIR] [--width WIDTH] [--height HEIGHT]
[--quality-level QUALITY_LEVEL] [--time-scale TIME_SCALE]
[--target-frame-rate TARGET_FRAME_RATE] [--capture-frame-rate CAPTURE_FRAME_RATE]
[--no-graphics] [--torch-device DEVICE]
[trainer_config_path]

mlagents-learn.exe: error: unrecognized arguments: C:\envs\Kart_Windows/KART.exe

빌드 파일의 경로를 인식하지 못한 것 같은데 경로 자체는 맞거든요.
뭐가 문제일까요?

해당 명령어 입력하는 경로는 아무 곳이여도 상관 없나요?
일단 최초 cmd 접속 시 있는 경로에서 입력했습니다.

@Kyushik
Copy link
Contributor

Kyushik commented Sep 5, 2023

음.. 일단 yaml 파일 경로가 config까지만 입력하시면 안되고 config/kart.yaml 까지 입력해주셔야 할 것 같습니다. 그리고 환경의 경로도 KART.exe까지 입력해주셔야해서 일단 이 부분부터 진행해보시면 좋을 것 같습니다!

@Accountance
Copy link
Author

Accountance commented Sep 11, 2023

  1. 위 명령어를 실행하면 GAIL알고리즘에 의한 학습을 진행하는건가요?

  2. BC 알고리즘만을 이용하여 모방학습을 사용할거면 9.5.4과정은 생략해도 되는걸까요?

  3. GAIL알고리즘으로 학습한 데이터는 ONNX파일이 남아있어서 Behavior parameter에 적용이 가능하던데
    BC 알고리즘의 경우는 해당 확장자 파일이 없더라구요. 어떻게 적용시키나요?

@Accountance
Copy link
Author

Accountance commented Sep 11, 2023

카트 부분에서 ppo만 ppo+bc, ppo+bc+gail 같이 사용한 학습에 대한 그래프가 있는데
알고리즘 선택은 Kart.yaml에서 가능한건가요? ppo만 쓰고 싶으면 밑에 gail 부분이랑 BC만 없애주면 되나요?

trainer type : ppo 부분에 behavioral_cloning이나 gail 단일로 써도 오류가 나더라구요.
알고리즘 선택은 어떻게 할 수 있나요?

@Accountance
Copy link
Author

[INFO] ArcadeDriver. Step: 21000. Time Elapsed: 242.250 s. No episode was completed since last summary. Training.

마지막 과정에서 학습중에 에피소드가 완료되지 않았다고 뜨는데 어떤 이유때문에 그럴까요?

@Accountance
Copy link
Author

Kart.exe로 플레이

플레이한 데이터 Demonstration 폴더에 Kart.demo 파일로 저장

파이썬 스크립트로 demo파일 훈련하면 BC폴더에 로드파일(년/월/일/시간)으로 남고
Demonstartion 폴더에 훈련된 Kart_n.demo파일 생성

두 번째로 생성된 데모파일로 Kart.yaml을 이용하여 최종 학습 시킴

결과물(ONNX 파일) 완성

이 과정이 맞나요?

@Kyushik
Copy link
Contributor

Kyushik commented Sep 11, 2023

  • 위 명령어를 실행하면 GAIL알고리즘에 의한 학습을 진행하는건가요?
  • BC 알고리즘만을 이용하여 모방학습을 사용할거면 9.5.4과정은 생략해도 되는걸까요?
  • GAIL알고리즘으로 학습한 데이터는 ONNX파일이 남아있어서 Behavior parameter에 적용이 가능하던데
    BC 알고리즘의 경우는 해당 확장자 파일이 없더라구요. 어떻게 적용시키나요?

책을 기준으로는 작성된 내용대로 명령어를 실행하시면 gail + bc 알고리즘에 의한 학습을 진행합니다.
9.5.4의 경우 mlagents-learn의 결과를 확인하는 부분이라 해당 과정은 어떤 알고리즘으로 진행해도 동일하게 확인하는 부분입니다.
BC로 학습하는 경우 onnx 파일이 생성되지 않나요..? BC로만 학습해도 생성되어야할 것 같은데 이 부분은 확인이 필요할 것 같습니다

@Kyushik
Copy link
Contributor

Kyushik commented Sep 11, 2023

카트 부분에서 ppo만 ppo+bc, ppo+bc+gail 같이 사용한 학습에 대한 그래프가 있는데 알고리즘 선택은 Kart.yaml에서 가능한건가요? ppo만 쓰고 싶으면 밑에 gail 부분이랑 BC만 없애주면 되나요?

trainer type : ppo 부분에 behavioral_cloning이나 gail 단일로 써도 오류가 나더라구요. 알고리즘 선택은 어떻게 할 수 있나요?

알고리즘 선택은 yaml 파일에서 가능하지만 모방학습으로 진행하실 경우 강화학습과 학습 방법이 달라서 그냥 ppo만 사용하는 것은 안될 것 같습니다. 단, 모방학습을 사용하지 않고 강화학습만으로 학습을 원하시는 경우 gail, bc 부분은 없애고 PPO만으로 학습하시는 것이 맞습니다.
엇… 그리고 BC나 Gail 각각의 내용만 작성해도 단일 알고리즘으로 사용 가능했던 것으로 기억하는데 둘다 작성해야만 동작하는 것일까요? 어떤 오류가 나는지 첨부해주시면 좋을 것 같습니다.

@Kyushik
Copy link
Contributor

Kyushik commented Sep 11, 2023

[INFO] ArcadeDriver. Step: 21000. Time Elapsed: 242.250 s. No episode was completed since last summary. Training.

마지막 과정에서 학습중에 에피소드가 완료되지 않았다고 뜨는데 어떤 이유때문에 그럴까요?

이 메시지의 경우 학습 과정을 프린트 하는 단위 스텝 (ex. 1000스텝) 동안 에피소드가 한번도 종료되지 않아서 그렇습니다. 혹시 summary하는 주기를 너무 짧게 잡으신건 아닌지 확인해보시면 좋을 것 같습니다.

@Kyushik
Copy link
Contributor

Kyushik commented Sep 11, 2023

Kart.exe로 플레이

플레이한 데이터 Demonstration 폴더에 Kart.demo 파일로 저장

파이썬 스크립트로 demo파일 훈련하면 BC폴더에 로드파일(년/월/일/시간)으로 남고 Demonstartion 폴더에 훈련된 Kart_n.demo파일 생성

두 번째로 생성된 데모파일로 Kart.yaml을 이용하여 최종 학습 시킴

결과물(ONNX 파일) 완성

이 과정이 맞나요?

파이썬이랑 mlagents-learn은 학습 방법이 다릅니다.
우선 사람이 직접 플레이해서 demo 파일을 생성하고 이 demo 파일로 mlagents-learn을 통해 학습하거나 Python을 통해서 BC로 학습하는 것이 따로따로입니다.
파이썬 스크립트로 실행하는 경우에도 환경이 실행되었으므로 demo 파일이 생성될 수 있는데요. 아마 직접 플레이한 기록이 없어서 demo 파일에 아무것도 저장되지 않거나 파이썬 코드로 학습한 결과에 대한 경험 데이터가 기록되지 않을까 생각합니다.

즉, 사람이 플레이 해서 얻은 데모 파일 -> yaml -> onnx 이 과정이 하나의 학습 과정이고
사람이 플레이 해서 얻은 데모파일 -> python 코드 -> ckpt 이 과정이 또 다른 하나의 학습 과정입니다.

@Accountance
Copy link
Author

Accountance commented Sep 12, 2023

  • 위 명령어를 실행하면 GAIL알고리즘에 의한 학습을 진행하는건가요?
  • BC 알고리즘만을 이용하여 모방학습을 사용할거면 9.5.4과정은 생략해도 되는걸까요?
  • GAIL알고리즘으로 학습한 데이터는 ONNX파일이 남아있어서 Behavior parameter에 적용이 가능하던데
    BC 알고리즘의 경우는 해당 확장자 파일이 없더라구요. 어떻게 적용시키나요?

책을 기준으로는 작성된 내용대로 명령어를 실행하시면 gail + bc 알고리즘에 의한 학습을 진행합니다. 9.5.4의 경우 mlagents-learn의 결과를 확인하는 부분이라 해당 과정은 어떤 알고리즘으로 진행해도 동일하게 확인하는 부분입니다. BC로 학습하는 경우 onnx 파일이 생성되지 않나요..? BC로만 학습해도 생성되어야할 것 같은데 이 부분은 확인이 필요할 것 같습니다

.
.
.
.
.

  1. python BC 스크립트를 이용하여 학습시킬 경우
    학습된 demo파일과 saved_model 폴더 > BC 폴더에 로드할 수 있는 데이터 이렇게 2개 밖에 남지 않더라구요.

trainer_type: gail

위와 같이 단일로 적었더니

ValueError: 'gail' is not a valid TrainerType

위와 같은 오류가 발생했습니다.
오직 ppo만 작동하더라구요.

@Kyushik
Copy link
Contributor

Kyushik commented Sep 12, 2023

Python 코드 실행 후 생성된 demo 파일은 사용하지 않구요! Saved_model 폴더에 BC 학습을 수행하면서 정보를 기록한 tensorboard 이벤트 파일과 BC 알고리즘이 학습된 모델 파라미터 (ckpt)가 저장되어서 학습이 완료되면 해당 ckpt 파일을 파이썬 파일에 설정하신 후 load_model=True, train_mode=False로 설정하고 코드 실행하시면 학습된 BC 결과 확인하실 수 있습니다!

@Kyushik
Copy link
Contributor

Kyushik commented Sep 12, 2023

아아아 trainer_type은 ppo로 하는게 맞구요! yaml에 BC설정을 추가해주시면 BC가 적용되고 gail 설정을 추가해주시면 gail 알고리즘이 적용되는 방식입니다!

@Accountance
Copy link
Author

Accountance commented Sep 12, 2023

아아아 trainer_type은 ppo로 하는게 맞구요! yaml에 BC설정을 추가해주시면 BC가 적용되고 gail 설정을 추가해주시면 gail 알고리즘이 적용되는 방식입니다!

behaviors:
ArcadeDriver:
trainer_type: ppo
hyperparameters:
batch_size: 128
buffer_size: 2048
learning_rate: 0.0003
beta: 0.01
epsilon: 0.2
lambd: 0.95
num_epoch: 3
learning_rate_schedule: linear
network_settings:
normalize: false
hidden_units: 128
num_layers: 2
vis_encode_type: simple
reward_signals:
extrinsic:
gamma: 0.99
strength: 1.0

  gail:
    gamma: 0.99
    strength: 0.05
    network_settings:   
      normalize: false
      hidden_units: 64
      num_layers:   2
      vis_encode_type:  simple
    learning_rate: 0.0003
    use_actions: true
    use_vail: false
    demo_path: C:\envs\Kart_Windows\KART_Data\Demonstrations/Kart.demo
keep_checkpoints: 5
max_steps: 50000
time_horizon: 64
summary_freq: 1000

behavioral_cloning:
  demo_path: C:\envs\Kart_Windows\KART_Data\Demonstrations/Kart.demo
  steps: 0
  strength: 0.05
  samples_per_update: 0

여기서 BC랑 GAIL 알고리즘을 단독으로 혹은 함께 사용하려면 어느 부분을 수정해주면 될까요?
설정을 추가해주면 된다는게 이미 적혀있는 behavioral Coloning과 gail부분과는 별개인가요?

@Accountance
Copy link
Author

Python 코드 실행 후 생성된 demo 파일은 사용하지 않구요! Saved_model 폴더에 BC 학습을 수행하면서 정보를 기록한 tensorboard 이벤트 파일과 BC 알고리즘이 학습된 모델 파라미터 (ckpt)가 저장되어서 학습이 완료되면 해당 ckpt 파일을 파이썬 파일에 설정하신 후 load_model=True, train_mode=False로 설정하고 코드 실행하시면 학습된 BC 결과 확인하실 수 있습니다!

아 저도 이 방법은 아는데 문제는 학습된 파일을 유니티 내에 KartAgent의 Behavior Parameters에 적용시킬 수 있는
ONNX파일을 제가 못 찾는건지 아니면 생성이 안 되는지에 대한 부분이 궁금한 것 이였습니다!

@Accountance
Copy link
Author

약 5만번 정도 학습한 데이터(onnx)를 하나 더 복사한 KartAgent 오브젝트의 behavior parameters에 적용했는데
저는 커브 구간에서 계속 벽에 밖아서 초기화되고 같이 했던 친구는 트랙을 정상적으로 주행하네요.

음... 분명 데모 파일 만들 때 한 7바퀴 정도 제대로 돌았는데도 이러네요... 혹시 추정 해 볼 수 있는 문제가 있을까요?
너무 질문 많이 해서 죄송합니다 ㅠㅠ....

@Kyushik
Copy link
Contributor

Kyushik commented Sep 12, 2023

아아아 trainer_type은 ppo로 하는게 맞구요! yaml에 BC설정을 추가해주시면 BC가 적용되고 gail 설정을 추가해주시면 gail 알고리즘이 적용되는 방식입니다!

behaviors: ArcadeDriver: trainer_type: ppo hyperparameters: batch_size: 128 buffer_size: 2048 learning_rate: 0.0003 beta: 0.01 epsilon: 0.2 lambd: 0.95 num_epoch: 3 learning_rate_schedule: linear network_settings: normalize: false hidden_units: 128 num_layers: 2 vis_encode_type: simple reward_signals: extrinsic: gamma: 0.99 strength: 1.0

  gail:
    gamma: 0.99
    strength: 0.05
    network_settings:   
      normalize: false
      hidden_units: 64
      num_layers:   2
      vis_encode_type:  simple
    learning_rate: 0.0003
    use_actions: true
    use_vail: false
    demo_path: C:\envs\Kart_Windows\KART_Data\Demonstrations/Kart.demo
keep_checkpoints: 5
max_steps: 50000
time_horizon: 64
summary_freq: 1000

behavioral_cloning:
  demo_path: C:\envs\Kart_Windows\KART_Data\Demonstrations/Kart.demo
  steps: 0
  strength: 0.05
  samples_per_update: 0

여기서 BC랑 GAIL 알고리즘을 단독으로 혹은 함께 사용하려면 어느 부분을 수정해주면 될까요? 설정을 추가해주면 된다는게 이미 적혀있는 behavioral Coloning과 gail부분과는 별개인가요?

위 코드에서 behavior_cloning: 블럭만 사용하면 BC만 적용되는 것이고 gail: 블럭만 사용하시면 gail만 적용됩니다! 둘다 사용하면 두 알고리즘 모두 사용되구요!

Gail만 사용

behaviors:
  ArcadeDriver:
    trainer_type: ppo
    hyperparameters:
      batch_size: 128
      buffer_size: 2048
      learning_rate: 0.0003
      beta: 0.01
      epsilon: 0.2
      lambd: 0.95
      num_epoch: 3
      learning_rate_schedule: linear
    network_settings:
      normalize: false
      hidden_units: 128
      num_layers: 2
      vis_encode_type: simple
    reward_signals:
      extrinsic:
        gamma: 0.99
        strength: 1.0
      gail:
        gamma: 0.99
        strength: 0.05
        network_settings:   
          normalize: false
          hidden_units: 64
          num_layers:   2
          vis_encode_type:  simple
        learning_rate: 0.0003
        use_actions: true
        use_vail: false
        demo_path: demo/KartAgent.demo
    keep_checkpoints: 5
    max_steps: 50000
    time_horizon: 64

BC만 사용

behaviors:
  ArcadeDriver:
    trainer_type: ppo
    hyperparameters:
      batch_size: 128
      buffer_size: 2048
      learning_rate: 0.0003
      beta: 0.01
      epsilon: 0.2
      lambd: 0.95
      num_epoch: 3
      learning_rate_schedule: linear
    network_settings:
      normalize: false
      hidden_units: 128
      num_layers: 2
      vis_encode_type: simple
    reward_signals:
      extrinsic:
        gamma: 0.99
        strength: 1.0
    keep_checkpoints: 5
    max_steps: 50000
    time_horizon: 64
    summary_freq: 1000
    behavioral_cloning:
      demo_path: demo/KartAgent.demo
      steps: 0
      strength: 0.05
      samples_per_update: 512

@Kyushik
Copy link
Contributor

Kyushik commented Sep 12, 2023

Python 코드 실행 후 생성된 demo 파일은 사용하지 않구요! Saved_model 폴더에 BC 학습을 수행하면서 정보를 기록한 tensorboard 이벤트 파일과 BC 알고리즘이 학습된 모델 파라미터 (ckpt)가 저장되어서 학습이 완료되면 해당 ckpt 파일을 파이썬 파일에 설정하신 후 load_model=True, train_mode=False로 설정하고 코드 실행하시면 학습된 BC 결과 확인하실 수 있습니다!

아 저도 이 방법은 아는데 문제는 학습된 파일을 유니티 내에 KartAgent의 Behavior Parameters에 적용시킬 수 있는 ONNX파일을 제가 못 찾는건지 아니면 생성이 안 되는지에 대한 부분이 궁금한 것 이였습니다!

아 파이썬 학습의 경우 ONNX가 생성되지는 않습니다. 제가 알기로는 mlagents 측에서 ckpt 파일을 유니티 Behavior parameters 내에 적용할 수 있는 기능을 업데이트 할 예정이라고 했었는데 아직 기능이 공개되지는 않은 것 같습니다.

@Kyushik
Copy link
Contributor

Kyushik commented Sep 12, 2023

약 5만번 정도 학습한 데이터(onnx)를 하나 더 복사한 KartAgent 오브젝트의 behavior parameters에 적용했는데 저는 커브 구간에서 계속 벽에 밖아서 초기화되고 같이 했던 친구는 트랙을 정상적으로 주행하네요.

음... 분명 데모 파일 만들 때 한 7바퀴 정도 제대로 돌았는데도 이러네요... 혹시 추정 해 볼 수 있는 문제가 있을까요? 너무 질문 많이 해서 죄송합니다 ㅠㅠ....

데모파일 만들때 7바퀴도 적을수도 있습니다 ㅜㅜ 그리고 돌때마다 조금 다양한 패턴으로 도는것이 좋을 수 있습니다. 만약 친구분의 에이전트가 제대로 학습된 경우 친구분의 데모파일을 사용해보시는 것도 추천드립니다!
아니면 아래의 저희가 제공하는 demo 파일을 사용해보셔도 좋을 것 같습니다
https://github.com/reinforcement-learning-kr/Unity_ML_Agents_2.0/tree/main/demo

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants