유니티 머신러닝 개발 ML Agents 최신 버전 학습 예제 실행
유니티에서는 ml-agent 패키지를 사용하는 머신러닝을 지원한다. 아래에 소개하는 ml-agent 패키지는 꾸준히 버전 관리가 되고 있는 깃허브 레포지토리이다.
https://github.com/Unity-Technologies/ml-agents/releases
이 중에 가장 최신 (2023.01 기준) 버전은 릴리즈20 이다.
ml-agent release 20과 호환되는 유니티, 파이썬, 파이토치 버전은 다음과 같다. 최소 보장되는 버전이므로, 더 오래된(버전 넘버링이 낮은) 버전을 사용하지만 않으면 된다.
| ml-agent release 20 | ||
|---|---|---|
| 호환되는 최소 버전 | Unity | 2021.3 |
| Python | 3.8.13 | |
| Pytorch | 1.8.0 |
일단 아래 문서들을 열어두자.
유니티 매뉴얼: https://docs.unity3d.com/2021.3/Documentation/Manual/pack-safe.html ML-agent 공식문서: https://github.com/Unity-Technologies/ml-agents/tree/release_20_docs/docs ML-agent 공식 예제 문서: https://github.com/Unity-Technologies/ml-agents/blob/release_20_docs/docs/Learning-Environment-Examples.md
Release20의 다운로드 링크는 다음과 같다. https://github.com/Unity-Technologies/ml-agents/archive/refs/tags/release_20.zip 다운로드 받아서 압축을 풀어준다. 용량은 약 110MB이다.
유니티에서 2021.3 버전으로 프로젝트를 생성한다.
다음과 같이 프로젝트 내 메뉴에서 window - 'Package Manager' - 'Add package from disk'를 눌러서 package라는 파일을 열어주면 된다.
“ml-agents-release_20/com.unity.ml-agents/package”를 추가한다.
extensions폴더 내에 있는 package도 설치해주어야 한다. “ml-agents-release_20/com.unity.ml-agents.extensions/package”를 추가한다.
유니티 ML agent v2.3.0 최신 버전 설치가 끝났다. 2023.01기준, 가장 최신 버전을 설치한 것이므로 아래와 같이 'Experimental Packages In Use'라는 주의 문구가 떠있다. 주의일 뿐이고, 문제가 반드시 발생한다는 의미는 아니이다. 이제 잘 작동하는지 테스트해보자.
테스트를 위해 예제 파일을 에셋에 추가한다. 알집을 풀었던 경로의 'Project/Assets/ML-Agents' 폴더를 유니티 프로젝트 내의 Assets에 드래그앤드롭 해서 넣어주자.
콘솔 창에 다음과 같은 에러 메시지가 발생한다. InputAction 네임스페이스를 찾을 수 없다는 메시지이다.
Assets\ML-Agents\Examples\PushBlockWithInput\Scripts\PushBlockActions.The type or namespace name 'InputAction' could not be found
구글에 찾아보니 ml-agents-release_19 버전부터 있었던 에러인 것 같다. 패키지 두 개를 잘 설치했는지 돌아보고, 잘 설치했다면 그 다음으로는 'ML-Agents/Examples/PushBlockWithInput' 폴더를 삭제해야 한다.
아래와 같이 콘솔 창에 뜨던 에러 메시지가 사라졌다.
에러 해결 참고: https://github.com/Unity-Technologies/ml-agents/issues/5752
실행해볼 예제는 '던전 탈출(DungeonEscape)'이다. 아래 경로의 scene을 드래그앤드롭으로 'Hierarchy'에 넣어준다.
'DungeonEscape' Scene을 열어보면, 동시에 교육에 기여할 수 있는 12개의 에이전트 환경이 포함되어 있다.
일단 간단히 테스트만 하려 하므로, 한 개를 제외한 나머지는 비활성화를 해주자.
플레이를 시작하기 전에, 간단히 게임 설명을 하겠다.
던전 탈출 게임 in Unity3D
| Dungeon Escape설정: 요원들이 드래곤과 함게 던전에 갇히고 함께 탈출해야 한다. 열쇠를 찾기 위해 요원 중 한 명이 희생하면서 드래곤을 찾아 죽여야 한다. 드래곤이 죽으면 다른 요원들이 사용할 수 있는 열쇠를 떨어뜨릴 것이고, 그러면 다른 요원이 이 열쇠를 집어 들고 던전 문을 열 수 있다. 만일 드래곤을 정해진 시간 안에 처치하지 못한다면 드래곤은 포털을 통해 탈출하고 환경이 재설정된다. | |
|---|---|
| Goal | 던전 문을 열고 나가기. |
| Agent | Multi-agent 그룹의 요원 3명 |
| Agent Reward Function | 요원이 성공적으로 문을 열고 던전을 나가면 +1 |
| Behavior Parameters | Observation space: 벽, 다른 요원, 열쇠, 문, 용, 용의 포탈 등에 대한 태그가 있는 광선 인식 센서.요원이 키를 보유하고 있는지 여부를 나타내는 단일 벡터 공간.Actions: 7개 Descrete 액션.(시계/반시계 방향) 회전, (위/오른쪽/왼쪽/아래 방향) 이동, 가만히 있기. |
| Benchmark Mean Reward | 밴치마크 성능 1.0 |
[영상]
깃허브에 올려두었다. https://github.com/southglory/Unity_ml-Agent_DungeonEscape.git
https://gdev.tistory.com/1 https://youtu.be/zPFU30tbyKs https://youtu.be/axF_nHHchFQ
#유니티 #unity #ML-agent #최신버전 #던전탈출




















