React & React Native/라이브러리 활용

[RN] ONNX(Open Neural Network Exchange) 이해하기 -1: React Native 활용

adjh54 2023. 6. 10. 14:17
반응형
해당 글에서는 React Native 기반의 ONNX에 대해서 이해하고 사용 방법에 대해서 확인합니다.


 

 

1) ONNX(Open Neural Network Exchange)


💡 ONNX(Open Neural Network Exchange) 란?

- 딥러닝 모델을 서로 다른 프레임워크 간에 서로 옮길 수 있도록 하는 오픈 소스 프로젝트입니다. ONNX는 모델을 중간 계층 형식으로 변환하고 모델을 실행하는 데 필요한 라이브러리를 제공합니다.

- 간략히 말해, 다양한 플랫폼 환경(Java, JS, C, C#, C++)에서 환경에 제약 없이 구현된 ‘ML 모델’을 호출하고 수행하여 수행 결과값을 반환받는 것을 의미합니다.


💡 ONNX Runtime 이란?

- ONNX 모델을 실행하기 위한 엔진입니다. ONNX 모델을 실행하기 위해 ONNX 런타임은 빠른 추론을 위한 최적화된 커널을 사용합니다.

- 또한, ONNX Runtime은 CPU, GPU 및 딥러닝 가속기(DNNL, NNAPI, OpenVINO)를 지원합니다.
- 따라서, ONNX Runtime은 ONNX 모델을 실행하기 위한 최적화된 런타임 환경을 제공합니다.

 

 

1. ONNX 사용 사례


💡 ONNX를 이용하여서 아래와 같이 사용할 수 있습니다.

1. 다양한 ML 모델에 대한 추론 성능 향상에 사용됩니다.
2. 다른 하드웨어 및 운영 체제에서 실행에 사용됩니다.
3. Python으로 훈련하되 C#/C++/Java 앱에 배포에 사용됩니다.
4. 다양한 프레임 워크에서 생성된 모델로 추론 훈련 및 수행에 사용됩니다.
 

Tune performance

ONNX Runtime: cross-platform, high performance ML inferencing and training accelerator

onnxruntime.ai

 

 

2. ONNX 동작원리


💡 ONNX 동작 원리

1. 모델을 생성합니다.

- 모델에는 PyTorch, Tensorflow/Keras, TFLite, scikit-learn 등의 모델을 ONNX로 변환하여 모델을 생성


2. 사용하려는 환경에서 생성한 모델을 로드하고 실행한다.

- 사용하려는 환경은 Python, C++, C#, C, Java, Obj-C, WinRT 환경을 지원한다.


3. (선택 사항) 다양한 런타임 구성 또는 하드웨어 가속기를 사용하여 성능을 조정합니다.

- 하드웨어 가속기와 관련된 내용은 아래에 추가 설명으로 이어집니다.


4. 입력 값을 전달하여 결과값을 반환받습니다.

 

 

3. ONNX Runtime에서 제공하는 모델


💡 아래의 빌드 모델과 배포 모델 및 시작화 모델들을 제공해 줍니다.

 

 

ONNX | Supported Tools

The ONNX community provides tools to assist with creating and deploying your next deep learning model. Use the information below to select the tool that is right for your project.

onnx.ai

 

 

4. ONNX Runtime 모델


💡 ONNX Rutime에서 수행시킬 수 있는 모델들에 대해서 확인해 봅니다. 해당 모델들은 Vision, Language, Other로 분류가 되며 주요한 모델들에 대해서 확인해봅니다.
모델 분류 설명 모델의 종류
Image Classification
(이미지 분류)
이 모델 컬렉션은 이미지를 입력으로 받은 다음 이미지의 주요 개체를 키보드, 마우스, 연필 및 많은 동물과 같은 1000개 개체 범주로 분류합니다. MobileNet, ResNet, SqueezeNet, VGG, AlexNet, GoogleNet, CaffeNet, RCNN_ILSVRC13, DenseNet-121, Inception_V1,Inception_V2, ShuffleNet_V1, ShuffleNet_V2, ZFNet-512,EfficientNet-Lite4
Object Detection & Image Segmentation
(물체 감지 및 이미지 분할)
객체 감지 모델은 이미지에서 여러 객체의 존재를 감지하고 객체가 감지된 이미지 영역을 분할합니다. 의미론적 분할 모델은 각 픽셀에 미리 정의된 범주 집합으로 레이블을 지정하여 입력 이미지를 분할합니다. Tiny YOLOv2, SSD, SSD-MobileNetV1, Faster-RCNN, Mask-RCNN, RetinaNet,YOLO v2-coco, YOLO v3, Tiny YOLOv3, YOLOv4,DUC, FCN
Body, Face & Gesture Analysis
(신체, 얼굴 및 제스처 분석)
얼굴 감지 모델은 주어진 이미지에서 사람의 얼굴과 감정을 식별 및/또는 인식합니다. 신체 및 제스처 분석 모델은 주어진 이미지에서 성별과 나이를 식별합니다. ArcFace, UltraFace, Emotion FerPlus, Age and Gender Classification using Convolutional Neural Networks
Image Manipulation
(이미지 조작)
이미지 조작 모델은 신경망을 사용하여 입력 이미지를 수정된 출력 이미지로 변환합니다. 이 범주의 일부 인기 있는 모델에는 스타일 전송 또는 해상도를 높여 이미지 향상이 포함됩니다. Unpaired Image to Image Translation using Cycle consistent Adversarial Network, Super Resolution with sub-pixel CNN,Fast Neural Style Transfer
Speech & Audio Processing
(음성 및 오디오 처리)
이 클래스의 모델은 오디오 데이터를 사용하여 음성을 식별하고 음악을 생성하거나 텍스트를 소리내어 읽을 수 있는 모델을 훈련시킵니다. Speech recognition with deep recurrent neural networks,Deep voice: Real time neural text to speech,Sound Generative models

 

 

GitHub - onnx/models: A collection of pre-trained, state-of-the-art models in the ONNX format

A collection of pre-trained, state-of-the-art models in the ONNX format - GitHub - onnx/models: A collection of pre-trained, state-of-the-art models in the ONNX format

github.com

 

 

 

2) ONNX Runtime React Native


💡 ONNX Runtime React Native 란?

- Android 및 iOS의 React Native 애플리케이션용 ONNX Runtime이며 React Native 앱에서 ONNX 모델을 실행하기 위한 JavaScript 라이브러리를 제공합니다.
- ONNX Runtime React Native 버전에서는 .onnx 및 .ort 형식 모델을 모두 지원하며 모든 연산자와 유형을 포함합니다.

 

 

Deploy on mobile

Learn how to deploy an ONNX model on a mobile device with ONNX Runtime

onnxruntime.ai

 

💡 [참고] 단 아래와 같은 유형의 경우는 모델이 수행되지 않는다고 합니다.
  • 서명되지 않은 데이터 유형이 있는 텐서(Android 기기의 uint8 제외)
  • ArrayBuffer를 사용한 모델 로딩

 

 

onnxruntime-react-native

ONNX Runtime bridge for react native. Latest version: 1.15.0, last published: 17 days ago. Start using onnxruntime-react-native in your project by running `npm i onnxruntime-react-native`. There are no other projects in the npm registry using onnxruntime-r

www.npmjs.com

 

 

GitHub - microsoft/onnxruntime: ONNX Runtime: cross-platform, high performance ML inferencing and training accelerator

ONNX Runtime: cross-platform, high performance ML inferencing and training accelerator - GitHub - microsoft/onnxruntime: ONNX Runtime: cross-platform, high performance ML inferencing and training a...

github.com

 

 

JavaScript

ONNX Runtime: cross-platform, high performance ML inferencing and training accelerator

onnxruntime.ai

 

 

1. ORT 형식


💡 ORT 형식

- ‘축소된 크기’의 ONNX Runtime 빌드에서 지원하는 형식입니다.

- onnx 형태에서 ort 형태로 변경을 함으로써 축소된 크기 빌드는 모바일 및 웹 애플리케이션과 같이 크기가 제한된 환경에서 사용하기에 더 적합합니다.
- React-native의 ONNX Runtime에서는 onnx, ort 형태의 모델들을 수행이 가능합니다.

 

 

 

💡 ONNX Runtime 버전에 따라서 지원하는 ORT 형식 버전을 지원합니다.

 

 

ORT model format

Define the ORT format and show how to convert an ONNX model to ORT format to run on mobile or web

onnxruntime.ai

💡 ONNX 형태를 ORT 형태로 변환을 하기 이전에 Opsets(Operator Sets)에 대해서 확인을 해보아야 합니다.

 

 

2. Opsets(Operator Sets)


💡 Opsets(Operator Sets)

- ONNX 모델의 연산 세트를 의미하며 이는 모델을 구성할 때 사용한 연산 세트의 버전을 의미합니다.

- ONNX 형태에서 ORT 형태로 변경할 때, ONNX Runtime 별로 지원하는 Opset이 존재하기에 이를 확인하여서 변경을 수행하여야 합니다.
- 이에 따라서 변경은 Opset을 업그레이드하거나 다운그레이드를 수행해야 합니다.

 

💡 공식사이트에서 제공해 주는 모델들을 확인하면 ‘Opset(Operator Sets) Version’이 있는 것을 확인할 수 있습니다.

 

💡 React-native ONNX Runtime 별로의 지원하는 Opset Version에 대해서 확인해 봅니다.
 

ORT 1.14 Mobile Package Operators

ONNX Runtime: cross-platform, high performance ML inferencing and training accelerator

onnxruntime.ai

 

 

3. ONNX 형식을 ORT 형식으로 변환: ONNX to ORT


💡 경량화된 모델을 사용하기 위해서 ONNX 형식을 ORT 형식으로 변환하는 방법에 대해서 확인합니다.

💡 이를 위해서 Pyhton에서 onnxruntime을 import 하여서 script 명령어를 통해서 변환을 수행합니다.
$ pip install onnxruntime
# onnxruntime을 통해서 models/fsanet_capsule.onnx을 전환한다.
$ python -m onnxruntime.tools.convert_onnx_models_to_ort models/arcfaceresnet100-8.onnx

 

 

ORT model format

Define the ORT format and show how to convert an ONNX model to ORT format to run on mobile or web

onnxruntime.ai

 

 

GitHub - adjh54ir/convert_onnx_to_ort: .onnx 형태의 확장자 파일을 .ort 형태로 변경해줌.

.onnx 형태의 확장자 파일을 .ort 형태로 변경해줌. Contribute to adjh54ir/convert_onnx_to_ort development by creating an account on GitHub.

github.com

 

 

 

3) ONNX Runtime Execution Providers : 가속기


💡 ONNX Runtime Execution Providers 란?

- 프레임워크를 통해 다양한 하드웨어 가속 라이브러리와 함께 작동하여 하드웨어 플랫폼에서 ONNX 모델을 최적으로 실행합니다.

- 이 인터페이스는 AP 애플리케이션 개발자가 클라우드 및 에지의 다양한 환경에 ONNX 모델을 배포하고 플랫폼의 컴퓨팅 기능을 활용하여 실행을 최적화할 수 있는 유연성을 제공합니다.

 

 

 

1. ONNX에서 지원하는 가속기


💡 ONNX Runtime에서 지원하는 CPU, GPU, Mobile, Other을 나타내는 표입니다.

 

 

Execution Providers

ONNX Runtime: cross-platform, high performance ML inferencing and training accelerator

onnxruntime.ai

 

 

2. 모바일 디바이스 별 지원하는 가속기


분류 하드웨어 가속기
공통 CPU
Andriod NNAPI, XNNPACK
IOS CoreML, XNNPACK
 

Deploy on mobile

Learn how to deploy an ONNX model on a mobile device with ONNX Runtime

onnxruntime.ai

 

 

 

99) 참고한 주요 사이트


 💡 [참고] ONNX 공식사이트
 

ONNX Runtime | Home

Cross-Platform Accelerated Machine Learning Speed up machine learning process Built-in optimizations that deliver up to 17X faster inferencing and up to 1.4X faster training Plug into your existing technology stack Support for a variety of frameworks, oper

onnxruntime.ai

 

 

JavaScript

ONNX Runtime: cross-platform, high performance ML inferencing and training accelerator

onnxruntime.ai

 

onnxruntime-react-native

ONNX Runtime bridge for react native. Latest version: 1.15.0, last published: 17 days ago. Start using onnxruntime-react-native in your project by running `npm i onnxruntime-react-native`. There are no other projects in the npm registry using onnxruntime-r

www.npmjs.com

 

 

ONNX Runtime JavaScript API

 

onnxruntime.ai

 

 

 

💡 해당 글은 다음 글과 이어져서 모델을 불러오는 과정을 포함하였습니다.
 

[RN] ONNX(Open Neural Network Exchange) 이해하기 -2 : ONNX 모델 불러오기

해당 글에서는 React-Native 환경에서 ONNXRuntime을 수행하는 방법에 대해서 확인해 봅니다. 💡 이전에 작성한 글을 읽고 오시면 이해하는데 도움이 됩니다. [RN] ONNX(Open Neural Network Exchange) 이해하기 -1

adjh54.tistory.com

 

 

 

오늘도 감사합니다. 😀

 

 

 

 

반응형