Meet YOLO26: next-gen vision AI.

Link to this sectionUltralytics YOLO를 사용한 모델 내보내기#

Ultralytics YOLO ecosystem and integrations

Link to this section소개#

모델 학습의 궁극적인 목표는 실제 환경에 배포하는 것입니다. Ultralytics YOLO26의 내보내기 모드(Export mode)는 학습된 모델을 다양한 형식으로 변환할 수 있는 폭넓은 옵션을 제공하여, 여러 플랫폼과 장치에 배포할 수 있도록 지원합니다. 본 종합 가이드에서는 모델 내보내기의 세부적인 과정을 안내하며, 최대의 호환성과 성능을 달성하는 방법을 소개합니다.



Watch: How to Export Ultralytics YOLO26 in different formats for Deployment | ONNX, TensorRT, CoreML 🚀

Link to this sectionYOLO26의 내보내기 모드를 선택해야 하는 이유는 무엇입니까?#

  • 다양성: ONNX, TensorRT, CoreML 등을 포함한 다수의 형식으로 내보낼 수 있습니다.
  • 성능: TensorRT를 사용하면 GPU 속도가 최대 5배 향상되며, ONNX나 OpenVINO를 사용하면 CPU 속도가 최대 3배 향상됩니다.
  • 호환성: 수많은 하드웨어 및 소프트웨어 환경에서 모델을 범용적으로 배포할 수 있습니다.
  • 사용 편의성: CLI 및 Python API를 통해 빠르고 간편하게 모델을 내보낼 수 있습니다.

Link to this section내보내기 모드의 주요 기능#

주요 기능은 다음과 같습니다:

  • 원클릭 내보내기: 다양한 형식으로 내보내기 위한 간단한 명령어를 제공합니다.
  • 배치 내보내기: 배치 추론이 가능한 모델을 내보냅니다.
  • 최적화된 추론: 내보낸 모델은 더 빠른 추론 시간을 위해 최적화됩니다.
  • 튜토리얼 비디오: 원활한 내보내기 경험을 위한 상세 가이드와 튜토리얼을 제공합니다.
  • ONNX 또는 OpenVINO로 내보내어 CPU 속도를 최대 3배 향상시킵니다.
  • TensorRT로 내보내어 GPU 속도를 최대 5배 향상시킵니다.

Link to this section사용 예제#

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")

Link to this section인수#

이 표는 YOLO 모델을 다양한 형식으로 내보낼 때 사용할 수 있는 구성과 옵션을 상세히 설명합니다. 이러한 설정은 내보낸 모델의 성능, 크기 및 다양한 플랫폼과 환경 간의 호환성을 최적화하는 데 매우 중요합니다. 적절한 구성을 통해 모델이 의도된 애플리케이션에 최적의 효율성으로 배포될 준비를 갖추게 됩니다.

인수유형기본값설명
formatstr'torchscript''onnx', 'torchscript', 'engine'(TensorRT) 등과 같이 내보낼 모델의 대상 형식입니다. 각 형식은 서로 다른 배포 환경과의 호환성을 가능하게 합니다.
imgszint 또는 tuple640모델 입력에 필요한 이미지 크기입니다. 정사각형 이미지의 경우 정수(예: 640×640의 경우 640)로 지정하거나, 특정 차원을 위해 튜플 (height, width)로 지정할 수 있습니다.
kerasboolFalseTensorFlow SavedModel 형식으로의 내보내기를 활성화하여 TensorFlow 서빙 및 API와의 호환성을 제공합니다.
optimizeboolFalseTorchScript로 내보낼 때 모바일 장치에 최적화를 적용하여 모델 크기를 줄이고 추론 성능을 향상시킬 수 있습니다. NCNN 형식이나 CUDA 장치와는 호환되지 않습니다. DEEPX의 경우, 컴파일 최적화를 높여 추론 지연 시간을 줄이고 컴파일 시간을 늘립니다.
quantizeint 또는 strNone양자화 정밀도: 16 (FP16, 모델 크기를 줄이고 지원되는 하드웨어에서 추론 속도를 높일 수 있음) 또는 8 (INT8/PTQ, accuracy 손실을 최소화하며 주로 edge devices를 위해 모델을 추가 압축, 보정 data/fraction 필요); 32/설정 안 함은 FP32입니다. 혼합 가중치/활성화 정밀도를 지원하는 내보내기 형식은 'w8a8'/'w16a16'/'w8a16' 표기법도 허용합니다. 더 이상 사용되지 않는 half/int8 플래그를 대체합니다(half=True16, int8=True8은 폐기 경고와 함께 여전히 허용됨). 대상 형식에서 지원하는 정밀도만 허용됩니다(아래 참조).
dynamicboolFalseTorchScript, ONNX, OpenVINO, TensorRT 및 CoreML 내보내기에 대해 동적 입력 크기를 허용하여, 다양한 이미지 차원을 처리하는 데 유연성을 높입니다.
simplifyboolTrueonnxslim을 사용하여 ONNX 내보내기를 위한 모델 그래프를 단순화하며, 추론 엔진과의 성능 및 호환성을 향상시킬 수 있습니다.
opsetintNone서로 다른 ONNX 파서 및 런타임과의 호환성을 위해 ONNX opset 버전을 지정합니다. 설정하지 않으면 지원되는 최신 버전을 사용합니다.
workspacefloat 또는 NoneNoneTensorRT 최적화를 위한 최대 작업 공간 크기(GiB 단위)를 설정하여 메모리 사용량과 성능 간의 균형을 맞춥니다. TensorRT가 장치 최대치까지 자동으로 할당하게 하려면 None을 사용하세요.
nmsboolFalse지원되는 경우 내보낸 모델에 NMS(Non-Maximum Suppression)를 추가하여(내보내기 형식 참조) 감지 후처리 효율을 개선합니다. 엔드 투 엔드 모델에서는 사용할 수 없습니다.
batchint1내보낸 모델의 배치 추론 크기 또는 predict 모드에서 모델이 동시에 처리할 최대 이미지 수를 지정합니다. Edge TPU 내보내기의 경우 이 값은 자동으로 1로 설정됩니다.
devicestrNone내보내기(export)를 위한 장치를 지정합니다. GPU(device=0), CPU(device=cpu), Apple 실리콘용 MPS(device=mps), Huawei Ascend NPU(device=npu 또는 device=npu:0), 또는 NVIDIA Jetson용 DLA(device=dla:0 또는 device=dla:1)가 있습니다. TensorRT 내보내기는 자동으로 GPU를 사용하지만, TensorRT 11.0은 DLA를 지원하지 않습니다.
datastrNoneINT8 양자화 보정에 필수적인 dataset 구성 파일 경로입니다. INT8이 활성화된 상태에서 지정하지 않으면 Ultralytics는 필요한 경우 작업별 보정 데이터셋을 선택하거나 모델 작업의 기본 데이터셋으로 대체합니다.
fractionfloat1.0INT8 양자화 보정에 사용할 데이터셋의 비율을 지정합니다. 전체 데이터셋의 하위 집합으로 보정할 수 있게 하여 실험이나 리소스가 제한된 경우에 유용합니다. INT8을 활성화하고 지정하지 않으면 전체 데이터셋이 사용됩니다.
end2endboolNoneNMS-free 추론을 지원하는 YOLO 모델(YOLO26, YOLOv10)의 엔드 투 엔드 모드를 재정의합니다. 이를 False로 설정하면 기존의 NMS 기반 후처리 파이프라인과 호환되도록 모델을 내보낼 수 있습니다. 자세한 내용은 엔드 투 엔드 감지 가이드를 참조하세요.

이러한 파라미터를 조정하면 배포 환경, 하드웨어 제약 조건 및 성능 목표와 같은 특정 요구 사항에 맞춰 내보내기 프로세스를 최적화할 수 있습니다. 모델 크기, 속도, accuracy 간의 최적의 균형을 달성하려면 적절한 형식과 설정을 선택하는 것이 필수적입니다.

Link to this section내보내기 형식#

사용 가능한 YOLO26 내보내기 형식은 아래 표와 같습니다. format 인수를 사용하여 모든 형식으로 내보낼 수 있습니다(예: format='onnx' 또는 format='engine'). 내보낸 모델에 대해 직접 예측하거나 검증할 수 있습니다(예: yolo predict model=yolo26n.onnx). 내보내기가 완료되면 모델에 대한 사용 예시가 표시됩니다. 또한 로컬 설정 없이 Ultralytics Platform의 브라우저에서 직접 모델을 내보낼 수도 있습니다.

형식format 인수모델메타데이터인수
PyTorch-yolo26n.pt-
TorchScripttorchscriptyolo26n.torchscriptimgsz, quantize, dynamic, optimize, nms, batch, device
ONNXonnxyolo26n.onnximgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n_openvino_model/imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n.engineimgsz, quantize, dynamic, simplify, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n.mlpackageimgsz, dynamic, quantize, nms, batch, device
TF SavedModelsaved_modelyolo26n_saved_model/imgsz, keras, quantize, nms, batch, data, fraction, device
TF GraphDefpbyolo26n.pbimgsz, batch, device
TF Litetfliteyolo26n.tfliteimgsz, quantize, nms, batch, data, fraction, device
TF Edge TPUedgetpuyolo26n_edgetpu.tfliteimgsz, quantize, data, fraction, device
TF.jstfjsyolo26n_web_model/imgsz, quantize, nms, batch, data, fraction, device
PaddlePaddlepaddleyolo26n_paddle_model/imgsz, batch, device
MNNmnnyolo26n.mnnimgsz, batch, quantize, device
NCNNncnnyolo26n_ncnn_model/imgsz, quantize, batch, device
IMX500imxyolo26n_imx_model/imgsz, quantize, data, fraction, nms, device
RKNNrknnyolo26n_rknn_model/imgsz, batch, name, quantize, data, fraction, device
ExecuTorchexecutorchyolo26n_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n_axelera_model/imgsz, batch, quantize, data, fraction, device
DEEPXdeepxyolo26n_deepx_model/imgsz, quantize, data, optimize, device
Qualcomm QNNqnnyolo26n_qnn.onnximgsz, batch, name, quantize, data, fraction, device

Link to this section양자화(Quantization) 옵션#

quantize 인수를 사용하여 내보내기 정밀도를 요청합니다. 문자열 값은 대소문자를 구분하지 않으며, Ultralytics는 내보내기 전에 허용되는 별칭을 정규화합니다:

요청 값정규 값의미
8, "8", "int8", "w8a8"8INT8 가중치 및 활성화
16, "16", "fp16", "w16a16"16FP16 가중치 및 활성화
32, "32", "fp32", "w32a32"32FP32 내보내기; quantize를 설정하지 않은 것과 동일한 정밀도
"w8a16""w8a16"FP16 활성화를 사용하는 INT8 가중치

기존의 half=Trueint8=True 플래그는 여전히 허용되지만 더 이상 사용되지 않는다는 경고와 함께 quantize=16quantize=8로 전달됩니다.

모든 내보내기 형식이 모든 정밀도를 지원하는 것은 아닙니다. 명시적인 quantize 요청은 해당 정밀도를 생성하거나 내보내기 전에 실패합니다:

형식FP32 (32/설정 안 함)FP16 (16)INT8 (8)W8A16 ("w8a16")참고
PyTorch해당 없음해당 없음해당 없음네이티브 학습/체크포인트 형식입니다.
TorchScript✅ GPU 전용FP16 TorchScript 내보내기에는 device=0이 필요하며, CPU 내보내기는 FP32입니다.
ONNXINT8은 ONNX Runtime 정적 양자화 및 보정 데이터를 사용합니다.
OpenVINOINT8은 NNCF 학습 후 양자화를 사용합니다.
TensorRTINT8에는 대표 보정 데이터가 필요합니다.
CoreMLCoreML INT8은 가중치 양자화이며, W8A16은 FP16 활성화와 함께 INT8 가중치를 사용합니다.
TF SavedModelINT8 내보내기는 TensorFlow 보정을 사용합니다.
TF GraphDef내보내기 시 정밀도 변환이 없습니다.
TFLiteINT8 내보내기는 TensorFlow 보정을 사용합니다.
Edge TPU✅ 자동Edge TPU는 INT8이 필요하며, 설정하지 않으면 자동으로 활성화됩니다.
TF.jsINT8/FP16은 TensorFlow.js 변환 중에 적용됩니다.
PaddlePaddle내보내기 시 정밀도 변환이 없습니다.
MNNINT8은 MNN 변환을 통한 가중치 양자화입니다.
NCNN모바일/임베디드 런타임 형식입니다.
IMX500✅ 자동IMX500은 양자화가 필요하며, 설정하지 않으면 자동으로 INT8이 활성화됩니다.
RKNN✅ 칩 의존적RK3588/RK3576/RK3566/RK3568/RK3562/RK2118/RV1126B는 FP16 또는 INT8을 지원하며, RV1103/RV1106 변형은 INT8만 지원합니다.
ExecuTorch내보내기 시 정밀도 변환이 없습니다.
Axelera✅ 자동Axelera 내보내기는 INT8이 필요하며, 설정하지 않으면 자동으로 활성화됩니다.
DEEPX✅ 자동DEEPX 내보내기는 INT8이 필요하며, 설정하지 않으면 자동으로 활성화됩니다.
Qualcomm QNN✅ 자동QNN HTP 내보내기는 16비트 활성화가 포함된 INT8 가중치로 고정됩니다.

INT8 및 W8A16 내보내기를 위해서는 대상 통합 문서에서 기본값이나 자동 활성화 동작을 명시하지 않는 한, data 인수를 사용하여 대표 보정 데이터를 제공하십시오(예: data="coco8.yaml").

Link to this sectionFAQ#

Link to this sectionYOLO26 모델을 ONNX 형식으로 내보내려면 어떻게 해야 합니까?#

YOLO26 모델을 ONNX 형식으로 내보내는 것은 Ultralytics를 사용하면 매우 간단합니다. 모델 내보내기를 위해 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 통합 가이드를 참조하십시오.

Link to this section모델 내보내기에 TensorRT를 사용하면 어떤 이점이 있습니까?#

모델 내보내기에 TensorRT를 사용하면 성능이 크게 향상됩니다. TensorRT로 내보낸 YOLO26 모델은 최대 5배의 GPU 속도 향상을 달성할 수 있어 실시간 추론 애플리케이션에 이상적입니다.

  • 다양성: 특정 하드웨어 설정에 맞게 모델을 최적화합니다.
  • 속도: 고급 최적화를 통해 더 빠른 추론을 달성합니다.
  • 호환성: NVIDIA 하드웨어와 원활하게 통합됩니다.

TensorRT 통합에 대해 자세히 알아보려면 TensorRT 통합 가이드를 참조하십시오.

Link to this sectionYOLO26 모델을 내보낼 때 INT8 양자화를 활성화하려면 어떻게 해야 합니까?#

INT8 양자화는 모델을 압축하고 추론 속도를 높이는 아주 좋은 방법이며, 특히 엣지 장치에서 효과적입니다. 다음은 INT8 양자화를 활성화하는 방법입니다:

예시
from ultralytics import YOLO

model = YOLO("yolo26n.pt")  # Load a model
model.export(format="onnx", quantize=8, data="coco8.yaml")

INT8 quantization can be applied to formats such as ONNX, TensorRT, OpenVINO, CoreML, and Rockchip RKNN. For optimal quantization results, provide a representative dataset using the data parameter. See Quantization Options for accepted quantize values and supported formats.

Link to this section모델을 내보낼 때 동적 입력 크기가 중요한 이유는 무엇입니까?#

동적 입력 크기를 사용하면 내보낸 모델이 다양한 이미지 치수를 처리할 수 있어 유연성을 제공하고 다양한 사용 사례에 대한 처리 효율성을 최적화합니다. ONNXTensorRT와 같은 형식으로 내보낼 때 동적 입력 크기를 활성화하면 모델이 서로 다른 입력 형태에 원활하게 적응할 수 있습니다.

이 기능을 활성화하려면 내보내기 중에 dynamic=True 플래그를 사용하십시오:

예시
from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.export(format="onnx", dynamic=True)

동적 입력 크기 조정은 비디오 처리나 다른 소스의 이미지를 처리할 때처럼 입력 치수가 달라질 수 있는 애플리케이션에 특히 유용합니다.

Link to this section모델 성능 최적화를 위해 고려해야 할 주요 내보내기 인수는 무엇입니까?#

모델 성능을 최적화하려면 내보내기 인수를 이해하고 구성하는 것이 중요합니다:

  • format: 내보낸 모델의 대상 형식(예: onnx, torchscript, tensorflow).
  • imgsz: 모델 입력에 필요한 이미지 크기(예: 640 또는 (height, width)).
  • quantize: 양자화 정밀도(예: 8/"int8", 16/"fp16", 32/"fp32" 또는 지원되는 혼합 가중치/활성화 정밀도 내보내기를 위한 "w8a16"). 양자화 옵션을 참조하십시오.
  • optimize: 모바일 또는 제한된 환경을 위한 특정 최적화를 적용합니다.

특정 하드웨어 플랫폼에 배포하려면 NVIDIA GPU용 TensorRT, Apple 장치용 CoreML 또는 Google Coral 장치용 Edge TPU와 같은 특수 내보내기 형식을 사용하는 것을 고려하십시오.

Link to this section내보낸 YOLO 모델에서 출력 텐서는 무엇을 나타냅니까?#

YOLO 모델을 ONNX 또는 TensorRT와 같은 형식으로 내보내면, 출력 텐서 구조는 모델 작업에 따라 달라집니다. 이러한 출력을 이해하는 것은 사용자 지정 추론 구현에 중요합니다.

YOLO26 탐지 모델(예: yolo26n.pt)의 경우, 이를 지원하는 형식에서는 기본적으로 엔드투엔드(end-to-end) 내보내기가 활성화되므로 출력 형상은 (batch_size, max_detections, 6)이며 [x1, y1, x2, y2, confidence, class_id] 값을 가집니다. 기본값인 max_det=300을 사용할 경우, 보통 (batch_size, 300, 6)이 됩니다. 일부 제약이 있는 형식은 엔드투엔드 연산자가 지원되지 않을 때 자동으로 기존 출력 레이아웃으로 대체됩니다.

비 엔드투엔드 탐지 모델이나 end2end=False로 내보낸 YOLO26 모델의 경우, 출력은 일반적으로 (batch_size, 4 + num_classes, num_predictions) 형태의 단일 텐서이며, 채널은 박스 좌표와 클래스별 점수를 나타내고 num_predictions는 내보내기 입력 해상도에 따라 결정됩니다(동적일 수 있음).

세그멘테이션 모델(예: yolo26n-seg.pt)의 경우, 일반적으로 두 개의 출력을 얻게 됩니다: 첫 번째 텐서는 (batch_size, 4 + num_classes + mask_dim, num_predictions) 형태(박스, 클래스 점수, 마스크 계수)이고, 두 번째 텐서는 인스턴스 마스크를 생성하기 위해 계수와 함께 사용되는 마스크 프로토타입을 포함하는 (batch_size, mask_dim, proto_h, proto_w) 형태입니다. 크기는 내보내기 입력 해상도에 따라 달라집니다(동적일 수 있음).

포즈 모델(예: yolo26n-pose.pt)의 경우, 출력 텐서는 일반적으로 (batch_size, 4 + num_classes + keypoint_dims, num_predictions) 형태이며, 여기서 keypoint_dims는 포즈 사양(예: 키포인트 수와 신뢰도 포함 여부)에 따라 달라지고, num_predictions는 내보내기 입력 해상도에 따라 달라집니다(동적일 수 있음).

ONNX 추론 예제의 예제는 각 모델 유형에 대해 이러한 출력을 처리하는 방법을 보여줍니다.

Link to this sectionWhy is output0 FP32 when exporting quantized models with end2end=True?#

quantize=16(FP16) 또는 quantize=8(INT8)로 내보낼 때, 대부분의 텐서는 모델 크기를 줄이고 성능을 향상시키기 위해 낮은 정밀도로 변환됩니다. 그러나 end2end=True가 활성화되면 사후 처리(클래스 인덱스 포함)가 내보내진 그래프에 직접 포함됩니다.

output0 텐서는 내부적으로 부동 소수점 값으로 표현되는 클래스 인덱스를 포함합니다. FP16은 제한된 가수 정밀도로 인해 2048 이상의 정수 값을 안정적으로 표현할 수 없습니다. 잠재적인 정밀도 손실이나 잘못된 클래스 ID를 방지하기 위해 output0은 의도적으로 FP32로 유지됩니다.

이 동작은 예상된 결과이며 클래스 인덱스 정확도를 유지해야 하는 낮은 정밀도 또는 양자화된 내보내기에도 적용됩니다.

전체 FP16 출력이 필요한 경우 end2end=False로 내보내고 외부에서 후처리를 수행하십시오.

댓글