본문 바로가기

유니티 ML Agents/ML Agents 개념

(13)
13. ML Agents 기본 예제 - Ball3D 스크립트 호출구조 분석 Ball3D 호출 구조 ML 에이전트의 이해를 돕기 위해 스크립트 호출 구조를 분석해 보자. 주요 스크립트는 ML 에이전트에 내장된 클래스에 모두 코딩되어 있다. Academy, Agent, Brain 클래스를 살펴보는 것이 좋다. Ball3DAcademy 클래스는 Academy 클래스를 상속받아 구현되는데 Academy를 선택하고 F12 버튼을 누르면 클래스를 스크립트 에디터에서 살펴볼 수 있다. 앞에서 언급했듯이 아카데미는 에이전트와 브레인을 제어하는 역할을 한다. 이 것을 Academy 클래스의 EnvironmentStep 함수 내부에서 Agent와 Brain 클래스에 선언된 함수를 차례대로 호출하면서 동작을 제어한다. (1) AgentSetStatus 함수는 Agent 클래스의 SetStatus ..
12. ML Agents 기본 예제 - Ball3DAgent 분석 Ball3DAgent 3DBalls에서는 에이전트로 Platform을 사용했다. 계층 뷰에서 Gamexx 오브젝트 아래에 묶여있는 것을 볼 수 있다. 에이전트 에서 가장 유심히 봐야할 것은 Agent 컴포넌트이다. Brain속성은 은 에이전트에서 사용하는 브레인을 지정한다. 현재 Ball3DBrain 객체를 사용하도록 지정되어 있다. Agent Cameras 속성은 에이전트에 카메라를 설치해서 이미지를 입력으로 처리할 수 있는 기능을 지원한다. 현재는 Vector Observation을 사용하기 때문에 카메라를 추가하지 않는다. Max Step은 학습을 진행할 횟수를 지정한다. 5000이 지정되어 있어 5000회 학습을 진행해야 하지만 Academy에서 Max Step이 0으로 지정되어 있기 때문에 상위..
11. ML Agents 기본 예제 - Ball3DBrain 분석 Ball3DBrain Ball3DBrain 객체에서 중요한 부분은 역시 Brain 컴포넌트 설정 부분이다. Vector Observation 속성 중 Space Size는 몇 개의 변수를 수집할 지 지정하는 부분이다. 여기에서 지정된 숫자와 Ball3DAgent 클래스의 CollectObservations 함수에서 브레인으로 전달하기 위한 관찰 값을 저장하고 있는 AgentInfo(AddVectorObs 함수에 인자로 들어가는 값은 내부적으로 AgentInfo 구조체에 저장)에 들어가는 변수의 개수가 일치해야 한다. Stacked Vectors는 브레인으로 전달하기 위한 변수 세트 크기를 지정한다. 이 값이 2이 지정되어 있다면 2세트 모두 16개(8x2)의 변수가 브레인으로 한번에 전달된다는 의미이다...
10. ML Agents 기본 예제 - Ball3DAcademy 분석 Ball3DAcademy 아카데미 아카데미는 유니티 씬에 있는 모든 에이전트와 브레인을 조율하는 역할을 한다. 3DBall에 사용된 Ball3DAcademy를 분석하면서 아카데미의 기능에 대해 알아보자. 계층 뷰에서 Ball3Dacademy객체를 선택하면 인스펙터 뷰에서 상세 내용을 볼 수 있는데 여기에서 주의 깊게 봐야할 것이 어떤 스크립트를 사용하는 지와 Max Steps 속성이다. 아카데미의 동작을 정의하는 스크립트에는 Ball3DAcademy를 정의해서 사용했다. 스크립트를 더블 클릭하면 데이터 찾에서 코드를 확인 할 수 있다. Max Steps 속성은 아카데미에서 몇 번 학습할 지 정의한다. 1000으로 설정하면 학습을 모두 1000번 진행하고 종료한다. 0으로 설정하면 강제로 학습을 종료할 때..
9. ML Agents 기본 예제 - 학습 환경 분석 유니티 게임 구조 3DBall의 구성을 먼저 살펴보자. Ball3DAcademy 한 개와 Ball3DBrain 한 개를 사용했다. 에이전트를 생성하기 위해 빈 객체(Empty Object)를 만들고 그 아래 Platform, Plane 그리고 Ball을 자식 객체로 넣었다. 빈 객체 이름을 Game으로 하고 프리팹을 생성하고 모두 12개를 복사했다. 프로젝트 에셋은 Materials, Prefabs, Scenes, Scripts 그리고 TFModels로 구성된다. 이와 같은 폴더 구조는 다른 ML 에이전트 프로그램에도 유사하게 적용된다. 여기에서 새로 나온 것이 TFModels인데 여기에는 학습된 모델이 저장된다. ML 에이전트 학습 구성도 ML 에이전트 학습 기본 구성은 에이전트, 브레인, 아카데미이다..
8. ML Agents 기본 예제 - 모델 활용 ML 에이전트 학습된 모델 활용 결과가 저장된 폴더를 보면 확장자가 bytes인 파일이 있다. 모델 학습 결과는 bytes 파일에 저장된다. 유니티에서 학습된 모델을 활용하기 위해서는 bytes 파일을 유니티 프로젝트 뷰 TFModels 폴더에 드래그 앤 드랍 하면 된다. 이제 모델을 브레인과 연결시켜야 한다. 먼저 계층 뷰에서 Ball3DBrain을 선택한 다음에 Brain Type을 Internal로 변경하고 Graph Model 항목에 학습된 모델(bytes 파일)을 끌어다 놓으면 된다. 이제 플레이 버튼을 눌러 게임이 잘 동작하는지 살펴보자. 모델이 충분히 학습되고 설정이 잘 됐다면 공이 바닥으로 떨어지지 않을 것이다.
7. ML Agents 기본 예제 - 학습 브레인 타입 변경 3DBall 게임을 강화학습을 통해 훈련하는 방법에 대해 알아보자. 학습하기 위해 많은 작업이 선행되어야 하지만 이미 유니티에서 준비를 다 해놨기 때문에 브레인 타입만 변경해서 학습을 하도록 하겠다. 먼저 앞에서 설정한 브레인 타입을 External로 변경하자. ML 에이전트 실행 강화학습을 진행하기 위해서는 먼저 ML 에이전트를 띄워야 한다. 앞에서 설치한 아나콘다에서 ml-agents 실행 환경을 활성화 시키고 ML 에이전트 관련 파일이 저장된 C:\ml-agents-master 디렉토리로 이동한다. 실제로 디렉토리를 이동하지 않고 학습과 관련된 메타 정보를 가지고 있는 trainer_config.yaml 파일의 경로만 잘 지정하면 되지만 ML 에이전트와 관련된 모든 작업을 하나의 ..
6. ML Agents 기본 예제 - 실행 하기 3DBall 열기 프로젝트 뷰에서 다음 경로 Assets > ML-Agents > Examples > 3DBall > Scenes 에 있는 Scenes 폴더를 선택하면 3DBall 씬 파일을 확인할 수 있다. 파일을 열면 계층 뷰와 씬 뷰에 3DBall 관련 내용이 나오는 것을 확인할 수 있다. 3DBall 실행 플레이 버튼을 눌러 프로그램을 실행해 보자. 공을 그대로 바닥으로 떨어트려 게임이 계속 다시 시작하는 것을 확인해보자. 평면(Plane)을 조정해서 공이 떨어지지 않도록 해야 하는데 사용자가 12개의 평면을 모두 조절한다는 것은 불가능에 가깝다. 이제 평면에 지능을 부여해서 공을 어떻게 컨트롤하는지 살펴보자. 여기에서는 미리 학습된 모델을 사용해보도록 한다. 프로젝트 뷰에서 Ball3DAcade..