반응형
해당 글에서는 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. 다양한 프레임 워크에서 생성된 모델로 추론 훈련 및 수행에 사용됩니다.
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에서 제공하는 모델
💡 아래의 빌드 모델과 배포 모델 및 시작화 모델들을 제공해 줍니다.
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 |
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 형식 모델을 모두 지원하며 모든 연산자와 유형을 포함합니다.
💡 [참고] 단 아래와 같은 유형의 경우는 모델이 수행되지 않는다고 합니다.
- 서명되지 않은 데이터 유형이 있는 텐서(Android 기기의 uint8 제외)
- ArrayBuffer를 사용한 모델 로딩
1. ORT 형식
💡 ORT 형식
- ‘축소된 크기’의 ONNX Runtime 빌드에서 지원하는 형식입니다.
- onnx 형태에서 ort 형태로 변경을 함으로써 축소된 크기 빌드는 모바일 및 웹 애플리케이션과 같이 크기가 제한된 환경에서 사용하기에 더 적합합니다.
- React-native의 ONNX Runtime에서는 onnx, ort 형태의 모델들을 수행이 가능합니다.
💡 ONNX Runtime 버전에 따라서 지원하는 ORT 형식 버전을 지원합니다.
💡 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에 대해서 확인해 봅니다.
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
3) ONNX Runtime Execution Providers : 가속기
💡 ONNX Runtime Execution Providers 란?
- 프레임워크를 통해 다양한 하드웨어 가속 라이브러리와 함께 작동하여 하드웨어 플랫폼에서 ONNX 모델을 최적으로 실행합니다.
- 이 인터페이스는 AP 애플리케이션 개발자가 클라우드 및 에지의 다양한 환경에 ONNX 모델을 배포하고 플랫폼의 컴퓨팅 기능을 활용하여 실행을 최적화할 수 있는 유연성을 제공합니다.
1. ONNX에서 지원하는 가속기
💡 ONNX Runtime에서 지원하는 CPU, GPU, Mobile, Other을 나타내는 표입니다.
2. 모바일 디바이스 별 지원하는 가속기
분류 | 하드웨어 가속기 |
공통 | CPU |
Andriod | NNAPI, XNNPACK |
IOS | CoreML, XNNPACK |
99) 참고한 주요 사이트
💡 [참고] ONNX 공식사이트
💡 해당 글은 다음 글과 이어져서 모델을 불러오는 과정을 포함하였습니다.
오늘도 감사합니다. 😀
반응형
'React & React Native > 라이브러리 활용' 카테고리의 다른 글
[RN] React Native 앱 접근 권한 관리 이해하고 설정하기: react-native-permissions (5) | 2023.06.15 |
---|---|
[RN] ONNX(Open Neural Network Exchange) 이해하기 -2 : ONNX 모델 불러오기 (0) | 2023.06.12 |
[RN] React Native 페이지 이동 관리 이해하고 설정하기: react-native-navigation (4) | 2023.06.09 |
[RN] react-native-cli에서 expo-cli 모듈 사용하기 (0) | 2022.05.15 |
[RN] React Native 자이로센서를 활용한 자이로스코프, 디바이스 모션 이해하기: expo-sensors (0) | 2022.05.15 |