Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

행복한 개구리

Unity ML 21.05.17. 복습 - ML 본문

Unity/복습

Unity ML 21.05.17. 복습 - ML

HappyFrog 2021. 5. 18. 00:10

머신러닝을 오늘 처음 배워서 복습을 하려한다.

그런데 집에 있는 유니티의 ML Agent의 버전이 1.0.7이고, 내가 필요한건 2.0.0버전이었다. 문제는 업데이트를 찾을 수 없다는 점이었다. 하지만 알고보니 Github에서 다운받은 ML-Agent-Release를 '추가'로 열어버리면 해당 개발자가 업데이트 한 ML Agent 2.0.0도 같이 임포트되는 것을 확인했다.

 

결론 : 프로젝트 '추가'로 생성하자.

-----------------------------------------------------------------------------------------------------------------------------------

Test Space라는 빈 오브젝트를 생성하여 생성한 오브젝트들을 그룹화시켰다.

Floor : Plane (0,0,0)

Target : Cube (3,0.5,3)

RollerBall : Sphere (0,0.5,0)

 

위와 같이 게임오브젝트를 생성하여 설정해주고 RollerBallAgent 스크립트를 하나 만들어서 상단에 아래와 같이 선언해주고 Agent를 상속시켰다

그리고 RollerBall의 Rigidbody와 Target의 Transform을 binding시킬 수 있도록 public으로 설정했으며, OnEpisodeBegin를 오버라이딩 하여 사용했다. 튜토리얼에서는 에피소드가 시작할 때마다 OnEpisodeBegin이 새로운 에피소드의 환경을 설정한다고 나와있다.

튜토리얼에서 말해주는 OnEpisodeBegin의 기능

OnEpisodeBegin에서는 RollerBall이 Floor에서 떨어질 때, 에피소드를 새로 시작하며 위치를 초기화시키고 Target의 위치가 랜덤생성되도록 구현했다.

 

그리고 아직 처음이라 정확히는 모르겠는데 Trainer쪽에 데이터를 보내주는 메서드를 오버라이딩 하여 작성했다.

Target과 Agent(RollerBall)위치와 에이전트의 속도값을 전달해주는 메서드이다. 여기서는 Y축의 움직임이 없기때문에 rigidbody.velocity의 y값을 전달하지 않는다.

 

이어서 OnActionReceived를 작성했다.

마찬가지로 오버라이딩했으며, 모르는 것들을 찾아보았다. 에이전트가 타겟과 만나면 보상으로 1을 부여했으며, 에피소드를 끝냈고, Floor에서 떨어진다면 보상없이 에피소드를 끝냈다.

우선 ContinuousActions는 내가 약한 Generic을 사용한다. 읽기전용인것은 알겠지만 Generic을 빨리 공부해봐야겠다.

첫 술에 배부를 순 없겠지만 이걸 이해하는 날이 오도록 해야한다. 우선은 벌점/보상을 부여하는 메서드라고 생각하자. 

우선 기능만 기억하자. 메서드의 이름대로 에피소드를 끝내는 것이고, 저 안의 메서드를 타고 들어가기 시작하면 너무 방대해진다.

그리고 RollerBall에 Behavior Parameters와 Decision Requester스크립트를 추가했다.

ㄴML을 할때는 Behavior Parameters스크립트와 Decision Requester스크립트, 그리고 Agent스크립트가 필수인데, 여기서 Agent스크립트는 RollerBallAgent로 상속받았기때문에 정상적으로 작동한다.

그리고 Space Size를 8로 바꾸고 Continuous Action을 2, Descrete Branch는 0 Inference Device는 CPU로 설정해주었다.

 

 

이어서 Heuristic메서드를 추가했으며, 이를 이용하여 이로 움직일 수 있게 만들었다. 주의할 점은 Behavior Type을 Heuristic Only로 바꾸어 줘야한다.

 

결과물

일단은 에이전트가 ML하는 수준까진 아니고 ML을 할 수 있는 환경을 만들어두었다.

 

 

Unity-Technologies/ml-agents

Unity Machine Learning Agents Toolkit. Contribute to Unity-Technologies/ml-agents development by creating an account on GitHub.

github.com

복습은 해당 튜토리얼을 보며 따라했다.

 

 

 

Class Agent | ML Agents | 2.0.0-pre.3

Class Agent An agent is an actor that can observe its environment, decide on the best course of action using those observations, and execute those actions within the environment. Inheritance Agent Assembly : solution.dll Syntax public class Agent : MonoBeh

docs.unity3d.com

Unity ML Agent의 manual같은거