YOLO26 모델용 CoreML 내보내기#
Apple은 모든 최신 iPhone, iPad 및 Mac에 전용 AI 실리콘인 Neural Engine을 탑재하고 있으며, CoreML은 현재 Ultralytics 모델을 해당 엔진에 배포하기 위해 지원되는 경로입니다. 학습된 .pt 체크포인트를 네이티브 .mlpackage로 변환하면 Ultralytics YOLO26 모델을 CoreML로 내보낼 수 있으며, 네트워크 연결 없이 데이터가 디바이스 외부로 전송되지 않는 상태에서 7가지 YOLO 작업을 모두 낮은 지연 시간으로 디바이스에서 실행할 수 있습니다.
공식 Ultralytics YOLO iOS SDK와 Flutter 플러그인은 별도의 설정 없이 Apple Neural Engine에서 CoreML 내보내기 모델을 실행합니다. 실시간 카메라 추론, 단일 이미지 예측, Depth를 포함한 7가지 YOLO26 작업 모두에 대한 자동 모델 다운로드를 지원합니다. Android NPU 배포에 대해서는 Qualcomm QNN 통합을 참조하십시오.
분류 모델은 imgsz=224으로 내보냅니다. 감지, 세그먼트, 시맨틱, 깊이, 포즈 및 OBB 모델은
imgsz=640로 내보냅니다. 이 224/640 표준은 공식 CoreML, LiteRT 및 QNN 모바일 asset에서 공유됩니다.
Apple은 iOS 27 및 macOS 27 세대를 위해 새로운 Core AI framework 및 .aimodel 형식을 도입했으며, Ultralytics는 format="coreai"를 사용해 이를 내보냅니다. Ultralytics iOS 및 Flutter SDK와 더 폭넓은 Apple 기기 호환성에는 여전히 CoreML이 권장 형식입니다.
Watch: How to Export Ultralytics YOLO26 to CoreML with INT8 Quantization | Apple Deployment | iOS/MacOS 🍎
CoreML이란?#
CoreML(Apple 표기: "Core ML")은 Apple의 온디바이스 machine learning framework입니다. 최신 ML Program 형식, 즉 Ultralytics exporter가 생성하는 .mlpackage bundle로 모델을 로드하고, 기기의 CPU, GPU 및 Apple Neural Engine (ANE)(모든 Apple 실리콘 칩에 탑재된 전용 NPU)에 작업을 배분합니다. 모든 처리가 로컬에서 실행되므로 추론이 오프라인으로 작동하고 네트워크 지연이 발생하지 않으며 사용자 데이터가 기기 내에 유지됩니다.
CoreML은 Apple의 Vision framework와 직접 통합되며, 모델 입력 과정에서 이미지 크기 조정과 방향 처리를 담당합니다. 이를 통해 Ultralytics iOS SDK는 사실상 전처리 비용 없이 카메라 프레임을 YOLO에 전달합니다.
YOLO26을 CoreML로 내보내는 이유#
- Neural Engine 속도: CoreML은 지원되는 연산을 Apple의 Neural Engine에서 실행하도록 예약하여 낮은 지연 시간의 온디바이스 추론을 제공합니다. 아래의 실제 기기 표를 참조하고 대상 하드웨어에서 정확한 내보내기 결과를 벤치마크하십시오.
- 출력 선택: 기본 내보내기는 NMS 처리를 애플리케이션에 맡깁니다. NMS를 임베드하려면
nms=True을 사용하고, YOLO26의 NMS 없는 헤드를 사용하려면nms=False을 사용하십시오. - 비공개 및 오프라인: 모든 연산이 기기에서 수행되므로 cloud 왕복이 없고 API 키가 필요하지 않으며 완전한 data privacy를 제공합니다.
- 한 번의 내보내기로 전체 생태계 지원: 동일한
.mlpackage을 iOS, iPadOS, macOS, watchOS, tvOS 및 visionOS에서 실행할 수 있으며, 공식 Ultralytics iOS SDK와 Flutter 플러그인을 구동합니다.
측정된 성능#
표준화된 v8.3.0 YOLO26n INT8 CoreML asset을 12GB 메모리와 iOS 26.5.2가 탑재된
iPhone 17 Pro에서 실행한 end-to-end 단일 이미지 추론 결과입니다. A19 Pro에는 6코어 CPU
(Performance 코어 2개 및 Efficiency 코어 4개), Neural Accelerators를 탑재한 6코어 GPU 및 16코어 Neural Engine이 있습니다. 각 셀에는 전체 시간(전처리 + 추론 + 후처리, annotation 제외)이 표시되며, 그 아래에 단계별 시간이 분리되어 있습니다. iOS에서는 Vision이 추론 요청 내부에서 입력 크기 조정을 수행하므로 전처리는 0으로 보고되며 해당 비용은 추론에 포함됩니다.
| 모델 | 태스크 | 크기 (픽셀) | CPU Core ML .cpuOnly(ms) | CPU + ANE 우선 Core ML .cpuAndNeuralEngine(ms) |
|---|---|---|---|---|
| YOLO26n | Detect | 640 | 9.2 0.0 / 9.2 / 0.0 | 3.2 0.0 / 3.2 / 0.0 |
| YOLO26n-seg | Segment | 640 | 12.6 0.0 / 12.0 / 0.5 | 4.8 0.0 / 4.2 / 0.6 |
| YOLO26n-sem | 시맨틱 | 640 | 9.7 0.0 / 9.2 / 0.5 | 4.6 0.0 / 4.2 / 0.5 |
| YOLO26n-depth | 깊이 | 640 | 25.0 0.0 / 24.1 / 0.9 | 5.3 0.0 / 4.5 / 0.9 |
| YOLO26n-cls | 분류 | 224 | 2.2 0.0 / 2.2 / 0.0 | 1.9 0.0 / 1.9 / 0.0 |
| YOLO26n-pose | 포즈 | 640 | 11.9 0.0 / 11.9 / 0.0 | 3.9 0.0 / 3.9 / 0.0 |
| YOLO26n-obb | OBB | 640 | 10.6 0.0 / 10.6 / 0.0 | 3.4 0.0 / 3.4 / 0.0 |
- 정확한
v8.3.0release asset은 분류에 224×224 입력을, 그 외 모든 작업에 640×640 입력을 지정합니다. - Speed 값은 단일 이미지 burst latency입니다.
bus.jpg에서 warmup 3회 후 15회 실행한 평균이며, profile mode(최적화된 native code)에서 Flutter 플러그인의 benchmark harness를 통해 iOS SDK의 단계별 timing으로 측정했습니다. 하나의 순차 sweep에서 작업 간 CPU/accelerator 순서를 교대로 적용했습니다. CPU 행은 Core ML.cpuOnly을 요청하고, CPU + ANE 우선 행은.cpuAndNeuralEngine를 요청하며, 최종 operation placement는 Core ML이 제어합니다. 지속적인 실시간 카메라 작업에서는 capture 및 scaling pipeline과 thermal settling이 포함되므로 더 높은 값이 측정됩니다. 표준화 이전의 과거 camera sweep에서는 동일한 기기에서 YOLO26n detect가 11.3ms/frame, YOLO26n Depth가 16.5ms/frame으로 측정되었습니다. steady-state profiling은 iOS SDK 성능 문서를 참조하십시오. - LiteRT 통합에서 Android CPU/GPU 결과를, Qualcomm QNN 통합에서 Snapdragon NPU 결과를 비교하십시오.
지원되는 작업#
CoreML 내보내기는 7가지 Ultralytics 작업을 모두 지원합니다. 시맨틱 세그멘테이션과 깊이 추정은 해당 head를 제공하는 유일한 family인 YOLO26에서만 사용할 수 있습니다.
YOLO26 모델을 CoreML로 내보내기#
설치#
필요한 package를 설치하려면 다음을 실행하십시오:
# Install the required package for YOLO26
pip install ultralyticscoremltools converter는 첫 번째 내보내기 시 자동으로 설치됩니다. 내보내기는 macOS 또는 x86 Linux에서 실행됩니다. 자세한 지침과 모범 사례는 설치 가이드와 Common Issues 가이드를 참조하십시오.
사용법#
CoreML 형식은 Export, Predict 및 Validate 모드를 지원합니다. CoreML을 사용한 추론 및 validation은 macOS에서만 실행됩니다. 모델을 내보낸 다음 내보낸 모델을 로드하여 추론을 실행하거나 정확도를 validation하십시오.
from ultralytics import YOLO
# Load a YOLO26 model
model = YOLO("yolo26n.pt")
# Export to CoreML with INT8 weight quantization, matching the official app models
model.export(format="coreml", quantize=8, imgsz=640) # use imgsz=224 for classificationfrom ultralytics import YOLO
# Load the exported CoreML model (macOS)
model = YOLO("yolo26n.mlpackage")
# Run inference
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Load the exported CoreML model (macOS)
model = YOLO("yolo26n.mlpackage")
# Validate accuracy on the COCO8 dataset
metrics = model.val(data="coco8.yaml")내보내기 인수#
| 인수 | 유형 | 기본값 | 설명 |
|---|---|---|---|
format | str | 'coreml' | 내보낸 모델의 대상 형식으로, 다양한 deployment environment와의 호환성을 정의합니다. |
imgsz | int 또는 tuple | 640 | 모델 입력에 사용할 이미지 크기입니다. 정사각형 이미지에는 정수를 사용하고, 특정 크기에는 (height, width) tuple을 사용할 수 있습니다. |
quantize | int 또는 str | None | 양자화 정밀도(CoreML의 경우 weight-only): 16 (FP16), 8 (INT8), "w8a16" (FP16 activation을 사용하는 INT8 weight) 또는 32/미설정(FP32)입니다. NMS ML Program은 FP16을 사용하며(Xcode preview 및 segment와 pose에 필요), detect에서는 32를 전달하여 재정의할 수 있습니다. 더 이상 사용되지 않는 half/int8 flag를 대체합니다. |
nms | bool, 선택 사항 | None | 원시 출력(None, 기본값), 임베디드 NMS(True) 또는 NMS 없는 헤드(False)를 선택합니다. 임베디드 NMS는 dynamic=False을 사용하여 감지, 분할 및 포즈를 지원합니다. |
dynamic | bool | False | 동적 입력 크기를 허용합니다. 분류 또는 RT-DETR 모델에서는 지원되지 않으며, nms=True과(와) 결합할 수 없습니다. |
batch | int | 1 | 내보내기 모델 배치 추론 크기 또는 predict 모드에서 내보낸 모델이 동시에 처리할 최대 이미지 수를 지정합니다. 1 이상의 값에는 dynamic=True이(가) 필요합니다. |
device | str | None | 내보내기에 사용할 device를 지정합니다: GPU (device=0), CPU (device=cpu), Apple silicon용 MPS (device=mps). |
내보내기 프로세스에 대한 자세한 내용은 Ultralytics 내보내기 문서 페이지를 참조하십시오.
Neural Engine 대상 지정#
CoreML은 MLModelConfiguration.computeUnits을 통해 하드웨어를 선택합니다. Ultralytics iOS SDK는 iOS 16 이상에서 .all 대신 기본적으로 .cpuAndNeuralEngine을 사용합니다. 실시간 카메라 앱에서는 GPU가 이미 preview와 overlay를 합성하는 작업으로 사용 중이므로 GPU를 제외하면 ANE가 주요 작업을 수행하는 동안 contention과 frame-time jitter를 방지할 수 있습니다. 호환성 테스트에만 .cpuOnly을 고정하십시오. 위 표에서 그 비용을 확인할 수 있습니다.
Mac host에서 Python을 통해(Ultralytics 또는 coremltools 사용) CoreML 모델을 실행할 때도 동일한 규칙이 적용됩니다. Ultralytics는 ComputeUnit.CPU_AND_NE(macOS 13 이상, 이전 macOS에서는 CPU_ONLY로 fallback)을 사용해 로드하므로 추론이 Neural Engine에서 실행됩니다(CPU보다 약 ~3배 빠름). 또한 GPU/MPSGraph compile path를 추가하는 기본 ComputeUnit.ALL / CPU_AND_GPU가 coremltools 9.x에서 Error: MLIR pass manager failed assertion과 함께 프로세스를 중단하는 현재 macOS host 제한도 피할 수 있습니다.
내보낸 YOLO26 CoreML 모델 배포#
가장 빠른 방법은 공식 Ultralytics YOLO iOS SDK입니다. 이 SDK는 Ultralytics iOS 앱과 Flutter 플러그인을 구동하는 동일한 Swift package입니다. 공식 모델 이름을 자동으로 확인하고, .mlpackage를 다운로드 및 cache한 뒤 완전히 decode된 결과를 반환합니다:
import UltralyticsYOLO
// Loads the official INT8 model (downloaded and cached on first use), then runs inference
let yolo = YOLO("yolo26n", task: .detect) { result in
if case .success(let model) = result {
let results = model(uiImage) // boxes, labels, confidences, timing
}
}카메라 앱에서는 SDK의 YOLOView을 추가하여 native overlay가 포함된 실시간 추론을 실행하거나, Android와 하나의 codebase를 공유하는 cross-platform 앱에는 Flutter 플러그인을 사용하십시오.
Apple stack을 사용하면 raw .mlpackage을 직접 통합하는 것도 간단합니다. MLModel로 로드하고, VNCoreMLRequest로 래핑한 다음, VNImageRequestHandler을 통해 이미지를 전달하면 됩니다. 다음 resource에서 자세한 내용을 확인할 수 있습니다:
- Core ML 모델을 앱에 통합하기: CoreML 모델을 bundle에 포함하고 호출하는 방법에 대한 Apple 가이드입니다.
- CoreML Tools: 이 내보내기를 지원하는
coremltoolstoolchain의 변환, 양자화 및 최적화 reference입니다. - Xcode Core ML 성능 보고서: 정확한 모델과 device에 대한 layer별 device placement 및 latency profiling입니다.
모델을 app bundle에 포함하여 즉시 사용할 수 있게 하거나(nano/small 모델에 적합), 첫 실행 시 다운로드하여 cache할 수 있습니다(더 작은 binary와 간편한 모델 업데이트). 공식 앱은 두 방식을 결합합니다. 기본 nano 모델은 즉시 사용할 수 있도록 bundle에 포함하고, 더 큰 variant는 필요할 때 다운로드하여 로컬에 cache합니다.
권장 워크플로#
- Ultralytics Train mode로 모델을 Train하거나 공식 YOLO26 weight에서 시작하십시오.
- macOS 또는 x86 Linux에서
model.export(format="coreml", quantize=8, imgsz=640)으로 Export하십시오(분류의 경우imgsz=224). - Mac에서
model.val()으로 정확도를 Verify하고, 대상 device에서 Xcode Core ML 성능 보고서를 사용해 profile을 수집하십시오. - iOS SDK, Flutter 플러그인 또는 자체 Vision 통합을 사용하여
.cpuAndNeuralEngine을 대상으로 Deploy하십시오.
요약#
이 가이드에서는 Ultralytics YOLO26 모델을 CoreML의 .mlpackage 형식으로 내보내고, Apple Neural Engine에 맞게 양자화한 다음, 공식 iOS SDK와 Flutter 플러그인 또는 자체 Vision 통합을 통해 한 자릿수 밀리초 latency로 배포하는 방법을 알아보았습니다. 다른 deployment target은 통합 가이드 페이지를 확인하고, Benchmark mode로 형식을 비교하십시오.
FAQ#
macOS 또는 x86 Linux에서 Python으로
model.export(format="coreml", imgsz=640)을 실행하거나 CLI에서yolo export model=yolo26n.pt format=coreml imgsz=640을 실행하십시오. 분류에는imgsz=224를 사용하고 공식 앱 모델과 일치시키려면quantize=8을 추가하십시오. 내보내기 결과는 Xcode, iOS SDK 또는 Flutter 플러그인에서 사용할 수 있는yolo26n.mlpackageML Program입니다.애플리케이션에 NMS가 포함된 감지가 필요한 경우
nms=True을 사용하십시오. 기본값인nms=None은 애플리케이션이 처리할 수 있도록 원시 일대다 출력을 내보내며,nms=False는 YOLO26의 NMS 없는 헤드를 선택합니다. 임베디드 NMS는 정적 셰이프를 사용하여 감지, 분할 및 포즈를 지원하며, 다른 작업은 기본 출력을 유지합니다.공식 Ultralytics 앱 모델은 다운로드 크기를 최소화하고 위 표의 속도로 실행할 수 있도록 INT8로 제공됩니다.
quantize=16(FP16)은 정확도 손실이 사실상 없는 보수적인 대안입니다. 배포하기 전에 Mac에서model.val()을 사용해 정확한 내보내기 결과를 validation하십시오.MLModelConfiguration.computeUnits = .cpuAndNeuralEngine을 설정하십시오(iOS 16 이상에서 iOS SDK의 기본값). 카메라 앱에서는.all을 피하십시오. GPU가 preview 합성으로 사용 중이므로 여기에 추론을 예약하면 frame-time jitter가 발생합니다. Xcode Core ML 성능 보고서로 placement를 확인하십시오.예. macOS에서는
yolo predict model=yolo26n.mlpackage source=image.jpg과yolo val model=yolo26n.mlpackage data=coco8.yaml을 다른 형식과 동일한 방식으로 사용할 수 있습니다. CoreML 실행에는 Apple 하드웨어가 필요하므로 Linux와 Windows에서는 이러한 모드를 사용할 수 없습니다.공식 Ultralytics YOLO iOS SDK(Swift Package) 또는 Flutter 플러그인을 사용하십시오. 두 SDK 모두 자동 다운로드 및 caching을 통해 이름으로 공식 모델을 로드하고 Neural Engine에서 실행하며 완전한 실시간 카메라 UI를 제공합니다. 위의 측정 성능 표도 정확히 이 stack으로 생성되었습니다.