★ 특정 문자가 들어간 쿼리 찾기 ★
SELECT       *  FROM 
      INFORMATION_SCHEMA.ROUTINES 
WHERE 
      ROUTINE_DEFINITION LIKE '%Admin%' 
ORDER BY ROUTINE_NAME;

★ 개요 ★

안드로이드 블루투스 키보드 삽질을 정리하기 위함


★ 내용 ★

-1. Android Keyboard 가 블루투스 한/영 전환을 지원하지 않는다면 영어 입력이 안될수 있다

-2. 디폴트 언어를 영어로 하고 입력하면 블루투스 키보드 입력이 정상 동작한다

-3. 해외 구글에는 내용이 별로 없다. (영어 Keyboard 니까.. 하...)



★ 개요 ★

유니티 ML 모방학습에 관하여 정리하기 위함

관련 내용 : https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Training-Imitation-Learning.md


★ 내용 ★

-1. 선생님 Brain 과 학생 Brain 을 따로 만든다

-2. 선생님 Brain Type : Player, 학생 Brain Type : External 설정

-3. 선생님 Agent, 학생 Agent 를 만들고 각각 Brain 을 설정한다


-4. config/trainer_config.yaml 파일에서 모방학습을 위한  설정을 한다

- Key : Brain 이름

- trainer : imitation(모방 뜻)

- brain_to_imitate : TeacherBrain(모방 할 두뇌 입력)



-5. trainning 을 시작하고 Student Brain 이 원하는 행동을 보이면 ctrl + c 로 교육을 종료한다


★ 개요 ★

유니티 ML 기능을 정리하기 위함


★ 유니티 강화학습

-1. 환경을 관찰하고, 적절한 보상을 통해 옳바른 행동을 하도록 강화 학습 한다

-2. 환경 관찰 : Observation 기능

-3. 보상 : 옳바른 결정을 하면 높은 보상을, 안좋은 행동을 하면 - 보상을 주어서 보상이 높은 행동을 하게 한다

-4. PPO(Proximal Policy Optimization) : ML-Agent 는 PPO 라는 강화 학습을 사용한다

(PPO 기능은 TensorFlow 에서 정의한 알고리즘을 사용하고, 별도의 Python 프로세스에서 실행된다)



★ 유니티 ML-Agent 프로세스 순서 ★

- ML-Acamemy Loop 순서 -

-1. Academy 초기화 : AcademyReset() 함수 호출

-2. Agent 초기화 : AgentReset() 함수 호출

-3. 환경 관찰 정보 수집 : 각각의 Agent의 CollectObservations() 함수 호출

-4. Brain 다음 행동 결정 : 각각의 Brain 들이 Agent 다음 행동으로 무엇을 할 것인지 결정한다

-5. AcademyStep() 함수 호출

-6. Brain 이 결정한 다음 행동 수행 : AgentAction() 함수 호출

-7. Agent 종료 체크 : AgentOnDone() 함수 호출. 

(1) Agent 가 MaxStep 에 도달한 경우

(2) Agent 함수 내부에서 Done() 함수를 호출 한 경우


-8. Academy Reset : Academy 가 Max Step 에 도달한 경우 다음 episode 를 수행한다




★ ML-Agent 유니티 Scene 구조도 ★

-1. Academy : Scene 에는 오직 하나의 Academy 가 존재해야 한다

-2. Brain : Academy 자식으로 하나 이상의 Brain 이 존재해야 한다

-3. Agent : 작업을 수행하는 Agent 들이 존재한다



★ Academy ★

-1. Agent 의 의사 결정 프로세스를 조정

-2. InitializeAcademy() : Academy 초기화

-3. AcademyReset() : 다음 Training Episode 를 준비

-4. AcademyStep() : 다음 Simulation Step 을 준비



★ Brain ★

-1. Brain 은 Academy 의 자식으로 있어야 한다

-2. 모든 Agent 는 Brain 을 할당받아야 한다

-3. External : 외부 Tool 을 사용해 강화학습 모델을 만든다

-4. Internal : External 로 만든 모델을 사용하여 ML-Agent 를 수행한다



★ Agent ★

-1. 환경 정보를 수집한다

-2. 모든 Agent 는 Brain 을 할당 받아야 한다

-3. CollectObservations() : 환경 정보를 수집

-4. AgentAction() : Brain 이 결정한 행동을 수행한다




★ 모범적인 환경 구성 - 보상 

-1. 옳바른 행동 : 1.0 이상의 보상을 주는것이 좋다

-2. 작은 긍적 행동 보상 : 0.1 정도가 좋다

-3. 빠른 시간에 해결해야하는 문제 : 매 Frame -0.05 의 보상을 주는것이 좋다

-4. 너무 큰 부정적 보상 : 안좋은 행동으로 이어질 수 있다




★ 모범적인 환경 구성 - 벡터 관측 

-1. 최적의 결정을 내리는데 필요한 모든 변수를 포함해야 한다

-2. -1 ~ 1 사이의 값으로 변환하여 관찰해야 한다

-3. AgentAction 의 값들은 -1 ~ 1사이의 값들로 들어온다




★ 실시간 모니터 로그 확인

-1. Academy 에 Monitor 초기화



-2. Log 찍기

- value : -1 ~ 1사이의 값으로, 빨간색 : -값, 초록색 : +값으로 표시된다


-3. 결과




★ 개요 ★

트레이닝 학습 AI(강화 학습 AI) 를 직접 만들어보기 위함

참고 : https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Learning-Environment-Create-New.md



★ AI 강화학습 기본 환경 세팅 순서 ★

-1. ML-Agents 가 포함된 프로젝트 생성


-2. 새로운 Scene 만들기


-3. 바닥 만들기

-4. 타겟 큐브 만들기

-5. Agent 구 만들기



-6. 빈 오브젝트로 -> Arcademy 와 Brain 만들기

(Brain 은 Arcademy 의 자식으로)


-7. Academy 클래스 상속받아 RollerAcademy GameObject 에 붙이기

(Academy 에 다른 기능은 추가하지 않아도 된다)






-8. Brain 클래스 그냥 Brain Obejct 에 붙이기




-9. RollerAgent : Agent 클래스 상솓받는 클래스 만들기




★ AI 강화학습 함수 만들기 : Agent 초기화 및 Agent Reset ★

-1. 바닥에 떨어질때 초기화 처리
-2. 타겟에 도착했을때 초기화 처리




★ AI 강화학습 함수 만들기 : 환경 관찰(Observation) ★

Agent 는 Observation 정보를 Brain 에게 보낸다

-1. 타겟과 Agent 사이의 x, z 위치
-2. 플랫폼의 Edge 위치
-3. RigidBody 속도



- 위의 관찰 Vector 의 수 8개 이므로 Brain 세팅도 8개로 해주어야 함






★ AI 강화학습 함수 만들기 : Agent Action 함수 ★

- Action -

2개의 액션 세팅

Brain Type External Action 값 : Action 함수의 Vector 값은 : -1 ~ 1사이 값으로 넘어온다

Brain Type Player Action : Acton 함수의 값은 키입력에 따라 값이 넘어온다


- 코드 -


- Brain -


- 액션 -

Brain Type : Player


- Reward (보상) -

-1. 떨어질때 -

-2. 시간 지날때 -

-3. 타겟 도착시 +



- Action 총 코드 -



★ AI 테스트 ★

BrainType : Player

키보드 세팅 : Action 2개 플레이

테스트 해보기




★ AI External 강화 학습 - Brain Type : External ★
















★ 개요 ★

3DBall Scene 을 이용해 강화 학습을 공부하기 위함




★ Arcademy ★


- Training Configuration -

교육을 하는동안 사용되는 Properties 이다 (External)


- Inference Configuration -

(1) 교육을 진행하지 않을때 사용되는 Properties 이다

(2) 교육된 모델을 사용하거나(Internal), heuristic 을 사용할때




★ Brain - 뇌 ★


(1) Arcademy 의 자식으로 있어야 한다

(2) Brain 은 Agent 에 관한 어떠한 정보도 저장하지 않는다

(3) Agent 가 어떤 Action 을 할지 결정한다


- Brain Type -

External : Agent 를 Training 할때 사용된다

Internal : Training 된 모델을 사용할때 사용된다

Heuristic : 손 코딩

Player : 키보드 커맨드


- Vector Action Space -

Cotinuous 

(1) 연속적으로 변할 수 있는 벡터의 수

(2) 벡터의 각 요소는 Agent Logic 에 의해 정의된다 (ex) 강화훈련에 사용된 Rigidbody 의 힘이거나 다른 것을 나타낼 수 있다

(3) Agent Logic : 강화 훈련 프로세스는 다른 값을 시도할 때 받은 보상을 기준으로 특정 상태를 관찰하여. 어떤 값이 더 나은지를 학습한다


Discrete

(1) 테이블과의 작업을 정의

(2) Agent 에 주어진 작업은 테이블에 대한 인덱스 배열이다

 



★ Agent ★

: 환경에서 관찰하고 행동하는 행위자이다


Brain : 모든 Agent 는 Brain 을 가지고 있어야 한다

Agent Cameras : 환경을 관찰하는 카메라를 세팅 (해당 예제에서는 사용하지 않는다)

Max Step : 에이전트가 완료하기 전까지 수행할 Step 수

Reset On Done : 에이전트가 완료될 때 다시 시작할지 여부를 정의 

(ex) 해당 예제에서는 공이 떨어지거나 Agent 가 완료되면 다시 시작





★ Training thr Brain with Reinforcement Learning : 강화 학습을 통한 Brain 학습 ★


순서 1. cmd 창에서 mlagents-learn 입력



순서 2. Unity 트레이닝할 Brain Type External 설정



순서 3. cmd 창에 mlagents-learn 명령어 입력

mlagents-learn config/trainer_config.yaml --run-id=firstRun --train )



순서 4. Unity Player 버튼 실행




★ 강화 학습 관찰 ★

(1) ml -agents 디렉토리에서 cmd 창에 tensorboard --logdir=summaries 입력

(2) 브라우저 http://DESKTOP-OR3TBRR:6006 으로 이동





Cumulative Reward : 보상 누적, 효율적인 트레이닝이라면 시간이 지날수록 상승해야한다

Entropy : 모델의 결정이 얼마나 무작위적인가. 느리게 감소하는게 좋다

Episode Length : 모든 에이전트의 테스트 길이

Learning Rate : 학습 알고리즘이 최적의 정책을 검색할 때 걸리는 크기. 시간이 지남에 따라 감소해야 한다

Policy Loss : 정책 기능의 평균 손실. 훈련 기간이 지날수록 감소해야 한다

Value Estimate : 가치 추정치로. 모든 상태를 방문한 시간이다. 훈련 기간이 지날수록 증가해야 한다

Value Loss : 값 함수 업데이트의 평균 손실. 훈련 기간이 지날수록 감소해야 한다


★ 1. ML 기본 설치 ★

-1. ML-Agents 프로젝트 다운로드(Git-Hub) 

https://github.com/Unity-Technologies/ml-agents 


-2. TensorFlowSharp Plugin 다운로드 

https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Basic-Guide.md (TensorFlowSharp Plugin)




-3. 파이썬 설치 

https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Installation-Windows.md



-4. Anaconda Prompt 에서 -> Pip install . 으로 필요한 나머지 모듈 설치

- Setup.py 파일이 있는 폴더에서 수행




-5. cmd 창에서 mlagents-learn 이 동작하면 잘 설치된 것이다





★ 2. ML Unity 설정 ★

-1. Target Platform 변경 

-> PC, Mac, Lunux, IOS, Android


-2. Scripting Runtime Version to Experimatanl 

-> .NET4.6 Equivalent or .NET 4.xEquivalent


-3. Dfine Symbole 추가 : ENABLE_ENSORFLOW





★ 3. Brain - Internal 체험 ★

미리 트레이닝 된 훈련 모델 활용하여 행동 결정


-1. 3DBall Scene 에서 Brain Type Internal 변경


-2. 트레이닝된 훈련 모델 세팅







★ 4. Brain - External 체험 ★

- 강화 훈련을 통한 트레이닝


-1. Brain Type External 세팅

- Agent 가 결정을할때 외부 트레이닝 프로세스와 통신하여 결정한다


-2. Training(트레이닝) 환경 구축

-(1) 유니티 시작

-(2) Brain Type External 변 : 경3DBall Scene 에서 Brain Type External 변경

-(3) mlagents-learn 명령어 : cmd 창에서 mlagents-learn 명령어 입력

mlagents-learn config/trainer_config.yaml --run-id=firstRun --train )

-(4) 유니티 플레이 버튼 시작

- 해당 메시지가 나오면 

- 테스트 시작


-3. 데이터 수집

중지 : Ctrl+C



-4. 수집된 데이터를 활용하여 Brain Type Internal 사용하기

-(1) 데이터 저장 경로 : models/<run-identifier>/<env_name>_<run-identifier>.bytes

-(2) 데이터 입력 : 데이터 Unity 로 옴긴 후 Internal 값으로 세팅




★ Unity ML 기본 가이드 ★

- https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Basic-Guide.md




★ 머신러닝(ML)이란 ★

-1. 기계학습 또는 머신러닝은 인공지능의 한 분야이다

-2. 컴퓨터가 학습할 수 있도록 하는 알고리즘과 기술을 개발하는 분야

-3. 대량의 데이터나 알고리즘을 통해 '학습' 을 시켜 수행하는 방식이다

(기초 데이터를 주지 않아도 스스로 학습을 통하여 결과를 만들어낸다)

(ex) 예로 이메일이 스팸인지 아닌지를 구분할 수 있다



★ 학습 종류 ★

-1. 강화 학습(PPO)

-2. 모방 학습

-3. 커리큘럼 학습

-4. 관찰학습



★ Unity ML(머신러닝) - 에이전트 훈련 주기 ★

-1. Agent 행동

-2. Environment (환경) 상태 변경

-3. Agent 에게 보상 제공




★ Unity ML(머신러닝) - 에이전트 내부 구조 ★


에이전트(Agent)

-1. 각각의 에이전트는 고유의 상태 및 관측 값을 가지고 있다

-2. 환경 내에서 고유의 행동을 하며 환경에서 일어나는 이벤트에 따라 고유의 보상을 받는다

-3. 각 에이전트의 행동은 에이전트가 연결된 브레인에 의해 결정된다



브레인

-1. 각 브레인은 특정 상태와 행동 공간을 정의한다

-2. 연결된 에이전트가 어떤 행동을 취할지 결정한다

현재버전 행동결정

- External - TensorFlow 를 사용하여 파이썬 API 를 통해 개방형 소켓으로 통신하여 행동을 결정

- Internal(실험 단계) - TensorFLowSharp 을 통해 프로젝트에 탑재된 훈련된 모델을 활용하여 행동을 결정

- Player - 플레이어의 입력을 통해 행동을 결정

- Heuristic - 직접 코딩한 동작을 기반으로 행동을 결정



아카데미

-1. 씬에 포함된 아카데미 오브젝트는 해당 환경에 포함된 모든 브레인을 자식으로 포함한다

-2. 각 환경은 한개의 아카데미만 포함하며 그 정의는 다음과 같다

-엔진 설정 : 훈련 및 추론 모드 상에서 게임 엔진의 속도와 렌더링 품질 설정

- 프레임 스킵 : 각 에이전트가 새로운 결정을 내릴때 생략할 엔진 단계의 개수

- 글로벌 에피소드 길이 : 에피소드가 지속될 길이를 의미, 에피소드가 이 길이에 도달하면 모든 에이전트가 완료 상태로 변경




★ 유니티 머신러닝 ★

소개 페이지 : https://blogs.unity3d.com/kr/2017/09/19/introducing-unity-machine-learning-agents/

깃 허브 : https://github.com/Unity-Technologies/ml-agents

Document : https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Readme.md

★ 개요 ★

OpenCV Mat 을 Texture 로 바꿀때 효율적으로 사용하기 위함



★ Mat -> Texture 변경하는 부분을 Thread 로 분리 ★

- WaitForEndOfFrame : 모든 카메라 랜더링이 끝난 후 돌아가도록 처리

- 랜더링이 모두 끝난 후 MatToTextureInRenderThread 를 통해 효율적으로 사용







+ Recent posts