Ultralytics YOLO27: 대기자 명단에 등록하세요.
YOLO 라이선스 받기
Ultralytics 용어집으로 돌아가기

ONNX (Open Neural Network Exchange)

ONNX는 학습된 모델을 표준 연산자 그래프로 저장하는 개방형 포맷이므로, PyTorch에서 학습한 모델을 다양한 런타임에서 실행할 수 있습니다.

ONNX (개방형 신경망 교환)는 기계 학습 모델을 위한 개방형 표준 파일 형식입니다. .onnx 파일은 학습된 모델을 표준 연산자와 가중치를 포함하는 연산 그래프로 저장합니다. 따라서 PyTorch와 같은 한 프레임워크에서 학습한 모델을 다른 런타임과 다양한 하드웨어에서 실행할 수 있습니다. Facebook과 Microsoft는 2017년 9월에 ONNX를 출시했으며, 2019년 11월부터 Linux Foundation의 AI 재단인 LF AI & Data의 졸업 프로젝트로 운영되고 있습니다. ONNX는 학습과 모델 배포 사이의 일반적인 전달 형식입니다. 내보낸 파일 하나로 ONNX Runtime, TensorRT, OpenVINO 및 여러 엣지 AI 가속기의 컴파일러를 사용할 수 있습니다.

ONNX 파일에 포함되는 내용#

ONNX 모델은 Protocol Buffers로 직렬화되며 네 가지 항목으로 구성됩니다.

  • 그래프: Conv, MatMul, Relu와 같은 연산자를 호출하는 노드를 이름이 지정된 텐서로 연결합니다. 그래프의 입력과 출력에는 데이터 유형과 형태가 포함되며, 각 차원은 고정값이나 배치 크기 변수와 같은 기호값으로 지정할 수 있습니다.
  • 초기화자: 학습된 가중치입니다. Protocol Buffers는 단일 파일의 크기를 2GB로 제한하므로, 더 큰 모델은 .onnx 파일과 같은 위치에 있는 외부 데이터 파일에 가중치를 저장합니다.
  • 연산자 집합 버전: 연산자는 연산자 집합별로 버전이 지정되며, 런타임은 모델을 내보낼 때 사용한 연산자 집합을 지원해야 합니다. 새 연산자 집합은 이전 연산자를 변경하지 않고 새 연산자를 추가합니다. 예를 들어 Attention 연산자는 연산자 집합 23에 추가되었습니다.
  • 메타데이터: 제작자 이름, 모델 버전, 클래스 이름과 같은 사용자 지정 키-값 쌍입니다.

두 번째 연산자 도메인인 ONNX-ML은 트리 앙상블 및 선형 분류기와 같은 고전적 모델을 다룹니다. 따라서 skl2onnx 및 onnxmltools와 같은 변환 도구는 scikit-learn, LightGBM, XGBoost 모델을 동일한 형식으로 내보낼 수 있습니다. Netron과 같은 뷰어는 그래프를 노드별로 표시합니다. 실제로 ONNX는 여러 학습 프레임워크와 런타임 사이의 공통 형식으로 사용됩니다.

ONNX 모델 실행#

Microsoft의 오픈 소스 추론 엔진인 ONNX Runtime은 서버, 데스크톱, 휴대폰, 브라우저에서 ONNX 파일을 실행합니다. 모델을 로드할 때 상수를 접고 합성곱과 뒤따르는 배치 정규화를 융합하는 등의 방식으로 그래프를 최적화합니다. 그런 다음 그래프의 각 부분을 해당 하드웨어를 위한 실행 공급자에 전달합니다. 예를 들어 NVIDIA GPU에서는 CUDA 또는 TensorRT, Intel 하드웨어에서는 OpenVINO, Windows GPU에서는 DirectML, Apple 기기에서는 Core ML, Qualcomm NPU에서는 QNN, 브라우저에서는 WebGPU를 사용합니다. Microsoft의 로컬 추론 프레임워크인 Windows ML은 ONNX Runtime에서 실행됩니다. TensorRT 및 OpenVINO와 같은 다른 엔진도 ONNX 파일을 가져와 자체 형식으로 컴파일합니다.

Ultralytics YOLO26는 model.export(format="onnx")를 사용해 ONNX로 내보내며, Ultralytics의 TensorRT 내보내기는 동일한 ONNX 파일에서 엔진을 빌드합니다. 내보낸 파일은 PyTorch 없이 ONNX Runtime에서 실행됩니다:

import onnxruntime as ort
from ultralytics import YOLO

# 심볼릭 배치, 높이, 너비 차원을 사용해 YOLO26n을 ONNX로 내보냅니다
model = YOLO("yolo26n.pt")
onnx_path = model.export(format="onnx", dynamic=True)

# PyTorch나 Ultralytics가 필요하지 않은 ONNX Runtime에서 그래프를 불러옵니다
session = ort.InferenceSession(onnx_path, providers=["CPUExecutionProvider"])
for tensor in session.get_inputs() + session.get_outputs():
    print(tensor.name, tensor.shape)

그래프의 입력인 images과 심볼릭 배치, 높이, 너비 차원, 그리고 원시 예측 출력인 output0을 출력합니다. 이는 모든 ONNX 런타임이 모델에 입력을 전달하고 결과를 읽는 데 사용하는 시그니처입니다.

  • ONNX Runtime: ONNX 파일을 실행하는 추론 엔진입니다. Microsoft가 주도하는 별도의 프로젝트이며, 흔히 "ONNX"라고 줄여 부릅니다.
  • TensorRT: NVIDIA의 컴파일러로, ONNX 파일을 특정 GPU 유형 및 TensorRT 버전에 최적화된 엔진으로 변환합니다. 따라서 팀은 이식 가능한 원본으로 ONNX 파일을 보관하고 각 대상에 맞는 엔진을 다시 빌드합니다.
  • PyTorch 형식: .pt 체크포인트와 safetensors 파일은 모델을 다시 빌드하는 코드에 필요한 가중치를 저장하며, TorchScript와 torch.export는 PyTorch 자체 런타임용 그래프를 캡처합니다.
  • 기타 배포 형식: OpenVINO IR, LiteRT .tflite 파일, Core ML 패키지, 양자화된 LLM용 GGUF 파일은 각각 특정 런타임을 대상으로 합니다. Apple의 coremltools는 PyTorch 모델을 직접 변환하며 버전 6에서 ONNX 입력 지원을 중단했습니다.

실제 적용 사례#

  • 크로스 플랫폼 앱: 하나의 ONNX 파일을 Linux 서버, Windows ML을 사용하는 Windows 앱, ONNX Runtime Mobile을 사용하는 Android 및 iOS 앱에서 사용할 수 있습니다.
  • 브라우저 추론: ONNX Runtime Web은 WebGPU 또는 WebAssembly를 사용해 사용자 기기에서 모델을 실행하므로, 자세 추정과 같은 기능에 사용되는 카메라 프레임이 브라우저 밖으로 나가지 않습니다.
  • 엣지 가속기: Hailo, Qualcomm, Rockchip과 같은 공급업체의 NPU 툴체인은 ONNX 모델을 입력으로 받아 이를 컴파일하며, 대개 칩에 맞게 양자화하여 INT8로 변환합니다.
  • 프로덕션 환경의 고전적 모델: ONNX로 변환한 그래디언트 부스팅 트리와 scikit-learn 파이프라인은 서빙 경로에 Python 인터프리터를 두지 않고 ONNX Runtime을 통해 C#, Java, C++ 서비스에서 실행됩니다.

솔루션 살펴보기

스포츠 분야의 컴퓨터 비전

스포츠 분야의 컴퓨터 비전

Ultralytics YOLO가 선수 및 공 추적, 경기력 분석, 코칭 인사이트, 선수 재활을 통해 스포츠 비전을 구현하는 방법을 알아보세요.
자세히 알아보기
항공 이미지 컴퓨터 비전

항공 이미지 컴퓨터 비전

Ultralytics YOLO를 활용해 드론 및 항공 이미지를 농업, 양식업, 보전, 지리 공간 분석을 위한 실시간 인사이트로 전환하세요.
자세히 알아보기
항공우주 분야의 컴퓨터 비전

항공우주 분야의 컴퓨터 비전

Ultralytics YOLO를 활용해 항공기 검사, 활주로 FOD 감지, 공항 지상 운영, 복합재 결함 감지 등 항공우주 분야에 컴퓨터 비전을 적용하세요.
자세히 알아보기
보안 분야의 컴퓨터 비전

보안 분야의 컴퓨터 비전

Ultralytics YOLO 모델로 모든 시설을 보호하세요. Vision AI는 경계 모니터링, 위협 감지, 번호판 인식, 작업장 안전을 지원합니다.
자세히 알아보기
로보틱스 분야의 컴퓨터 비전

로보틱스 분야의 컴퓨터 비전

Ultralytics YOLO 모델로 더 스마트한 머신을 구현하세요. 로보틱스 분야의 Vision AI는 자율 주행, 인식, 객체 추적, 실시간 제어를 지원합니다.
자세히 알아보기
물류 분야의 컴퓨터 비전

물류 분야의 컴퓨터 비전

Ultralytics YOLO 모델로 물류를 간소화하세요. 비전 AI는 화물 검사, 분류, 차량 추적, 실시간 창고 안전 모니터링을 지원합니다.
자세히 알아보기
리테일 분야의 컴퓨터 비전

리테일 분야의 컴퓨터 비전

Ultralytics YOLO 모델로 리테일의 새로운 가능성을 열어 보세요. 비전 AI는 재고 추적, 선반 모니터링, 대기열 관리, 더욱 심층적인 고객 인사이트를 지원합니다.
자세히 알아보기
의료 분야의 컴퓨터 비전

의료 분야의 컴퓨터 비전

Ultralytics YOLO 모델로 의료 솔루션을 구축하세요. 의료 분야의 비전 AI는 의료 영상 판독을 가속화하고, 진단을 개선하며, 환자 모니터링을 지원합니다.
자세히 알아보기
제조 분야의 컴퓨터 비전

제조 분야의 컴퓨터 비전

Ultralytics YOLO 모델로 제조 공정을 최적화하세요. 비전 AI는 품질 관리, 결함 탐지, PPE 규정 준수, 조립 라인 자동화를 지원합니다.
자세히 알아보기
자동차 분야의 컴퓨터 비전

자동차 분야의 컴퓨터 비전

Ultralytics YOLO 모델로 자동차 분야에 컴퓨터 비전을 적용하세요. 비전 AI는 도로 안전, 운전자 지원, 차량 자동화를 개선해 더 스마트한 도로를 구현합니다.
자세히 알아보기
농업 분야의 컴퓨터 비전

농업 분야의 컴퓨터 비전

Ultralytics YOLO 모델로 스마트 농업에 비전 AI를 도입하세요. 작물 모니터링, 가축 추적, 정밀 농업을 지원하여 더 높은 수확량과 더 스마트한 농업을 실현합니다.
자세히 알아보기

함께 AI의 미래를 만들어 가세요!

머신러닝의 미래와 함께 여정을 시작하세요