Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Unity_Voxel_Classifier_Sentis

3D메쉬를 복셀화하고, 해당 데이터를 TensorFlow로 3D-CNN을 학습시켜 유니티에서 분류하는 도구

AI를 활용하였습니다. 3D메쉬 복셀화부터 프로그램안에서 분류까지의 과정을 구축하는데 중점을 두었습니다.

이 도구는 크게 3단계로 작동합니다.

  1. 데이터 추출(Unity) : BatchModelProcessor.cs를 통해 학습시킬 모델의 데이터를 추출
  2. AI모델학습(Python) : train.py로 데이터를 읽어 3D-CNN모델을 학습시킨 후 유니티용 onnx모델 생성
  3. 실시간 분류(Unity) : VoxelClassifier.cs가 실시간으로 분석하고 결과 출력

적용 스크린샷

추출한 데이터 시각화한 결과


모델의 학습 성능 검증 위해 직접 만든 2D 이미지를 3D복셀로 변환합니다.


도끼모양을 생각하고 만든 복셀메쉬 분석결과


창모양을 생각하고 만든 복셀메쉬 분석결과

기능 설명

BatchModelProcessor.cs(Editor 전용)

Unity에서 3D 메쉬를 읽어 학습용 데이터로 변환합니다.

Voxelizer스크립트를 호출하여 3D메쉬를 사전 설정된값에 따라 3D 배열로 변환합니다.

변환된 복셀 데이터 중 속이 차 있는 지점의 X,Y,Z좌표만 추출하여 기록합니다.

train.py

데이터를 분류하기 위한 3DCNN모델을 학습시킵니다.

지정된 디렉터리에서 txt파일들을 읽어옵니다.

데이터 불균형 및 부족 문제로 인해 데이터 증강할 수 있는 회전, 반전, 노이즈등을 사용했습니다.

학습 후 ONXX파일 포맷으로 모델을 내보냅니다.

Voxelizer.cs

3D메쉬 데이터를 3차원 형태인 복셀 데이터로 변환시킵니다.

메쉬를 입력받아 정규화 과정을 거친 후 복셀 배열을 생성합니다.

삼각형 면을 감싸는 영역의 복셀만 검사하여 삼각형이 차지하는 영역에 표시합니다.

Classifier.cs

학습된 ONNX모델을 가져와 사용하는 클래스입니다.

게임시작 시 빈 데이터를 보내 모델을 먼저 사용해서 처음 사용시 끊김없이 사용할 수 있게 했습니다.

전달받은 메쉬의 데이터를 전처리하여 복셀화하여 학습한 모델이 사용할 수 있게 변환시켜줍니다.

ONNX모델을 구동하여 물체의 종류를 판별하고 결과를 출력합니다. 비동기 처리를 하여 끊김없이 진행되도록 했습니다.

About

3D메쉬를 복셀화하고, 해당 데이터를 TensorFlow로 3D-CNN을 학습시켜 유니티에서 분류하는 도구

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages