Ultralytics YOLO를 사용한 모델 벤치마킹#
벤치마크 시각화#
소개#
모델을 학습하고 검증한 후에는 다양한 실제 시나리오에서 모델의 성능을 평가하는 것이 다음 단계입니다. Ultralytics YOLO26의 벤치마크 모드는 다양한 내보내기 형식에서 모델의 속도와 정확도를 평가할 수 있는 견고한 프레임워크를 제공합니다.
예비 속도 벤치마크는 출시 예정인 YOLO27 미리 보기를 참조하세요.
시청: Ultralytics YOLO26 모델 벤치마크 | 다양한 하드웨어에서 모델 성능을 비교하는 방법
벤치마킹이 중요한 이유#
- 정보에 기반한 의사 결정: 속도와 정확도 간의 절충 관계를 파악합니다.
- 리소스 할당: 다양한 내보내기 형식이 서로 다른 하드웨어에서 어떻게 작동하는지 파악합니다.
- 최적화: 특정 사용 사례에서 어떤 내보내기 형식이 최상의 성능을 제공하는지 확인합니다.
- 비용 효율성: 벤치마크 결과를 바탕으로 하드웨어 리소스를 더 효율적으로 사용합니다.
벤치마크 모드의 주요 지표#
- mAP50-95: 객체 감지, 인스턴스 분할, 포즈 추정 및 OBB에 사용됩니다.
- mIoU: 시맨틱 분할에 사용됩니다.
- delta1: 깊이 추정에 사용됩니다.
- accuracy_top1: 이미지 분류에 사용됩니다.
- 추론 시간: 각 이미지를 처리하는 데 걸리는 시간(밀리초)입니다.
지원되는 내보내기 형식#
- ONNX: 최적의 CPU 성능을 제공합니다.
- TensorRT: GPU 효율성을 극대화합니다.
- OpenVINO: Intel 하드웨어 최적화에 사용됩니다.
- CoreML, TensorFlow SavedModel 등: 다양한 배포 요구 사항을 충족합니다.
- ONNX 또는 OpenVINO로 내보내면 CPU 속도를 최대 3배 높일 수 있습니다.
- TensorRT로 내보내면 GPU 속도를 최대 5배 높일 수 있습니다.
사용 예시#
누락된 패키지를 방지하려면 벤치마킹 전에 내보내기 종속 항목과 함께 Ultralytics를 설치하세요.
pip install ultralytics[export]지원되는 모든 내보내기 형식(ONNX, TensorRT 등)에서 YOLO26n 벤치마크를 실행합니다. 내보내기 옵션 전체 목록은 아래 인수 섹션을 참조하세요.
from ultralytics.utils.benchmarks import benchmark
# GPU에서 벤치마크
benchmark(model="yolo26n.pt", data="coco8.yaml", imgsz=640, device=0)
# 특정 내보내기 형식 벤치마크
benchmark(model="yolo26n.pt", data="coco8.yaml", imgsz=640, format="onnx")인수#
model, data, imgsz, quantize, device, verbose 및 format과 같은 인수를 사용하면 필요에 맞게 벤치마크를 세밀하게 조정하고 다양한 내보내기 형식의 성능을 쉽게 비교할 수 있습니다.
| 키 | 기본값 | 설명 |
|---|---|---|
model | None | 모델 파일의 경로를 지정합니다. .pt 및 .yaml 형식을 모두 지원합니다. 예를 들어 사전 학습된 모델이나 구성 파일에는 "yolo26n.pt"를 사용할 수 있습니다. |
data | None | 벤치마킹에 사용할 데이터셋 YAML의 경로이며, 일반적으로 검증 데이터의 경로와 설정이 포함됩니다. 예: "coco8.yaml". 분류 작업에서는 데이터셋 디렉터리나 내장 데이터셋 이름(예: imagenet10)을 사용합니다. |
imgsz | 640 | 모델의 입력 이미지 크기입니다. 정사각형 이미지에는 단일 정수를 사용해야 합니다(예: 640). benchmark()은 정사각형 이미지 크기만 지원합니다. |
quantize | None | 요청된 정밀도: FP16의 경우 16, INT8의 경우 8(PTQ 방식은 보정용 data/fraction이 필요하지만 가중치 전용 방식은 필요하지 않음)입니다. 32/설정되지 않음은 해당 형식에서 지원되는 경우 FP32를 의미합니다. FP32로 내보낼 수 없는 형식은 명시적으로 지정된 32를 거부하거나 필요한 정밀도로 대체합니다. 네이티브 PyTorch 행은 내보내지 않습니다. 16만 이 행에 적용되며, CPU가 아닌 장치에서 FP16 추론을 선택합니다. 그렇지 않으면 FP32로 실행됩니다. 각 형식은 이후 자체 런타임 정밀도로 추론을 실행합니다. 더 이상 사용되지 않는 half/int8 플래그를 대체합니다. |
device | None | 벤치마킹을 위한 연산 장치를 지정합니다(예: "cpu" 또는 "cuda:0"). 설정하지 않으면 사용 가능한 첫 번째 GPU를 사용하고, GPU가 없으면 CPU를 사용합니다. |
verbose | False | True 또는 부동 소수점 값을 지정하면 어설션을 제외한 벤치마크 실패 시 오류를 기록하는 대신 예외를 발생시킵니다. 0.25과 같은 부동 소수점 값은 성공한 각 형식의 지표가 해당 하한값을 초과하는지도 어설션합니다. |
eps | 0.001 | 이미지별 추론 시간에 더한 뒤 FPS로 변환하는 작은 엡실론 값(밀리초)으로, 0으로 나누는 문제를 방지합니다. 변경하는 경우는 드뭅니다. |
format | '' | 지정한 내보내기 형식(예: format=onnx)만 벤치마킹합니다. 모든 지원 형식을 자동으로 테스트하려면 비워 두세요. |
독립형 benchmark() 함수(from ultralytics.utils.benchmarks import benchmark)는 위 표의 값이 아니라 자체 시그니처 기본값을 사용합니다. 특히 model="yolo26n.pt", imgsz=160 및 device="cpu"가 이에 해당합니다. yolo benchmark CLI와 동일하게 설정하려면 imgsz 및 device을 명시적으로 전달하세요.
내보내기 형식#
아래에 나열된 가능한 모든 내보내기 형식에서 벤치마크 실행을 자동으로 시도합니다. 또는 format 인수를 사용하여 특정 형식의 벤치마크를 실행할 수 있으며, 이 인수에는 아래에 언급된 형식을 지정할 수 있습니다.
| 형식 | format 인수 | 모델 | 메타데이터 | 인수 |
|---|---|---|---|---|
| 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 |
| Apple Core AI | coreai | yolo26n.aimodel | ✅ | imgsz, batch, quantize |
| TF SavedModel | saved_model | yolo26n_saved_model/ | ✅ | imgsz, 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 |
| LiteRT | litert | yolo26n.tflite | ✅ | imgsz, quantize, batch, 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 | yolo11n_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 |
| Hailo | hailo | yolo26n_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou, device |
| Huawei Ascend | ascend | yolo26n_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms, device |
| AMD Xilinx | xilinx | yolo26n_xilinx_model/ | ✅ | imgsz, name, quantize, data, fraction, opset, simplify, device |
nms=None은 외부 NMS를 위해 기본적으로 원시 출력을 사용합니다(YOLO26은 Axelera에서 NMS가 필요 없는 헤드를 유지합니다). 사용 가능한 NMS가 필요 없는 헤드를 선택하려면 nms=False를 설정하세요. 지원되지 않는 형식은 해당 형식의 기본 출력 경로로 대체됩니다. 위의 nms 항목은 nms=True로 NMS를 포함할 수 있는 형식을 나타냅니다.
자세한 export 내용은 내보내기 페이지를 참조하세요.
자주 묻는 질문#
Ultralytics YOLO26에는 다양한 내보내기 형식에서 모델 성능을 평가하는 벤치마크 모드가 있습니다. 이 모드에서는 평균 정밀도(mAP50-95), 정확도, 밀리초 단위의 추론 시간과 같은 주요 지표를 확인할 수 있습니다. Python 또는 CLI 명령을 사용해 벤치마크를 실행할 수 있습니다. 예를 들어 GPU에서 벤치마크를 실행하려면 다음과 같이 합니다.
예제from ultralytics.utils.benchmarks import benchmark # GPU에서 벤치마크 benchmark(model="yolo26n.pt", data="coco8.yaml", imgsz=640, device=0)벤치마크 인수에 대한 자세한 내용은 인수 섹션을 참조하세요.
YOLO26 모델 벤치마킹은 다음과 같은 여러 이유로 중요합니다.
- 정보에 기반한 의사 결정: 속도와 정확도 간의 절충 관계를 파악합니다.
- 리소스 할당: 다양한 하드웨어 옵션에서의 성능을 측정합니다.
- 최적화: 특정 사용 사례에 가장 적합한 성능을 제공하는 내보내기 형식을 확인합니다.
- 비용 효율성: 벤치마크 결과를 바탕으로 하드웨어 사용을 최적화합니다.
mAP50-95, Top-1 정확도, 추론 시간과 같은 주요 지표는 이러한 평가에 도움이 됩니다. 자세한 내용은 주요 지표 섹션을 참조하세요.
YOLO26은 다양한 내보내기 형식을 지원하며, 각 형식은 특정 하드웨어 및 사용 사례에 맞게 설계되었습니다.
- ONNX: CPU 성능에 가장 적합합니다.
- TensorRT: GPU 효율성에 이상적입니다.
- OpenVINO: Intel 하드웨어에 맞게 최적화됩니다.
- CoreML 및 TensorFlow: iOS 및 일반적인 ML 애플리케이션에 유용합니다.
지원 형식 전체 목록과 각 형식의 장점은 지원되는 내보내기 형식 섹션을 참조하세요.
벤치마크를 실행할 때 필요에 맞게 여러 인수를 사용자 지정할 수 있습니다.
- model: 모델 파일의 경로입니다(예: "yolo26n.pt").
- data: 데이터셋 YAML의 경로입니다(예:
"coco8.yaml"). 분류 작업에서는 데이터셋 디렉터리나 내장 데이터셋 이름(예:imagenet10)을 사용합니다. - imgsz: 정사각형 입력 이미지 크기를 나타내는 단일 정수입니다(예:
640). 벤치마크 모드는 공정한 비교를 위해 PyTorch 및 내보낸 형식 모두에 동일한 정사각형 이미지 크기를 사용합니다. - quantize: 요청된 정밀도: FP16의 경우
16, INT8의 경우8(엣지 디바이스에 유용함)입니다.32/설정되지 않음은 해당 형식에서 지원되는 경우 FP32를 의미합니다. FP32로 내보낼 수 없는 형식은 명시적으로 지정된32을 거부하거나 필요한 정밀도로 대체합니다. 네이티브 PyTorch 행은 내보내지 않습니다.16만 이 행에 적용되며, CPU가 아닌 장치에서 FP16 추론을 선택합니다. 그렇지 않으면 FP32로 실행됩니다. 각 형식은 이후 자체 런타임 정밀도로 추론을 실행합니다. - device: 연산 장치를 지정합니다(예: "cpu", "cuda:0").
- verbose: 벤치마크 실패를 기록하는 대신 예외를 발생시킵니다. 부동 소수점 값을 전달하면 각 형식의 지표가 해당 하한값을 초과하도록 요구할 수도 있습니다.
인수 전체 목록은 인수 섹션을 참조하세요.