이번에는 한 1년전부터 눈여겨 보고 있던 유니티 머신러닝쪽을 건드려 보려고 한다
https://github.com/Unity-Technologies/ml-agents
ML-Agent Clone
글쓰는 현재 시점(2021/5/17) 기준으로 최신 버전은 release 17이다
Release 17의 source로 들어가서 다운로드 해준다
git으로 클론하던 Github Desktop으로 하던 ZIP을 받던 상관없다
적당히 폴더를 만들어서 다운로드 해준다
명령프롬포트를 관리자 권한으로 열고 ml-agents 폴더로 가서 아래 명령어를 실행한다
pip install -e ml-agents-env
pip install -e ml-agents
Python 3.7.x
ML-Agent는 python을 기반으로 동작하기 때문에 python을 설치해주어야 한다
공식문서에 나온대로 3.7.x버전을 설치했다
https://www.python.org/downloads/release/python-379/
꼭 운영체제에 맞는 걸로 설치하자
보통은 64비트다
왜 난 32비트를 깔아서 3시간동안 삽질을 했을까
다음은 명령프롬포트를 관리자 권한으로 열고
아래 명령어들을 차례로 입력한다
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3 get-pip.py
pip install --upgrade pip
설치가 끝났다면 pip3 -V를 통해 잘 설치 되었는지 확인하자
PyTorch
PyTorch는 파이썬의 오픈소스 머신 러닝 라이브러리 중 하나이다
https://pytorch.org/get-started/locally/
위 링크에서 명령어를 복사한 뒤 명령 프롬포트에서 실행한다
아래 사진과 같이 잘 설치된다
이 부분에서 파이썬 잘못 깔아서 계속 삽질했다
여기까지 했다면 아래 명령어를 입력해서 잘되었는지 확인하자
mlagents-learn -h
D:\Files\Unity\ml-agents>mlagents-learn -h
usage: mlagents-learn [-h] [--env ENV_PATH] [--resume] [--force]
[--run-id RUN_ID] [--initialize-from RUN_ID]
[--seed SEED] [--inference] [--base-port BASE_PORT]
[--num-envs NUM_ENVS] [--debug] [--env-args ...]
[--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]
positional arguments:
trainer_config_path
optional arguments:
-h, --help show this help message and exit
--env ENV_PATH Path to the Unity executable to train (default: None)
--resume Whether to resume training from a checkpoint. Specify
a --run-id to use this option. If set, the training
code loads an already trained model to initialize the
neural network before resuming training. This option
is only valid when the models exist, and have the same
behavior names as the current agents in your scene.
(default: False)
--force Whether to force-overwrite this run-id's existing
summary and model data. (Without this flag, attempting
to train a model with a run-id that has been used
before will throw an error. (default: False)
--run-id RUN_ID The identifier for the training run. This identifier
is used to name the subdirectories in which the
trained model and summary statistics are saved as well
as the saved model itself. If you use TensorBoard to
view the training statistics, always set a unique run-
id for each training run. (The statistics for all runs
with the same id are combined as if they were produced
by a the same session.) (default: ppo)
--initialize-from RUN_ID
Specify a previously saved run ID from which to
initialize the model from. This can be used, for
instance, to fine-tune an existing model on a new
environment. Note that the previously saved models
must have the same behavior parameters as your current
environment. (default: None)
--seed SEED A number to use as a seed for the random number
generator used by the training code (default: -1)
--inference Whether to run in Python inference mode (i.e. no
training). Use with --resume to load a model trained
with an existing run ID. (default: False)
--base-port BASE_PORT
The starting port for environment communication. Each
concurrent Unity environment instance will get
assigned a port sequentially, starting from the base-
port. Each instance will use the port (base_port +
worker_id), where the worker_id is sequential IDs
given to each instance from 0 to (num_envs - 1). Note
that when training using the Editor rather than an
executable, the base port will be ignored. (default:
5005)
--num-envs NUM_ENVS The number of concurrent Unity environment instances
to collect experiences from when training (default: 1)
--debug Whether to enable debug-level logging for some parts
of the code (default: False)
--env-args ... Arguments passed to the Unity executable. Be aware
that the standalone build will also process these as
Unity Command Line Arguments. You should choose
different argument names if you want to create
environment-specific arguments. All arguments after
this flag will be passed to the executable. (default:
None)
--torch (Removed) Use the PyTorch framework. (default: False)
--tensorflow (Removed) Use the TensorFlow framework. (default:
False)
--results-dir RESULTS_DIR
Results base directory (default: results)
Engine Configuration:
--width WIDTH The width of the executable window of the
environment(s) in pixels (ignored for editor
training). (default: 84)
--height HEIGHT The height of the executable window of the
environment(s) in pixels (ignored for editor training)
(default: 84)
--quality-level QUALITY_LEVEL
The quality level of the environment(s). Equivalent to
calling QualitySettings.SetQualityLevel in Unity.
(default: 5)
--time-scale TIME_SCALE
The time scale of the Unity environment(s). Equivalent
to setting Time.timeScale in Unity. (default: 20)
--target-frame-rate TARGET_FRAME_RATE
The target frame rate of the Unity environment(s).
Equivalent to setting Application.targetFrameRate in
Unity. (default: -1)
--capture-frame-rate CAPTURE_FRAME_RATE
The capture frame rate of the Unity environment(s).
Equivalent to setting Time.captureFramerate in Unity.
(default: 60)
--no-graphics Whether to run the Unity executable in no-graphics
mode (i.e. without initializing the graphics driver.
Use this only if your agents don't use visual
observations. (default: False)
Torch Configuration:
--torch-device DEVICE
Settings for the default torch.device used in
training, for example, "cpu", "cuda", or "cuda:0"
(default: None)
마지막으로 이것까지 해주자
python -m pip install mlagents==0.26.0
지금 여기저기서 본것들과 실패한것들이 겹쳐서 안될수도 있다
파이썬 ㄱㅅㄲ
아마 될거다...
Unity Package Import
이제 유니티에서 새 프로젝트를 만들자
Window - Package Manager를 클릭
+ - Add package from disk... 클릭
ml-agents를 다운로드 했던 폴더에서
com.unity.ml-agents와 com.unity.ml-agents.extensions의 package.json을 import한다
3D ball 예제
ml-agents\Project\Assets에 있는 것들을 유니티에 옮겨주자
ML-Agents\Examples\3DBall\Scenes에 있는 3DBall를 열어준다
InputSystem 관련 에러가 뜬다면
Package Manager를 통해 Input System를 설치해주면 된다
그리고 PushBlockWithInputPlayerController.cs에서
계속 Unity.MLAgents.Extensions에 Input이 없다고 해서 에러가 파일을 삭제해버렸다
문제를 해결할 수 없다면 문제의 원인을 없어버리면 되지...
신기하네...
이제 학습을 시켜보자
ml-agents를 클론했던 폴더로 가서 아래 명령어를 실행한다
mlagents-learn config/ppo/3DBall.yaml --run-id=first3DBallRun
잠시 후 유니티 로고가 뜨면서
Start training by pressing the Play button in the Unity Editor
가 출력되면 유니티에서 play 버튼을 누른다
기본적으로 500,000회의 학습을 진행하며 약 13분정도 걸렸다
결과는 ml-agents\result=first3DBallRun에서 .onnx파일을 찾을 수 있다
이 파일을 Project\Assets\ML-Agents\Examples\3DBall\TFModels으로 복사하고
3DBall Agent의 model에 넣어준다
실행하면 딱히 변화는 없지만 학습은 된거다
ml-agents\config\ppo에서 3DBall.yaml을 수정해서 학습회수에 따른 모델 여러개를 만들어서 비교하면 될듯 하다
아래 github docs를 참고해서 하면 된다
'작업일지 > Unity' 카테고리의 다른 글
[Unity] Git, GitHub와 Sourcetree를 이용한 Unity Project Setup (0) | 2022.11.10 |
---|---|
[Unity] Unity Editor 2021.x에서 URP로 전환하기 (2) | 2022.07.18 |
[Unity] 기본 스크립트 커스터마이징 (0) | 2022.07.14 |
[Unity] 필요한 자료 찾기 (0) | 2020.09.03 |
[Unity] 개발환경 세팅 (0) | 2020.08.13 |