본문 바로가기

프로그래밍/Unity-ML

Unity-ML 카메라 환경

Unity-ML의 경우 환경 수집할 때 벡터 뿐 아니라 비주얼(카메라) 환경도 수집 가능하다.

비주얼 환경 수집은 개발자가 환경을 따로 설정 안해줘도 되기 때문에 편리하지만, 그만큼 학습이 제대로 안될 확률과 학습의 시간이 증가한다.

비주얼 학습은 CNN 알고리즘을 이용하여 학습을 진행하는데 이는 이미지의 특징점을 이용하는 방법이다.

참고: https://hamait.tistory.com/535

 

[번역] 딥러닝 (CNN) 직관적 이해 - (1)

평소 무엇인가를 쉽게 설명하는 능력이 있다고 생각해서 , CNN (convolutional neural network) 도 그렇게 해볼까 했는데 역시 무리. 쉽게 설명한다는것은 그것에 대해 확실한 이해를 가지고 있다고 생각될때 가능..

hamait.tistory.com

참고2: https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Learning-Environment-Design-Agents.md

 

Unity-Technologies/ml-agents

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

github.com

비주얼 환경수집을 통해서 환경을 수집할 때 2가지 방법이 있다.

카메라, 랜더 텍스쳐

3가지만 설정하면 비주얼 학습을 할 수 있다.

1. 카메라 설정

2. 에이전트 설정

3. 브레인 설정

 

저번에 했던 예제를 수정해서 진행하기로 했다. 예제는 4개의 큐브 중 하나가 랜덤으로 타깃으로 지정되어 크기가 2배로 커진다. 학습의 목표는 플레이어 구를 타깃이 된 큐브를 찾아가는 것이다.

이제 이 예제를 비주얼 학습으로 수정해보자.

 

1. 카메라 설정

먼저 카메라를 설정해야 한다. 현재 구현 된 것은 카메라가 총 3대로 메인카메라, 비디오 레코드 카메라, 에이전트 카메라이다.

에이전트 카메라는 에이전트의 학습 환경이 될 카메라이다. 이번에는 랜더텍스쳐를 이용해서 ML를 구현했다. 랜더텍스쳐는 카메라에서 랜더된 이미지를 이용하기 때문에 랜더할 때 여러 조건을 걸어 학습할 내용을 줄일 수 있다.

사이즈를 줄여 학습할 것을 줄임

2. 에이전트 설정

에이전트에 환경을 넣을 수 있는 카메라와, 랜더텍스쳐 부분에 해당하는 카메라 또는 랜더텍스쳐를 추가한다.

    // 카메라 랜더 관련
    public void FixedUpdate()
    {
        WaitTimeInference();
    }

    private void WaitTimeInference()
    {
        if (renderCamera != null)
        {
            renderCamera.Render();
        }

        if (!academy.GetIsInference())
        {
            RequestDecision();
        }
        else
        {
            if (timeSinceDecision >= timeBetweenDecisionsAtInference)
            {
                timeSinceDecision = 0f;
                RequestDecision();
            }
            else
            {
                timeSinceDecision += Time.fixedDeltaTime;
            }
        }
    }

해당하는 카메라 랜더 코드는 카메라텍스쳐의 경우 텍스쳐를 이용해서 학습해야하기 때문에 FixedUpdate()를 에서 카메라를 랜더 시키고 랜더한 화면을 이용해서 RequestDecision(); => 브레인에 결정을 요청하는 함수를 호출한다.

3. 브레인 설정

마지막으로 브레인을 설정한다. 이번엔 벡터 환경수집은 하지 않을 것이기 때문에 0으로 하고 비주얼 환경을 추가한다. 사이즈와 흑백 여부를 확인한다.

 

이제 준비가 끝났으니 학습을 해보도록 하겠다.

 학습시작

 

학습종료

학습이 되면 완벽하게 목표를 찾아가는 모습을 볼 수 있다.

'프로그래밍 > Unity-ML' 카테고리의 다른 글

Unity-ML의 구조  (0) 2019.10.01
Unity-ML 비디오 레코더  (0) 2019.09.26
Unity-ML 강화학습 테스트 및 수정  (0) 2019.09.18
Unity-ML 강화학습 예제 작성  (0) 2019.09.18
UNITY-ML 설치 및 세팅  (1) 2019.09.18