본문 바로가기

전생의 기억/Unity

(Unity) C# Unity Engine에서 학습된 AI 모델 사용하기 1/N - Barracuda 개념 잡기

참조 github.com/Unity-Technologies/barracuda-release

 

Unity-Technologies/barracuda-release

Contribute to Unity-Technologies/barracuda-release development by creating an account on GitHub.

github.com

 

Unity Barracuda 패키지는 크로스플랫폼 (학습된 AI 모델의 플랫폼에 상관 없이)을 지원하는 경량 Neural Network Inference 라이브러리입니다.

Neural Network는 인공신경망(Artificial neural network)으로, 생물학의 신경망에서 영감을 받아 만들어진 개념으로, 머신러닝, 딥러닝 등에 활용됩니다.

이미지와 관련된 AI모델에서는 CNN을, 연속된 데이터들( 사람 목소리 등)에 대한 AI 모델에서는 RNN을, 자신이 원하는 형태의 모델을 만들때에는 GAN을 사용합니다.

 

Neural Network는 대강 알겠는데, Neural Network Inference는 무엇인가요?

 

이는, AI 모델의 학습(Training)과 예측, 추론(Predict, Inference)의 개념부터 알아가야합니다.

AI모델 생성에 있어서, 프레임워크를 이용한 학습(Training)과 추론(Inference)의 과정(Process)는 비슷한 모양새를 갖고 있습니다.

 

 목적의 차이점이라면, Training에서는 우리가 수집한, 또는 보유하고 있는 데이터들을 입력으로 주어 학습에 사용되는 모델의 성능을 가중치(변수)를 조정해가면서 점점 AI 모델의 성능을 향상시키는데에 목적성을 가지고 있습니다.

 이와 반대로, Inference에서는 Training을 통해 학습되어진 모델 (pretrained AI model)의 성능을 평가하거나, 실제 예측을 통해 모델을 사용하는데에 목적을 가집니다.

 

Training : (un trained)MODEL -> Training with Known Data set-> (un trained)MODEL ->  Trained Model Create!

Inference : Unknown Data ->  (trained) MODEL -> inferenced result (predict result)

Cross platform?

 

여기서 문제가 생기는 부분이 있습니다. AI 학습 관련 라이브러리 또는 프레임워크가 급성장하면서, 다양한 언어와 플랫폼에서 AI모델 생성을 위한 라이브러리와 패키지들을 내놓기 시작한것입니다. pytorch를 통해 학습시킨 모델, tensorflow-keras를 통해 생성시킨 모델, Google AI Platform, Microsoft Azure, caffe .... 수도 없이 많습니다.

www.upgrad.com/blog/top-deep-learning-frameworks/

 

Top 10 Deep Learning Frameworks in 2021 You Can't Ignore | upGrad blog

As the popularity of Machine Learning (ML) continues to solidify in the industry, with it is rising another innovative area of study in Data Science – Deep Learning (DL).  Deep Learning is a sub-branch of Machine Learning. The unique aspect of Deep Lear

www.upgrad.com

 

그렇다면, 이러한 플랫폼이나 라이브러리를 통해 생성된 AI 모델들은 어떤 확장자로 결과물이 나오게 될까요?

.pkl(python pickle), .joblib(scikit-learn), bst(xgboost), .h5(tensorflow), .pb(tensorflow), .pt(pytorch)

... 정말 많습니다.

 

그럼, 이러한 다양한 확장자를 가진 모델들을 어떻게 잘 import하여 사용할 수 있을까요?

애초에 학습에 사용된 플랫폼과 실제 프로그램 개발에 사용될 플랫폼을 맞추어 시작해야할까요?

 

방법은 크게 2가지로 나뉘어집니다. (댓글로 다른 방법도 알려주세요.. ㅠ)

 

1. Barracuda와 같은 크로스 플랫폼을 지원하는 Inference 라이브러리를 활용하여 프로그램에 직접 내장시키는 방법

2. Javascirtpt의 node.js, python의 Django,flask 등의 서버개발 프레임워크를 활용하여 API 서버를 생성하고, 서버로부터 결과값을 받아내는 방법

 

개발하려고 하는 프로그램의 목적에 따라, 구현 방식을 선택해야 한다고 생각합니다.

Video와 같이 실시간 처리가 중요하거나, Server로 보내야할 트래픽 량이 많은 경우, 1번과 같이 클라이언트(프론트엔드)단에 학습된 모델을 저장하는 방식이 더 효율적일 수 있고,

 

한장의 Image나, 적은 단위의 데이터가 입력으로 필요한 경우, 2번과 같이 AI API 서버를 구현하는 방식을 택할 수도 있겠습니다.

 

본 게시글에서는 1번의 경우에, 어떤식으로 진행해야하는지에 초점을 맞추었습니다.

 

감이 오시나요?..

 

그럼, Inference library를 이용해서 어떤식으로 모델의 형태에 상관없이 model을 import하여 사용할 수 있나요?

 

정답은 바로

 

.onnx Format 입니다.

 

2017년, MS 와 FaceBook이 AI 모델의 공유에 불편함을 해소하기 위해 framework 간 변환이 가능한 표준을 만드려고 노력한 결과물이며, 정식 명칭은 ONNX (Open Neural Network Exchange)입니다.

 

다음 게시글에서는 ONNX에 대한 이야기와, Unity Barracuda 패키지를 활용하여 .onnx 파일을 Import하는 과정들에 대해 이어 나가도록 하겠습니다.

 

긴글 읽어주셔서 감사합니다.