3D메쉬를 복셀화하고, 해당 데이터를 TensorFlow로 3D-CNN을 학습시켜 유니티에서 분류하는 도구
이 도구는 크게 3단계로 작동합니다.
- 데이터 추출(Unity) : BatchModelProcessor.cs를 통해 학습시킬 모델의 데이터를 추출
- AI모델학습(Python) : train.py로 데이터를 읽어 3D-CNN모델을 학습시킨 후 유니티용 onnx모델 생성
- 실시간 분류(Unity) : VoxelClassifier.cs가 실시간으로 분석하고 결과 출력
BatchModelProcessor.cs(Editor 전용)
Unity에서 3D 메쉬를 읽어 학습용 데이터로 변환합니다.
Voxelizer스크립트를 호출하여 3D메쉬를 사전 설정된값에 따라 3D 배열로 변환합니다.
변환된 복셀 데이터 중 속이 차 있는 지점의 X,Y,Z좌표만 추출하여 기록합니다.
train.py
데이터를 분류하기 위한 3DCNN모델을 학습시킵니다.
지정된 디렉터리에서 txt파일들을 읽어옵니다.
데이터 불균형 및 부족 문제로 인해 데이터 증강할 수 있는 회전, 반전, 노이즈등을 사용했습니다.
학습 후 ONXX파일 포맷으로 모델을 내보냅니다.
Voxelizer.cs
3D메쉬 데이터를 3차원 형태인 복셀 데이터로 변환시킵니다.
메쉬를 입력받아 정규화 과정을 거친 후 복셀 배열을 생성합니다.
삼각형 면을 감싸는 영역의 복셀만 검사하여 삼각형이 차지하는 영역에 표시합니다.
Classifier.cs
학습된 ONNX모델을 가져와 사용하는 클래스입니다.
게임시작 시 빈 데이터를 보내 모델을 먼저 사용해서 처음 사용시 끊김없이 사용할 수 있게 했습니다.
전달받은 메쉬의 데이터를 전처리하여 복셀화하여 학습한 모델이 사용할 수 있게 변환시켜줍니다.
ONNX모델을 구동하여 물체의 종류를 판별하고 결과를 출력합니다. 비동기 처리를 하여 끊김없이 진행되도록 했습니다.






