Ultralytics YOLO 모델 내보내기#
소개#
모델 학습의 궁극적인 목표는 실제 애플리케이션에 배포하는 것입니다. Ultralytics YOLO26의 내보내기 모드는 학습된 모델을 다양한 포맷으로 내보낼 수 있는 다양한 옵션을 제공하여, 다양한 플랫폼과 디바이스에 배포할 수 있도록 지원합니다. 이 종합 가이드는 모델 내보내기의 세부적인 내용을 안내하며, 최대의 호환성과 성능을 달성하는 방법을 보여줍니다.
예정된 내보내기 지원에 대해서는 미출시 YOLO27 미리보기를 참조하십시오.
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를 제공합니다.
내보내기 모드의 주요 기능#
주요 기능은 다음과 같습니다:
- 원클릭 내보내기: 다양한 포맷으로 내보내기 위한 간단한 명령어입니다.
- 배치 내보내기: 배치 추론이 가능한 모델을 내보냅니다.
- 최적화된 추론: 내보낸 모델은 더 빠른 추론 시간을 위해 최적화됩니다.
- 튜토리얼 비디오: 원활한 내보내기 경험을 위한 심층 가이드 및 튜토리얼입니다.
사용 예시#
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")Arguments#
이 표는 YOLO 모델을 다양한 포맷으로 내보내는 데 사용할 수 있는 구성과 옵션을 자세히 설명합니다. 이러한 설정은 다양한 플랫폼과 환경에서 내보낸 모델의 성능, 크기 및 호환성을 최적화하는 데 매우 중요합니다. 적절한 구성을 통해 모델이 최적의 효율성으로 의도된 애플리케이션에 배포될 준비가 되도록 보장합니다.
| 인수 | 유형 | 기본값 | 설명 |
|---|---|---|---|
format | str | 'torchscript' | 'onnx', 'torchscript', 'engine'(TensorRT) 또는 기타 형식과 같은 export된 모델의 대상 형식입니다. 각 형식은 서로 다른 배포 환경과의 호환성을 제공합니다. |
name | str | None | 하드웨어 대상이 필요한 형식의 하드웨어 대상 이름입니다. Hailo 아키텍처('hailo8', 'hailo8l', 'hailo10h', 'hailo15h', 'hailo15l'; 기본값은 'hailo8l'), Rockchip RKNN 칩(기본값은 'rk3588'), Huawei Ascend SoC(CANN --soc_version; 기본값은 'Ascend310B4') 또는 Qualcomm QNN HTP 대상(기본값은 '73')입니다. 다른 모드에서 사용하는 project/name 실행 이름 지정 쌍과는 다릅니다. |
imgsz | int 또는 tuple | 640 | 모델 입력에 사용할 원하는 이미지 크기입니다. 정사각형 이미지의 경우 정수(예: 640×640의 경우 640)로 지정하거나, 특정 크기의 경우 튜플 (height, width)로 지정할 수 있습니다. 전달하지 않으면 export는 로드된 체크포인트에 기록된 학습 크기를 재사용합니다. 공식 YOLO26 체크포인트는 depth에 768, classify에 224, OBB에 1024, 기타 작업에 640를 기록하며, fine-tune 모델은 학습된 imgsz을 기록합니다. YAML에서 생성된 모델에는 기록된 학습 크기가 없으므로 640을 사용합니다. |
keras | bool | False | TensorFlow SavedModel용 Keras 형식으로의 export를 활성화하여 TensorFlow serving 및 API와의 호환성을 제공합니다. |
optimize | bool | False | DEEPX에 대해 더 높은 컴파일러 최적화를 활성화하여 컴파일 시간은 늘리지만 inference 지연 시간을 줄입니다. |
quantize | int 또는 str | None | 양자화 정밀도: 16 (FP16, 모델 크기를 줄이고 지원되는 하드웨어에서 추론 속도를 높일 수 있음) 또는 8 (INT8/PTQ, 최소한의 정확도 손실로 모델을 추가 압축하며, 주로 엣지 디바이스용으로 사용됨; data/fraction 캘리브레이션 필요); 32/미설정 시 FP32. quantize=8로 학습된 체크포인트는 항상 INT8을 내보냄: onnx 및 engine는 캘리브레이션 없이 체크포인트가 포함한 범위를 기반으로 내보내며, 다른 포맷이나 정밀도는 거부됨. 혼합 가중치/활성화 정밀도를 지원하는 내보내기 포맷은 'w8a8'/'w16a16'/'w8a16'/'w8a32' 표기법도 허용함. 지원 중단된 half/int8 플래그(half=True → 16, int8=True → 8, 지원 중단 경고와 함께 여전히 허용됨)를 대체함. 타겟 포맷에서 지원하는 정밀도만 허용됨 (아래 참조). |
dynamic | bool | False | TorchScript, ONNX, OpenVINO, TensorRT 및 CoreML export에서 동적 입력 크기를 허용하여 다양한 이미지 크기를 더욱 유연하게 처리할 수 있습니다. |
simplify | bool | True | 중간 ONNX 그래프를 생성하는 export의 경우 onnxslim을 사용해 그래프를 단순화합니다(Export 형식 참조). 이를 통해 inference 엔진의 성능과 호환성이 향상될 수 있습니다. |
opset | int | None | ONNX 그래프를 생성하는 export의 ONNX opset 버전을 지정합니다(Export 형식 참조). 이를 통해 다양한 ONNX parser 및 runtime과 호환할 수 있습니다. 설정하지 않으면 지원되는 최신 버전을 사용합니다. |
workspace | float 또는 None | None | TensorRT 최적화를 위한 최대 workspace 크기를 GiB 단위로 설정하여 메모리 사용량과 성능의 균형을 맞춥니다. TensorRT가 디바이스의 최대값까지 자동으로 할당하도록 하려면 None을 사용합니다. |
nms | bool, 선택 사항 | None | None은 외부 NMS를 위해 원시 일대다 예측을 내보내고, True은 지원되는 경우 NMS를 내장하며, False는 사용 가능한 경우 NMS가 없는 헤드를 선택합니다. CoreML 내장 NMS는 고정 형태의 detect, segment 및 pose를 지원합니다. End-to-End Detection guide를 참조하세요. |
conf | float | None | export 시 NMS가 생성되는 모든 곳에서 사용하는 confidence threshold입니다: nms=True export, Hailo의 non-end-to-end detect export, 그리고 내부적으로 nms=True을 강제하는 IMX의 detect, pose 및 segment export에 적용됩니다. 설정하지 않으면 기본값은 0.25입니다. |
iou | float | 0.7 | export 시 NMS가 생성되는 모든 곳에서 사용하는 IoU threshold입니다: nms=True export, Hailo의 non-end-to-end detect export, 그리고 내부적으로 nms=True를 강제하는 IMX의 detect, pose 및 segment export에 적용됩니다. |
max_det | int | 300 | 내보낸 모델의 출력에 유지되는 최대 감지 수입니다. 네이티브 NMS 파이프라인에 감지 제한이 없는 CoreML 감지를 제외한 모든 형식의 nms=True 내보내기와 NMS 없는 엔드투엔드 감지 내보내기(사용 가능한 앵커 수로 제한되는 YOLO26 및 YOLOv10), 그리고 IMX의 detect, pose, segment 내보내기에 적용됩니다. |
agnostic_nms | bool | False | 표준 nms=True 파이프라인을 통해 export 시 NMS가 생성되는 모든 곳에서 class-agnostic NMS를 활성화하며, CoreML 자체의 NMS 단계도 포함됩니다. 이를 통해 동일한 클래스 내에서만이 아니라 서로 다른 클래스 간에도 점수가 낮은 겹치는 박스를 억제합니다. Hailo 또는 IMX 자체에서 생성하는 NMS 구성에는 class-agnostic 옵션이 없으므로 이 플래그를 사용해도 적용되지 않으며, 항상 class-aware로 유지됩니다. 또한 NMS가 없는 end-to-end export(YOLO26, YOLOv10)에도 내장됩니다. 이 경우 동일한 detection이 여러 클래스 레이블로 나타나는 것(IoU=1.0 중복)만 방지하며, 서로 다른 박스 간의 IoU threshold 억제에는 영향을 주지 않습니다. |
batch | int | 1 | export된 모델의 batch inference 크기 또는 predict 모드에서 export된 모델이 동시에 처리할 최대 이미지 수를 지정합니다. Edge TPU export의 경우 자동으로 1로 설정됩니다. |
device | str | None | export에 사용할 디바이스를 지정합니다: 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 export는 자동으로 GPU를 사용하지만 TensorRT 11.0은 DLA를 지원하지 않습니다. |
verbose | bool | False | format='engine' export 중 TensorRT builder 로그의 심각도 수준을 VERBOSE로 높입니다. 다른 export 형식에서는 무시됩니다. |
data | str | None | 데이터셋 YAML 파일 경로로, INT8 양자화 캘리브레이션에 필수적임; 분류의 경우 데이터셋 디렉토리나 기본 제공 데이터셋 이름을 대신 사용함. INT8이 활성화된 상태에서 지정되지 않은 경우, Ultralytics는 필요한 경우 태스크별 캘리브레이션 데이터셋을 선택하거나 모델 태스크의 기본 데이터셋으로 대체함. quantize=8로 학습된 체크포인트는 자체 INT8 범위를 포함하고 있으며 캘리브레이션 데이터가 필요하지 않음. |
split | str | 'val' | data에서 INT8 양자화 calibration dataloader를 생성하는 데 사용할 데이터셋 분할('train', 'val' 또는 'test')입니다. |
fraction | float, int 또는 list | 1.0 | INT8 calibration에 사용할 데이터셋 하위 집합입니다. 비율, 이미지 수 또는 [train, val, test] 값으로 지정합니다. 1은 전체 분할을 의미하고, 1보다 큰 정수는 이미지 수를 의미하며, 선택적 test 항목만 0/0.0를 사용해 없음을 나타낼 수 있습니다. 두 항목으로 구성된 목록은 test를 전체로 유지합니다. |
이 매개변수를 조정하면 배포 환경, 하드웨어 제약 조건 및 성능 목표와 같은 특정 요구 사항에 맞게 내보내기 프로세스를 사용자 지정할 수 있습니다. 적절한 포맷과 설정을 선택하는 것은 모델 크기, 속도 및 정확도 간의 최상의 균형을 달성하는 데 필수적입니다.
내보내기 형식#
사용 가능한 YOLO26 내보내기 포맷은 아래 표에 있습니다. format 인수를 사용하여 format='onnx' 또는 format='engine' 등 모든 포맷으로 내보낼 수 있습니다. yolo predict model=yolo26n.onnx과 같이 내보낸 모델에 대해 직접 예측하거나 검증할 수 있습니다. 사용 예시는 내보내기가 완료된 후 모델에 대해 표시됩니다. 로컬 설정 없이 Ultralytics Platform의 브라우저에서 직접 모델을 내보낼 수도 있습니다.
| 형식 | format Argument | 모델 | Metadata | Arguments |
|---|---|---|---|---|
| PyTorch | - | yolo26n.pt | ✅ | - |
| TorchScript | torchscript | yolo26n.torchscript | ✅ | imgsz, quantize, dynamic, nms, batch, device |
| ONNX | onnx | yolo26n.onnx | ✅ | imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device |
| OpenVINO | openvino | yolo26n_openvino_model/ | ✅ | imgsz, quantize, dynamic, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n.engine | ✅ | imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n.mlpackage | ✅ | imgsz, dynamic, quantize, nms, batch, device |
| TF SavedModel | saved_model | yolo26n_saved_model/ | ✅ | imgsz, keras, quantize, opset, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n.pb | ❌ | imgsz, opset, batch, device |
| TF Edge TPU | edgetpu | yolo26n_edgetpu.tflite | ✅ | imgsz, quantize, opset, data, fraction, device |
| PaddlePaddle | paddle | yolo26n_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n.mnn | ✅ | imgsz, batch, dynamic, quantize, simplify, opset, nms, device |
| NCNN | ncnn | yolo26n_ncnn_model/ | ✅ | imgsz, quantize, batch, device |
| IMX500 | imx | yolo26n_imx_model/ | ✅ | imgsz, quantize, data, fraction, nms, device |
| RKNN | rknn | yolo26n_rknn_model/ | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| ExecuTorch | executorch | yolo26n_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n_axelera_model/ | ✅ | imgsz, batch, quantize, data, fraction, device |
| DEEPX | deepx | yolo26n_deepx_model/ | ✅ | imgsz, quantize, simplify, opset, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n_qnn.onnx | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| LiteRT | litert | yolo26n.tflite | ✅ | imgsz, quantize, batch, data, fraction, device |
| Hailo | hailo | yolo26n_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou |
| Huawei Ascend | ascend | yolo26n_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms |
| Apple Core AI | coreai | yolo26n.aimodel | ✅ | imgsz, batch, quantize |
nms=None은(는) 외부 NMS에 대해 기본적으로 원시 출력을 사용합니다. 사용 가능한 NMS 프리 헤드를 선택하려면 nms=False을(를) 설정하세요. 지원되지 않는 형식은 기본 출력 경로로 대체됩니다. 위의 nms 항목은 nms=True(으)로 NMS를 임베드할 수 있는 형식을 식별합니다.
대부분의 포맷에는 ultralytics와 함께 설치되지 않는 패키지가 필요합니다. 누락된 패키지가 있는 경우, 내보내기는 uv 또는 pip를 사용하여 런타임에 이를 설치하며, Linux의 경우 Edge TPU 컴파일러나 IMX용 Java 같은 시스템 패키지를 위해 apt을 사용하여 설치합니다. 컨테이너 이미지, CI 작업 또는 프로덕션 서비스 등에서 환경을 고정 상태로 유지하려면 YOLO_AUTOINSTALL=False를 설정하십시오. 이 경우 내보내기는 여전히 누락된 패키지를 확인하고 보고하지만, 환경을 변경하지 않은 채 패키지가 설치될 때까지 실패 처리합니다.
export YOLO_AUTOINSTALL=False양자화 옵션#
quantize 인수를 사용하여 내보내기 정밀도를 요청하십시오. 문자열 값은 대소문자를 구분하지 않으며, Ultralytics는 내보내기 전에 허용된 별칭을 정규화합니다:
| 요청 값 | 정규화된 값 | 의미 |
|---|---|---|
8, "8", "int8", "w8a8" | 8 | INT8 가중치 및 활성화 |
16, "16", "fp16", "w16a16" | 16 | FP16 가중치 및 활성화 |
32, "32", "fp32", "w32a32" | 32 | FP32 내보내기; 기본값이 FP16인 CoreML NMS ML 프로그램은 제외하고 미설정 시와 동일함 |
"w8a16" | "w8a16" | 16비트 활성화가 포함된 INT8 가중치(FP16; LiteRT의 경우 INT16) |
"w8a32" | "w8a32" | FP32 활성화가 포함된 INT8 가중치(LiteRT 동적 INT8, 보정 불필요) |
레거시 half=True 및 int8=True 플래그는 여전히 지원 중단 경고와 함께 허용되며 quantize=16 및 quantize=8으로 전달됩니다.
모든 내보내기 포맷이 모든 정밀도를 지원하는 것은 아닙니다. 명시적인 quantize 요청은 해당 정밀도를 생성하거나 내보내기 전에 실패합니다:
| 형식 | FP32 (32/미설정) | FP16 (16) | INT8 (8) | W8A16 ("w8a16") | 참고 |
|---|---|---|---|---|---|
| PyTorch | ✅ | 해당 없음 | 해당 없음 | 해당 없음 | 기본 학습/체크포인트 포맷입니다. |
| TorchScript | ✅ | ✅ GPU 전용 | ❌ | ❌ | FP16 TorchScript 내보내기에는 device=0이 필요합니다. CPU 내보내기는 FP32입니다. |
| ONNX | ✅ | ✅ | ✅ | ❌ | INT8은 ONNX Runtime 정적 양자화 및 보정 데이터를 사용합니다. |
| OpenVINO | ✅ | ✅ | ✅ | ❌ | INT8은 NNCF 학습 후 양자화를 사용합니다. |
| TensorRT | ✅ | ✅ | ✅ | ❌ | INT8에는 대표 보정 데이터가 필요합니다. |
| CoreML | ✅¹ | ✅ | ✅ | ✅ | CoreML INT8은 가중치 양자화이며, W8A16은 FP16 활성화와 함께 INT8 가중치를 사용합니다. ¹미설정된 NMS ML 프로그램은 기본적으로 FP16으로 설정됩니다. |
| TF SavedModel | ✅ | ❌ | ✅ | ❌ | INT8 내보내기는 TensorFlow 보정을 사용합니다. |
| TF GraphDef | ✅ | ❌ | ❌ | ❌ | 내보내기 시 정밀도 변환이 없습니다. |
| Edge TPU | ❌ | ❌ | ✅ 자동 | ❌ | Edge TPU에는 INT8이 필요하며 미설정 시 자동으로 활성화됩니다. |
| PaddlePaddle | ✅ | ❌ | ❌ | ❌ | 내보내기 시 정밀도 변환이 없습니다. |
| MNN | ✅ | ✅ | ✅ | ❌ | INT8은 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 가중치로 고정됩니다. |
| LiteRT | ✅ | ❌ | ✅ | ✅ | 정적 INT8 (8) 및 "w8a16" (int8 가중치 + int16 활성화)은 보정 데이터를 사용하며, "w8a32" 동적 INT8(보정 없음)도 지원합니다. quantize=16은 별도의 내보내기가 아니며, FP32 모델은 GPU 델리게이트를 통해 런타임에 FP16으로 실행됩니다. |
| Hailo | ❌ | ❌ | ✅ 자동 | ❌ | Hailo export requires INT8; it is auto-enabled when unset. |
| Huawei Ascend | ❌ | ✅ 자동 | ❌ | ❌ | Ascend AI Core 컨볼루션은 FP16/INT8 입력만 허용하므로 ATC는 FP16을 컴파일하며미설정 시 자동으로 활성화됩니다. |
| Core AI | ✅ | ✅ | ❌ | ❌ | FP32 by default or an FP16 .aimodel asset with quantize=16; no INT8 path. |
INT8 및 W8A16 내보내기의 경우, 대상 통합에서 기본값 또는 자동 활성화 동작을 문서화하지 않는 한 data(data="coco8.yaml" 등)을 사용하여 대표 보정 데이터를 제공하십시오. LiteRT "w8a32"(동적 INT8) 방식은 보정 데이터가 필요하지 않습니다.
양자화 인식 학습#
위의 INT8 내보내기는 사후 학습 양자화(PTQ)입니다. data을 통한 단일 보정 패스에서 범위가 관측됩니다. 양자화 인식 학습(QAT)은 대신 루프 내 가상 양자화를 통한 미세 조정을 통해 INT8을 견디는 가중치를 학습하며, 이는 보정 단독으로는 손실되는 정확도를 복구합니다. 사전 학습된 체크포인트를 미세 조정하려면 train에 quantize=8을 전달한 다음 평소와 같이 내보내십시오.
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
model.train(
data="coco.yaml",
quantize=8,
epochs=5,
batch=64,
optimizer="AdamW",
lr0=0.00001,
lrf=0.1,
warmup_epochs=0.5,
cos_lr=True,
mosaic=0.0,
)
model.export(format="engine", quantize=8) # ranges travel with the checkpoint, no calibration data needed사전 학습된 체크포인트를 미세 조정할 때는 작은 학습률을 사용하십시오. 양자화 인식 학습은 초기에는 정확도를 저하시킬 수 있으며, 학습 후 양자화에 대한 이점은 모델, 데이터셋, 학습 예산에 따라 다릅니다. 내보낸 모델을 원래 체크포인트 및 학습 후 양자화된 내보내기와 비교하여 검증하십시오. 학습 중의 가짜 양자화 점수는 배포 정확도를 확립하지 못합니다.
QAT의 가치는 내보내기 백엔드 자체의 보정이 모델을 얼마나 잘 처리하는지에 따라 달라집니다. 아래 값들은 imgsz=640 및 배치 1의 TensorRT 10.16 엔진으로 측정된 COCO val2017에서의 mAP50-95이며, 각 QAT 체크포인트는 epochs=20 patience=3로 학습되었습니다.
| 모델 | FP32 엔진 | PTQ INT8 엔진 | QAT INT8 엔진 |
|---|---|---|---|
yolo26n | 0.4032 | 0.3934 | 0.3935 |
yolo26s | 0.4794 | 0.4412 | 0.4711 |
yolo26m | 0.5269 | 0.4696 | 0.5137 |
yolo26l | 0.5440 | 0.4889 | 0.5307 |
yolo26x | 0.5701 | 0.5138 | 0.5527 |
QAT는 전체 범위에 걸쳐 FP32 대비 0.008에서 0.017의 mAP50-95 손실을 발생시키는 반면, 사후 학습 양자화는 yolo26n에서 0.010, 더 큰 모델들에서 0.038에서 0.057의 손실을 발생시킵니다. 따라서 QAT는 보정이 이미 잘 작동하는 가장 작은 모델에서는 거의 이점이 없으며, 나머지 모델에서는 0.030에서 0.044의 이점을 제공합니다. 다른 데이터셋, 내보내기 형식 또는 TensorRT 버전에서는 다른 수치가 나올 수 있으므로 직접 측정해 보십시오.
양자화 인식 학습 모델에는 compile=False이 필요하며, ModelOpt의 양자화된 모듈은 torch.compile을 지원하지 않습니다.
INT8 정확도 손실을 제한하기 위해 헤드의 최종 출력 컨볼루션은 의도적으로 float 상태로 유지됩니다. TensorRT는 양자화되지 않은 레이어에 대해 FP16 혼합 정밀도를 활성화합니다. QAT는 최초 사용 시 자동으로 설치되는 NVIDIA TensorRT Model Optimizer를 통해 실행되며, 결과 체크포인트를 로드하려면 이를 설치해야 합니다. 해당 범위는 체크포인트와 함께 전달되며, onnx 및 engine 내보내기는 이를 Q/DQ 노드로 출력합니다. 다른 형식은 대신 캘리브레이션을 읽으며 QAT 체크포인트를 거부합니다.
다음 단계#
내보낸 모델을 실행하는 방법에 대한 배포 대상의 통합 가이드(ONNX, TensorRT, CoreML 등은 전체 통합 목록에 있음)를 찾으십시오.
FAQ#
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로 내보낸 YOLO26 모델은 최대 5배의 GPU 속도 향상을 달성할 수 있어 실시간 추론 애플리케이션에 이상적입니다.
- 다재다능함: 특정 하드웨어 설정에 맞게 모델을 최적화합니다.
- 속도: 고급 최적화를 통해 더 빠른 추론을 달성합니다.
- 호환성: NVIDIA 하드웨어와 원활하게 통합됩니다.
TensorRT 통합에 대해 자세히 알아보려면 TensorRT 통합 가이드를 참조하십시오.
INT8 양자화는 특히 엣지 디바이스에서 모델을 압축하고 추론 속도를 높이는 훌륭한 방법입니다. INT8 양자화를 활성화하는 방법은 다음과 같습니다:
예시from ultralytics import YOLO model = YOLO("yolo26n.pt") # Load a model model.export(format="onnx", quantize=8, data="coco8.yaml")INT8 양자화는 ONNX, TensorRT, OpenVINO, CoreML, Rockchip RKNN과 같은 포맷에 적용할 수 있습니다. 최적의 양자화 결과를 얻으려면
data매개변수를 사용하여 대표 데이터셋을 제공하십시오. 허용되는quantize값과 지원되는 포맷에 대해서는 양자화 옵션을 참조하십시오.동적 입력 크기를 사용하면 내보낸 모델이 다양한 이미지 크기를 처리할 수 있어 유연성을 제공하고 다양한 사용 사례에 대한 처리 효율성을 최적화할 수 있습니다. ONNX 또는 TensorRT와 같은 포맷으로 내보낼 때 동적 입력 크기를 활성화하면 모델이 다양한 입력 형태에 원활하게 적응할 수 있습니다.
이 기능을 활성화하려면 내보내는 동안
dynamic=True플래그를 사용하십시오:예시from ultralytics import YOLO model = YOLO("yolo26n.pt") model.export(format="onnx", dynamic=True)동적 입력 크기 조정은 비디오 처리나 다양한 소스의 이미지를 처리할 때와 같이 입력 치수가 달라질 수 있는 애플리케이션에 특히 유용합니다.
모델 성능을 최적화하려면 내보내기 인수를 이해하고 구성하는 것이 매우 중요합니다:
format:내보낸 모델의 대상 포맷입니다 (예:onnx,torchscript,saved_model).imgsz:모델 입력에 원하는 이미지 크기입니다 (예:640또는(height, width)).quantize:8/"int8",16/"fp16",32/"fp32"같은 양자화 정밀도, 또는 지원되는 포맷에서의 혼합 가중치/활성화 방식"w8a16"및"w8a32"(LiteRT 동적 INT8)입니다. 양자화 옵션을 참조하십시오.optimize:DEEPX 내보내기를 위한 더 높은 컴파일러 최적화를 활성화합니다.
특정 하드웨어 플랫폼에 배포하려면 NVIDIA GPU용 TensorRT, Apple 디바이스용 CoreML, 또는 Google Coral 디바이스용 Edge TPU와 같은 특수 내보내기 포맷 사용을 고려하십시오.
YOLO 모델을 ONNX 또는 TensorRT와 같은 포맷으로 내보낼 때 출력 텐서 구조는 모델 작업에 따라 다릅니다. 이러한 출력을 이해하는 것은 사용자 지정 추론 구현에 중요합니다.
nms=False(으)로 내보낸 YOLO26 감지 모델(예:yolo26n.pt)의 경우, 지원되는 포맷은[x1, y1, x2, y2, confidence, class_id]값과 함께(batch_size, max_detections, 6)형태의 NMS가 필요 없는 출력을 생성합니다. 기본값인max_det=300를 사용할 경우 이는 일반적으로(batch_size, 300, 6)(이)가 됩니다. 일부 제약이 있는 포맷은 엔드투엔드 연산자가 지원되지 않을 때 자동으로 기존 출력 레이아웃으로 대체됩니다.기본적으로(
nms=None) YOLO26을 포함한 감지 모델은 원시 일대다(one-to-many) 예측을 내보냅니다. 출력은 일반적으로 채널이 박스 좌표와 클래스별 점수를 나타내는(batch_size, 4 + num_classes, num_predictions)형태의 단일 텐서이며,num_predictions은(는) 내보내기 입력 해상도에 따라 다릅니다(동적일 수도 있습니다). End-to-End Detection 가이드에서는 엔드투엔드 출력을 유지하는 포맷을 다룹니다.세분화 모델(예:
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 추론 예시의 예시에서는 각 모델 유형에 대해 이러한 출력을 처리하는 방법을 보여줍니다.
Ultralytics는 현재 YOLO 모델을 위한 전용 C++ 추론 API를 제공하지 않습니다. C++ 배포의 경우, 모델을 ONNX, TensorRT, TorchScript 또는 MNN과 같은 런타임 포맷으로 내보낸 다음 해당 런타임의 기본 C++ API로 내보낸 아티팩트를 로드하십시오.
예를 들어,
yolo export model=yolo26n.pt format=onnx(으)로 감지 모델을 내보내고 ONNX Runtime C++로.onnx파일을 실행하거나,format=engine(으)로 내보내고 TensorRT C++ 애플리케이션에서 TensorRT 엔진을 실행하십시오. 사용자 정의 C++ 후처리를 사용할 때는 태스크 및 내보내기 설정에 맞게 출력 텐서 레이아웃을 일치시키십시오. 기본 YOLO26 감지 내보내기는 외부 NMS가 필요한 원시 예측 텐서를 반환합니다.nms=False(으)로 내보내어(batch, max_det, 6)형태의 NMS가 필요 없는 감지 결과를 얻거나,nms=True(으)로 내보내어 지원되는 포맷에 NMS를 내장할 수 있습니다.quantize=16(FP16) 또는quantize=8(INT8)로 내보낼 때 모델 크기를 줄이고 성능을 향상시키기 위해 대부분의 텐서가 낮은 정밀도로 변환됩니다. 그러나nms=False가 활성화되면 클래스 인덱스를 포함한 후처리가 내보낸 그래프에 직접 임베디드됩니다.output0텐서에는 클래스 인덱스가 포함되어 있으며, 이는 내부적으로 부동 소수점 값으로 표현됩니다. FP16은 제한된 가수 정밀도로 인해 2048을 초과하는 정수 값을 안정적으로 표현할 수 없습니다. 잠재적인 정밀도 손실이나 잘못된 클래스 ID를 방지하기 위해output0은 의도적으로 FP32로 유지됩니다.이 동작은 예상된 것이며 클래스 인덱스 충실도를 유지해야 하는 저정밀도 또는 양자화된 내보내기에도 적용됩니다.
전체 FP16 출력이 필요한 경우
nms=None으로 내보내고 후처리를 외부에서 수행하십시오.