게임 AI를 연구하거나 강화학습을 활용하고 싶다면 Unity ML-Agents는 훌륭한 선택입니다. 이 라이브러리는 Python과 Unity를 연동하여 AI 모델을 학습하고, 게임 환경에서 적용할 수 있도록 도와줍니다.
이번 글에서는 Python과 Unity ML-Agents 연동 방법을 단계별로 살펴보고, 기본적인 AI 모델을 훈련하는 방법을 알아보겠습니다.
Unity ML-Agents란?
Unity ML-Agents(Machine Learning Agents)는 Unity에서 강화학습(Reinforcement Learning)을 수행할 수 있도록 지원하는 오픈소스 라이브러리입니다. 이 라이브러리를 사용하면 Unity 환경에서 AI를 훈련하고, 학습된 모델을 게임이나 시뮬레이션에 적용할 수 있습니다.
🎯 ML-Agents의 주요 기능
- 강화학습(RL): 에이전트가 환경과 상호작용하며 학습
- 모방학습(Behavior Cloning): 인간 플레이어의 데이터를 기반으로 AI 훈련
- 커스텀 환경 구축: Unity 내에서 자유롭게 AI 환경 설계 가능
- Python 연동: TensorFlow 및 PyTorch를 활용한 AI 모델 훈련
1. ML-Agents 설치 및 설정
ML-Agents를 사용하려면 Python 환경과 Unity 환경을 설정해야 합니다.
1.1 Unity 프로젝트 생성 및 ML-Agents 설치
- Unity Hub에서 새로운 3D 프로젝트 생성
- Unity 버전: 2021.3 LTS 또는 그 이상 추천
- 3D 환경에서 AI를 훈련할 것이므로 3D 템플릿 선택
- ML-Agents 패키지 설치
- Unity Package Manager에서 ML-Agents 추가
- Window > Package Manager에서 "com.unity.ml-agents" 검색 후 설치
1.2 Python 환경 설정
Python을 통해 Unity와 연동하려면 mlagents 라이브러리를 설치해야 합니다.
pip install mlagents
설치 후, 올바르게 설치되었는지 확인:
import mlagents
print(mlagents.__version__)
2. Unity ML-Agents 기본 구조 이해하기
🔹 ML-Agents의 주요 구성 요소
- 환경(Environment): Unity에서 AI가 학습할 가상 환경
- 에이전트(Agent): 환경 내에서 학습하는 AI 모델
- 브레인(Brain): 정책(Policy)을 결정하는 AI 모델
- 행동(Action) & 보상(Reward): AI가 행동을 수행하고 보상을 받는 시스템
3. Unity에서 간단한 AI 환경 만들기
3.1 AI 캐릭터(Agent) 만들기
- 새로운 Capsule(에이전트) 생성
- GameObject > 3D Object > Capsule 추가
- Agent라는 이름으로 변경
- Rigidbody 추가
- Inspector에서 Rigidbody 컴포넌트 추가
- Use Gravity 체크 해제 (공중에 떠 있는 경우)
- ML-Agents 컴포넌트 추가
- Agent 오브젝트에 Behavior Parameters 컴포넌트 추가
- 행동 유형(Action Type): Continuous
- 결정 빈도(Decision Frequency): 5
3.2 Python으로 ML-Agents 학습 스크립트 작성
이제 Python을 활용하여 AI를 학습시키는 기본 코드를 작성해보겠습니다.
예시 : 학습 스크립트 (train.py)
from mlagents_envs.environment import UnityEnvironment
# Unity 환경 로드
env_path = "build/AI_Training" # 빌드된 Unity 실행 파일 경로
env = UnityEnvironment(file_name=env_path)
# 환경 시작
env.reset()
# 행동 요청 및 보상 확인
for episode in range(10): # 10 에피소드 학습
decision_steps, terminal_steps = env.get_steps("AgentGroup")
# 랜덤 행동 적용
actions = decision_steps.agent_id # 현재 활성화된 Agent ID
action_values = [[0.1, -0.1] for _ in actions] # 예시 행동값
env.set_actions("AgentGroup", action_values)
env.step() # 한 스텝 진행
env.close()
print("훈련 종료!")
🔹 코드 설명
- Unity 환경을 로드하고, AI 학습을 위한 기본적인 행동(Action)을 수행합니다.
- env.get_steps("AgentGroup"): 현재 상태(Observation) 가져오기
- env.set_actions("AgentGroup", action_values): 행동 적용
- env.step(): 한 스텝 진행
4. AI 모델 훈련 및 적용
4.1 학습 진행
이제 AI를 학습시켜봅시다. Unity 프로젝트 내의 config.yaml을 설정한 후, 터미널에서 학습을 실행합니다.
mlagents-learn config/training_config.yaml --run-id=MyTraining --train
이제 Unity에서 AI가 학습하는 모습을 확인할 수 있습니다.
4.2 학습된 모델 불러오기
훈련이 끝나면, Unity에서 모델을 적용할 수 있습니다.
- Assets > ML-Agents > Models 폴더에 .onnx 모델 파일을 복사
- Unity의 Agent 오브젝트에 Behavior Parameters 설정에서 모델 불러오기
- Unity에서 플레이 버튼을 눌러 훈련된 AI 실행
5. 강화학습 보상 시스템 설정
강화학습의 핵심은 보상 시스템입니다. AI가 원하는 목표를 향해 학습하려면 올바른 보상을 제공해야 합니다.
using Unity.MLAgents;
using Unity.MLAgents.Sensors;
using Unity.MLAgents.Actuators;
public class AI_Agent : Agent
{
public override void OnEpisodeBegin()
{
transform.position = new Vector3(0, 0, 0); // 에이전트 위치 초기화
}
public override void CollectObservations(VectorSensor sensor)
{
sensor.AddObservation(transform.position); // 현재 위치 입력
}
public override void OnActionReceived(ActionBuffers actions)
{
float moveX = actions.ContinuousActions[0];
float moveZ = actions.ContinuousActions[1];
transform.position += new Vector3(moveX, 0, moveZ) * Time.deltaTime;
// 목표에 도달하면 보상 부여
if (transform.position.x > 5)
{
SetReward(1.0f);
EndEpisode();
}
}
}
이제 AI는 오른쪽으로 이동하는 것이 보상이 크다는 것을 학습하게 됩니다.
Unity ML-Agents를 활용하면 Python과 Unity를 연동하여 강력한 AI 모델을 학습하고 적용할 수 있습니다.
이번 글에서 다룬 내용을 정리하면:
✅ Python과 Unity ML-Agents 연동
✅ 간단한 AI 학습 환경 구축
✅ 강화학습을 위한 행동 및 보상 시스템 적용
'Programming > Unity_Engine' 카테고리의 다른 글
유니티와 언리얼의 비교: 초보부터 전문가까지 알아야 할 차이점 (2) | 2024.12.30 |
---|---|
Unity 다운로드 및 설치 - Unity Hub 사용 (1) | 2023.12.16 |