Ultralytics YOLO 모델 내보내기
소개
모델 학습의 궁극적인 목표는 실제 환경에 배포하는 것입니다. Ultralytics YOLO26의 내보내기 모드(Export mode)는 학습된 모델을 다양한 형식으로 내보낼 수 있는 폭넓은 옵션을 제공하여, 여러 플랫폼과 장치에 배포할 수 있도록 지원합니다. 이 포괄적인 가이드는 모델 내보내기의 세부 사항을 안내하며, 호환성과 성능을 극대화하는 방법을 보여줍니다.
Watch: How to Export Ultralytics YOLO26 in different formats for Deployment | ONNX, TensorRT, CoreML 🚀
YOLO26의 내보내기 모드를 선택해야 하는 이유는 무엇입니까?
- 범용성: ONNX, TensorRT, CoreML 등을 포함한 다중 형식으로 내보내기가 가능합니다.
- 성능: TensorRT 사용 시 최대 5배의 GPU 속도 향상을, ONNX 또는 OpenVINO 사용 시 최대 3배의 CPU 속도 향상을 얻을 수 있습니다.
- 호환성: 수많은 하드웨어 및 소프트웨어 환경에서 모델을 범용적으로 배포할 수 있습니다.
- 사용 편의성: 간단한 CLI 및 Python API를 통해 빠르고 직관적인 모델 내보내기가 가능합니다.
내보내기 모드의 주요 기능
주요 기능은 다음과 같습니다:
- 원클릭 내보내기: 다양한 형식으로 내보내기 위한 간단한 명령어를 제공합니다.
- 배치 내보내기: 배치 추론(Batch-inference)이 가능한 모델을 내보냅니다.
- 최적화된 추론: 내보낸 모델은 더 빠른 추론 시간을 위해 최적화됩니다.
- 튜토리얼 영상: 원활한 내보내기 과정을 위한 심층 가이드 및 튜토리얼을 제공합니다.
사용 예시
YOLO26n 모델을 ONNX나 TensorRT와 같은 다른 형식으로 내보내십시오. 내보내기 인수에 대한 전체 목록은 아래의 인수 섹션을 참조하십시오.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom-trained model
# Export the model
model.export(format="onnx")인수
이 표는 YOLO 모델을 다양한 형식으로 내보낼 때 사용할 수 있는 구성과 옵션을 상세히 설명합니다. 이러한 설정은 내보낸 모델의 성능, 크기 및 여러 플랫폼/환경 간의 호환성을 최적화하는 데 매우 중요합니다. 적절한 구성을 통해 모델을 최적의 효율성으로 의도한 애플리케이션에 배포할 수 있습니다.
| 인수(Argument) | 유형(Type) | 기본값(Default) | 설명 |
|---|---|---|---|
format | str | 'torchscript' | 'onnx', 'torchscript', 'engine'(TensorRT) 등 내보낼 모델의 대상 형식입니다. 각 형식은 다양한 배포 환경과의 호환성을 가능하게 합니다. |
imgsz | int 또는 tuple | 640 | 모델 입력을 위한 원하는 이미지 크기입니다. 정사각형 이미지를 위한 정수(예: 640x640의 경우 640) 또는 특정 치수를 위한 튜플 (height, width)일 수 있습니다. |
keras | bool | False | TensorFlow SavedModel을 위한 Keras 형식 내보내기를 활성화하여 TensorFlow 서빙 및 API와의 호환성을 제공합니다. |
optimize | bool | False | TorchScript로 내보낼 때 모바일 장치를 위한 최적화를 적용하여 모델 크기를 줄이고 추론 성능을 향상시킬 수 있습니다. NCNN 형식이나 CUDA 장치와는 호환되지 않습니다. DeepX의 경우, 추론 지연 시간을 줄이고 컴파일 시간을 늘리는 더 높은 수준의 컴파일러 최적화를 활성화합니다. |
half | bool | False | FP16(반정밀도) 양자화를 활성화하여 모델 크기를 줄이고 지원되는 하드웨어에서 추론 속도를 잠재적으로 높입니다. INT8 양자화나 CPU 전용 내보내기와는 호환되지 않습니다. ONNX와 같은 특정 형식에서만 사용 가능합니다(아래 참조). |
int8 | bool | False | INT8 양자화를 활성화하여 모델을 추가로 압축하고 정확도 손실을 최소화하면서 추론 속도를 높입니다. 주로 엣지 장치용입니다. TensorRT와 함께 사용할 경우, 학습 후 양자화(PTQ)를 수행합니다. |
dynamic | bool | False | TorchScript, ONNX, OpenVINO, TensorRT 및 CoreML 내보내기에 대해 동적 입력 크기를 허용하여 다양한 이미지 치수를 처리하는 유연성을 향상시킵니다. INT8과 함께 TensorRT를 사용할 때 자동으로 True로 설정됩니다. |
simplify | bool | True | onnxslim을 사용하여 ONNX 내보내기를 위한 모델 그래프를 단순화하여 성능을 개선하고 추론 엔진과의 호환성을 잠재적으로 높입니다. |
opset | int | None | 다양한 ONNX 파서 및 런타임과의 호환성을 위해 ONNX opset 버전을 지정합니다. 설정하지 않으면 최신 지원 버전을 사용합니다. |
workspace | float 또는 None | None | TensorRT 최적화를 위한 최대 작업 공간 크기를 GiB 단위로 설정하여 메모리 사용량과 성능 간의 균형을 맞춥니다. 장치 최대치까지 TensorRT가 자동 할당하도록 하려면 None을 사용하십시오. |
nms | bool | False | 지원되는 경우 내보낸 모델에 NMS(Non-Maximum Suppression)를 추가하여( 내보내기 형식 참조) 탐지 후처리 효율성을 향상합니다. 엔드투엔드(end2end) 모델에는 사용할 수 없습니다. |
batch | int | 1 | 내보내기 모델의 배치 추론 크기 또는 predict 모드에서 내보낸 모델이 동시에 처리할 최대 이미지 수를 지정합니다. Edge TPU 내보내기의 경우 자동으로 1로 설정됩니다. |
device | str | None | 내보내기를 위한 장치를 지정합니다: GPU(device=0), CPU(device=cpu), Apple silicon용 MPS(device=mps), Huawei Ascend NPU(device=npu 또는 device=npu:0), 또는 NVIDIA Jetson용 DLA(device=dla:0 또는 device=dla:1). TensorRT 내보내기는 자동으로 GPU를 사용합니다. |
data | str | 'coco8.yaml' | INT8 양자화 보정에 필수적인 데이터셋 구성 파일 경로입니다. INT8이 활성화된 상태에서 지정하지 않으면 coco8.yaml이 보정을 위한 대체 파일로 사용됩니다. |
fraction | float | 1.0 | INT8 양자화 보정에 사용할 데이터셋의 비율을 지정합니다. 전체 데이터셋의 일부에서 보정할 수 있게 하여 실험용이나 자원이 제한적일 때 유용합니다. INT8이 활성화된 상태에서 지정하지 않으면 전체 데이터셋이 사용됩니다. |
end2end | bool | None | NMS-free 추론을 지원하는 YOLO 모델(YOLO26, YOLOv10)의 엔드투엔드 모드를 재정의합니다. False로 설정하면 이러한 모델을 기존 NMS 기반 후처리 파이프라인과 호환되도록 내보낼 수 있습니다. 자세한 내용은 엔드투엔드 탐지 가이드를 참조하십시오. |
이 매개변수들을 조정하여 배포 환경, 하드웨어 제약, 성능 목표 등 특정 요구 사항에 맞게 내보내기 프로세스를 맞춤 설정할 수 있습니다. 모델 크기, 속도, 정확도 간의 최상의 균형을 달성하려면 적절한 형식과 설정을 선택하는 것이 필수적입니다.
내보내기 형식
사용 가능한 YOLO26 내보내기 형식은 아래 표와 같습니다. format 인수를 사용하여 모든 형식으로 내보낼 수 있습니다(예: format='onnx' 또는 format='engine'). 내보낸 모델에 대해 직접 예측(predict)하거나 검증(validate)할 수 있습니다(예: yolo predict model=yolo26n.onnx). 내보내기가 완료되면 모델에 대한 사용 예시가 표시됩니다. 또한 Ultralytics Platform의 브라우저에서 로컬 설정 없이 직접 모델을 내보낼 수도 있습니다.
| 형식 | format 인수 | 모델 | 메타데이터 | 인수 |
|---|---|---|---|---|
| PyTorch | - | yolo26n.pt | ✅ | - |
| TorchScript | torchscript | yolo26n.torchscript | ✅ | imgsz, half, dynamic, optimize, nms, batch, device |
| ONNX | onnx | yolo26n.onnx | ✅ | imgsz, half, dynamic, simplify, opset, nms, batch, device |
| OpenVINO | openvino | yolo26n_openvino_model/ | ✅ | imgsz, half, dynamic, int8, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n.engine | ✅ | imgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n.mlpackage | ✅ | imgsz, dynamic, half, int8, nms, batch, device |
| TF SavedModel | saved_model | yolo26n_saved_model/ | ✅ | imgsz, keras, int8, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n.pb | ❌ | imgsz, batch, device |
| TF Lite | tflite | yolo26n.tflite | ✅ | imgsz, half, int8, nms, batch, data, fraction, device |
| TF Edge TPU | edgetpu | yolo26n_edgetpu.tflite | ✅ | imgsz, int8, data, fraction, device |
| TF.js | tfjs | yolo26n_web_model/ | ✅ | imgsz, half, int8, nms, batch, data, fraction, device |
| PaddlePaddle | paddle | yolo26n_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n.mnn | ✅ | imgsz, batch, int8, half, device |
| NCNN | ncnn | yolo26n_ncnn_model/ | ✅ | imgsz, half, batch, device |
| IMX500 | imx | yolo26n_imx_model/ | ✅ | imgsz, int8, data, fraction, nms, device |
| RKNN | rknn | yolo26n_rknn_model/ | ✅ | imgsz, batch, name, device |
| ExecuTorch | executorch | yolo26n_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n_axelera_model/ | ✅ | imgsz, batch, int8, data, fraction, device |
| DeepX | deepx | yolo26n_deepx_model/ | ✅ | imgsz, int8, data, optimize, device |
FAQ
YOLO26 모델을 ONNX 형식으로 내보내려면 어떻게 해야 합니까?
Ultralytics를 사용하면 YOLO26 모델을 ONNX 형식으로 쉽게 내보낼 수 있습니다. 모델 내보내기를 위해 Python 및 CLI 방법을 모두 제공합니다.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom-trained model
# Export the model
model.export(format="onnx")다양한 입력 크기 처리와 같은 고급 옵션을 포함한 프로세스에 대한 자세한 내용은 ONNX 통합 가이드를 참조하십시오.
모델 내보내기에 TensorRT를 사용하면 어떤 이점이 있습니까?
모델 내보내기에 TensorRT를 사용하면 성능이 크게 향상됩니다. TensorRT로 내보낸 YOLO26 모델은 최대 5배의 GPU 속도 향상을 달성할 수 있어 실시간 추론 애플리케이션에 이상적입니다.
- 범용성: 특정 하드웨어 설정에 맞게 모델을 최적화합니다.
- 속도: 고급 최적화를 통해 더 빠른 추론을 달성합니다.
- 호환성: NVIDIA 하드웨어와 원활하게 통합됩니다.
TensorRT 통합에 대해 더 알아보려면 TensorRT 통합 가이드를 참조하십시오.
YOLO26 모델을 내보낼 때 INT8 양자화를 활성화하려면 어떻게 해야 합니까?
INT8 양자화는 모델을 압축하고 특히 엣지 장치에서 추론 속도를 높이는 훌륭한 방법입니다. INT8 양자화를 활성화하는 방법은 다음과 같습니다:
from ultralytics import YOLO
model = YOLO("yolo26n.pt") # Load a model
model.export(format="engine", int8=True)INT8 quantization can be applied to various formats, such as TensorRT, OpenVINO, and CoreML. For optimal quantization results, provide a representative dataset using the data parameter.
모델을 내보낼 때 동적 입력 크기가 중요한 이유는 무엇입니까?
동적 입력 크기를 사용하면 내보낸 모델이 다양한 이미지 크기를 처리할 수 있어 유연성을 제공하고 다양한 사용 사례에서 처리 효율성을 최적화할 수 있습니다. ONNX 또는 TensorRT와 같은 형식으로 내보낼 때 동적 입력 크기를 활성화하면 모델이 서로 다른 입력 모양에 원활하게 적응할 수 있습니다.
이 기능을 활성화하려면 내보내는 동안 dynamic=True 플래그를 사용하십시오:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
model.export(format="onnx", dynamic=True)동적 입력 크기 조절은 비디오 처리나 서로 다른 소스의 이미지를 다룰 때처럼 입력 차원이 변할 수 있는 애플리케이션에 특히 유용합니다.
모델 성능 최적화를 위해 고려해야 할 주요 내보내기 인수는 무엇입니까?
모델 성능 최적화를 위해서는 내보내기 인수를 이해하고 구성하는 것이 중요합니다:
format:내보낼 모델의 대상 형식 (예:onnx,torchscript,tensorflow).imgsz:모델 입력에 원하는 이미지 크기 (예:640또는(height, width)).half:FP16 양자화를 활성화하여 모델 크기를 줄이고 추론 속도를 잠재적으로 향상시킵니다.optimize:모바일 또는 제약이 있는 환경을 위한 특정 최적화를 적용합니다.int8:INT8 양자화를 활성화하며, 엣지 AI 배포에 매우 유용합니다.
특정 하드웨어 플랫폼에 배포하려면 NVIDIA GPU용 TensorRT, Apple 장치용 CoreML, Google Coral 장치용 Edge TPU와 같은 특수 내보내기 형식을 사용하는 것을 고려하십시오.
내보낸 YOLO 모델에서 출력 텐서는 무엇을 나타냅니까?
YOLO 모델을 ONNX 또는 TensorRT와 같은 형식으로 내보내면, 출력 텐서 구조는 모델 작업에 따라 달라집니다. 이러한 출력을 이해하는 것은 사용자 지정 추론 구현에 중요합니다.
객체 탐지(detection) 모델(예: yolo26n.pt)의 경우, 출력은 일반적으로 (batch_size, 4 + num_classes, num_predictions) 형태의 단일 텐서입니다. 채널은 박스 좌표와 클래스별 점수를 나타내며, num_predictions는 내보내기 입력 해상도에 따라 달라집니다(동적일 수 있음).
세그멘테이션(segmentation) 모델(예: yolo26n-seg.pt)의 경우, 일반적으로 두 개의 출력을 얻게 됩니다. 첫 번째 텐서는 (batch_size, 4 + num_classes + mask_dim, num_predictions) 형태(박스, 클래스 점수, 마스크 계수)이며, 두 번째 텐서는 (batch_size, mask_dim, proto_h, proto_w) 형태(계수와 함께 인스턴스 마스크를 생성하는 데 사용되는 마스크 프로토타입)입니다. 크기는 내보내기 입력 해상도에 따라 달라집니다(동적일 수 있음).
포즈(pose) 모델(예: yolo26n-pose.pt)의 경우, 출력 텐서는 일반적으로 (batch_size, 4 + num_classes + keypoint_dims, num_predictions) 형태입니다. 여기서 keypoint_dims는 포즈 사양(예: 키포인트 수 및 신뢰도 포함 여부)에 따라 달라지며, num_predictions는 내보내기 입력 해상도에 따라 달라집니다(동적일 수 있음).
ONNX 추론 예시의 예제들은 각 모델 유형에 대해 이러한 출력을 처리하는 방법을 보여줍니다.
Why is output0 FP32 when exporting with half=True and end2end=True?
half=True(또는 int8=True)로 내보낼 때, 대부분의 텐서는 모델 크기를 줄이고 성능을 향상시키기 위해 더 낮은 정밀도로 변환됩니다. 그러나 end2end=True가 활성화되면 후처리(클래스 인덱스 포함)가 내보낸 그래프에 직접 내장됩니다.
output0 텐서는 클래스 인덱스를 포함하며, 이는 내부적으로 부동 소수점 값으로 표현됩니다. FP16은 제한된 가수 정밀도로 인해 2048 이상의 정수 값을 안정적으로 표현할 수 없습니다. 잠재적인 정밀도 손실이나 잘못된 클래스 ID를 방지하기 위해 output0은 의도적으로 FP32로 유지됩니다.
이 동작은 예상된 것이며 클래스 인덱스의 충실도가 유지되어야 하는 저정밀도 또는 양자화된 내보내기에도 동일하게 적용됩니다.
전체 FP16 출력이 필요한 경우, end2end=False로 내보내고 외부에서 후처리를 수행하십시오.