언리얼 강화학습 플러그인
언리얼에서 강화학습을 이용한 실험환경을 세팅하려고 한다. 언리얼에 ML과 관련된 플러그인들이 몇 가지 있던데 구체적으로 어떤 것을 RL을 위해서 사용할 수 있는지 알아보려고 한다.
Unreal ML Deformer
언리얼에서 공식적으로 지원하는 ML deformer가 있다.
이는 mesh deformation을 하는데 사용되기도 하고, 애니메이션 변형이나 생성에 사용되기도 한다.
하지만 이는 machine learning이지 reinforcement learning이 아니다.
RL 강화학습을 할 수 있는 플러그인을 탐색해보도록 한다.
Deep Reinforcement Learning for Unreal
https://docs.isaratech.com/ue4-plugins/drl-unreal
위 사이트에서 언리얼에서의 강화학습을 다루기에 살펴보았다.
언리얼과 DRL(Deep Reinforcement Learning)사이에 통신을 위한 bridge가 필요한데, 일반적으로 TCP connection을 활용한다고 한다.
bridge라, 무슨 뜻인지는 알겠는데 감이 확 잡히지는 않는다.
결국 언리얼 엔진 안에서 연산이 이루어지는게 아니라, 외부 프레임워크에 언리얼 시뮬레이션 과정을 통신으로 전달하면서 프로세싱한다는 뜻으로 들린다.
unity의 ml-agents처럼 잘 포팅되어있는게 아니고서야, 언리얼에서 가능한 RL은 python으로 구성되어있어서, python side로 넘어갈 때의 중간 bridge가 필요한 모양이다.
구조를 보니 bridge는 python gym안에 있는 구조였다. learning algorithm에 들어가기 전에 여기를 거쳐서 프로세싱 하는 것 같다.
pseudocode
If(AIInput.Reset)
Reset()
EnvironmentState.State = GetState()
SendInfoToPython(EnvironmentState)
Return
PerformAction()
EnvironmentState.State = GetState()
EnvironmentState.Reward = GetReward()
EnvironmentState.bIsDone = IsDone()
SendInfoToPython(EnvironmentState)
Return
원문 작성자가 제공한 의사코드이다.
초기화 하는 경우를 제외하면,
action을 취하고 / state와 보상을 업데이트하고 / python으로 보내서 learning을 돌린다.
일반적인 강화학습과 같은 절차이다.
함수마다는 다음과 같은 역할을 한다.
- GetState: 호출 시 환경의 상태를 제공하며, 1차원 float 배열을 반환합니다.
- IsDone: 현재 상태가 에피소드의 종료인지 나타냅니다.
- GetReward: 현재 상태에 대한 보상을 제공합니다.
- Reset: 환경을 초기화하고 새 에피소드를 시작할 준비를 합니다.
- PerformAction: AI가 결정한 행동을 환경에서 수행합니다.
EnvironmentState에서는 state와 reward, is done의 값을 매번 설정해주어야하며,
python이 제공하는 action은 AIInput에 있다.
AI server에 대한 인스턴스가 별도로 존재하고,
actor가 동작하는환경 Environment도 인스턴스로 존재한다.
아무래도 blueprint를 언급하는 것을 보니 추가적으로 플러그인이 필요한 건 아니고
자체적으로 지원하는 blueprint node가 있어서 이걸로 python에 연결해서 사용할 수 있는 건가?
오른쪽은 unreal과 연결하는 포트를 오픈하는 python 스크립트이다.
읽다보니 이 document 사이트가 뭔가 이상해서 봤는데,
해당 document에서 소개하는 플러그인은 자체적으로 제작하여 배포한 unreal 플러그인이었고,
RL관련 플러그인은 coming soon 상태였다...
그만 알아보도록 하자.
Unreal Engine tutorial : Learning to Drive
언리얼 공식 문서에서 제공하는 강화학습 기반 운전 학습 자료가 있다.
'개발 · 컴퓨터공학' 카테고리의 다른 글
FLEX github코드 세팅하기 - 2 (FLEX: Full-Body Grasping Without Full-Body Grasps) (16) | 2024.09.16 |
---|---|
FLEX github코드 세팅하기 - 1 (FLEX: Full-Body Grasping Without Full-Body Grasps) (14) | 2024.09.15 |
Visual Studio opengl32.lib 파일을 열 수 없습니다 오류 (0) | 2024.08.21 |
파이썬 알고리즘 입문 · 초보를 위한 python 입력 출력 방식 정리, 반복문 (0) | 2024.07.28 |
취업 취준 코딩테스트 준비! 자주 나오는 유형 알아보기 (기업 코테) (18) | 2024.07.23 |