YOLO26 모델용 CoreML 내보내기#
Apple은 최신 iPhone, iPad 및 Mac에 전용 AI 실리콘인 Neural Engine을 탑재하며, CoreML은 현재 Ultralytics에서 해당 장치에 모델을 배포하기 위해 지원하는 경로입니다. Ultralytics YOLO26 모델을 CoreML로 내보내면 학습된 .pt 체크포인트가 네이티브 .mlpackage으로 변환됩니다. 이 형식은 네트워크 연결이나 기기 외부로의 데이터 전송 없이, 낮은 지연 시간으로 7가지 YOLO 작업을 모두 기기에서 실행합니다.
공식 Ultralytics YOLO iOS SDK와 Flutter 플러그인은 CoreML 내보내기 모델을 Apple Neural Engine에서 바로 실행합니다. 실시간 카메라 추론, 단일 이미지 예측 및 Depth를 포함한 7가지 YOLO26 작업 모두에 대한 자동 모델 다운로드를 지원합니다. Android NPU 배포는 Qualcomm QNN 통합을 참조하세요.
분류 모델은 imgsz=224에서 내보냅니다. 탐지, 세그멘테이션, 시맨틱, 깊이 추정, 포즈 및 OBB 모델은 imgsz=640에서 내보냅니다. 이 224/640 표준은 공식 CoreML, LiteRT 및 QNN 모바일 에셋에서 공통으로 사용됩니다.
Apple은 iOS 27 및 macOS 27 세대에 사용할 새로운 Core AI 프레임워크 및 .aimodel 형식을 도입했으며, Ultralytics는 format="coreai"를 사용해 이 형식으로 내보냅니다. CoreML은 Ultralytics iOS 및 Flutter SDK의 기본 형식으로 유지되며, iOS 27 기기에서는 선택적으로 Core AI를 로드하고, 더 폭넓은 Apple 기기 호환성을 위한 형식으로도 사용됩니다.
시청: INT8 양자화를 적용해 Ultralytics YOLO26을 CoreML로 내보내는 방법 | Apple 배포 | iOS/MacOS 🍎
CoreML이란 무엇인가요?#
CoreML(Apple에서 "Core ML"로 표기)은 Apple의 온디바이스 머신러닝 프레임워크입니다. 최신 ML Program 형식, 즉 Ultralytics 내보내기 도구가 생성하는 .mlpackage 번들을 로드하고, 기기의 CPU, GPU 및 Apple Neural Engine(ANE)(모든 Apple 실리콘 칩에 탑재된 전용 NPU)에 걸쳐 작업을 예약합니다. 모든 작업이 로컬에서 실행되므로 추론은 오프라인에서도 작동하고 네트워크 지연이 발생하지 않으며 사용자 데이터가 기기 내에 유지됩니다.
CoreML은 Apple의 Vision 프레임워크와 직접 통합되며, 이 프레임워크는 모델에 입력하기 전 이미지 크기 조정과 방향 처리를 담당합니다. 이 덕분에 Ultralytics iOS SDK는 사실상 전처리 비용 없이 카메라 프레임을 YOLO에 전달합니다.
YOLO26을 CoreML로 내보내는 이유#
- Neural Engine 속도: CoreML은 지원되는 연산을 Apple Neural Engine에서 실행하도록 예약해 온디바이스 추론 지연 시간을 줄입니다. 아래의 실제 기기 표를 확인하고 대상 하드웨어에서 정확한 내보내기 결과를 벤치마크하세요.
- 출력 선택: 기본 내보내기에서는 NMS 처리를 앱에 맡깁니다. NMS를 포함하려면
nms=True을 사용하고, YOLO26의 NMS 없는 헤드를 사용하려면nms=False을 사용하세요. - 비공개 및 오프라인: 모든 계산이 기기 내에서 이루어지므로 클라우드 왕복이나 API 키가 필요 없으며, 완전한 데이터 개인정보 보호가 보장됩니다.
- 한 번 내보내 여러 생태계에서 사용: 동일한
.mlpackage이 iOS, iPadOS, macOS, watchOS, tvOS 및 visionOS에서 실행되며, 공식 Ultralytics iOS SDK와 Flutter 플러그인을 지원합니다.
측정 성능#
표준화된 v8.3.0 YOLO26n INT8 CoreML 에셋을 사용한 단일 이미지 종단 간 추론을 메모리 12 GB 및 iOS 26.5.2가 탑재된 iPhone 17 Pro에서 측정했습니다. A19 Pro에는 6코어 CPU (성능 코어 2개 및 효율 코어 4개), Neural Accelerators가 탑재된 6코어 GPU, 16코어 Neural Engine이 있습니다. 각 셀은 총 시간(전처리 + 추론 + 후처리, 주석 처리 제외)을 표시하며, 아래에는 단계별 시간이 나옵니다. iOS에서는 Vision이 추론 요청 내에서 입력 크기를 조정하므로 전처리 시간은 0으로 표시되고 그 비용은 추론에 포함됩니다.
| 모델 | 작업 | 크기 (픽셀) | CPU Core ML .cpuOnly(ms) | CPU + ANE 우선 Core ML .cpuAndNeuralEngine(ms) |
|---|---|---|---|---|
| YOLO26n | 감지 | 640 | 9.2 0.0 / 9.2 / 0.0 | 3.2 0.0 / 3.2 / 0.0 |
| YOLO26n-seg | 분할 | 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.0릴리스 에셋은 분류 입력 크기를 224×224로, 그 외 모든 작업 입력 크기를 640×640으로 지정합니다. - 속도 값은 단일 이미지 버스트 지연 시간입니다.
bus.jpg에서 3회 워밍업 실행 후 15회 실행의 평균값을 측정했으며, 프로파일 모드(최적화된 네이티브 코드)에서 iOS SDK의 단계별 타이밍을 Flutter 플러그인의 벤치마크 하네스로 측정했습니다. CPU/가속기 순서는 하나의 순차 스윕에서 작업마다 번갈아 적용했습니다. CPU 행은 Core ML.cpuOnly을 요청하고 CPU + ANE 우선 행은.cpuAndNeuralEngine를 요청하며, 최종 연산 배치는 Core ML에서 제어합니다. 지속적인 실시간 카메라 작동에서는 캡처 및 크기 조정 파이프라인과 열 안정화 과정이 포함되므로 지연 시간이 더 길어집니다. 표준화 이전에 수행한 과거 카메라 스윕에서는 동일한 기기에서 YOLO26n 탐지의 프레임당 시간이 11.3 ms, YOLO26n 깊이 추정의 프레임당 시간이 16.5 ms로 측정되었습니다. 정상 상태 프로파일링은 iOS SDK 성능 문서를 참조하세요. - LiteRT 통합의 Android CPU/GPU 결과와 Qualcomm QNN 통합의 Snapdragon NPU 결과를 비교해 보세요.
지원 작업#
CoreML 내보내기는 Ultralytics의 7가지 작업을 모두 지원합니다. 시맨틱 세그멘테이션과 깊이 추정은 해당 헤드를 제공하는 유일한 제품군인 YOLO26에서만 사용할 수 있습니다.
YOLO26 모델을 CoreML로 내보내기#
설치#
필수 패키지를 설치하려면 다음을 실행하세요:
# Install the required package for YOLO26
pip install ultralyticscoremltools 변환기는 첫 내보내기 시 자동으로 설치됩니다. 내보내기는 macOS 또는 x86 Linux에서 실행됩니다. 자세한 지침과 모범 사례는 설치 가이드와 일반적인 문제 가이드를 참조하세요.
사용법#
CoreML 형식은 내보내기, 예측 및 검증 모드를 지원합니다. CoreML을 사용한 추론 및 검증은 macOS에서만 실행됩니다. 모델을 내보낸 다음 내보낸 모델을 로드해 추론을 실행하거나 정확도를 검증하세요.
from ultralytics import YOLO
# YOLO26 모델 로드
model = YOLO("yolo26n.pt")
# 공식 앱 모델과 동일하게 INT8 가중치 양자화를 적용해 CoreML로 내보내기
model.export(format="coreml", quantize=8, imgsz=640) # 분류에는 imgsz=224 사용from ultralytics import YOLO
# 내보낸 CoreML 모델 로드(macOS)
model = YOLO("yolo26n.mlpackage")
# 추론 실행
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# 내보낸 CoreML 모델 로드(macOS)
model = YOLO("yolo26n.mlpackage")
# COCO8 데이터셋에서 정확도 검증
metrics = model.val(data="coco8.yaml")내보내기 인수#
| 인수 | 유형 | 기본값 | 설명 |
|---|---|---|---|
format | str | 'coreml' | 내보낸 모델의 대상 형식으로, 다양한 배포 환경과의 호환성을 정의합니다. |
imgsz | int 또는 tuple | 640 | 모델 입력에 사용할 이미지 크기입니다. 정사각형 이미지에는 정수를 사용하고, 특정 크기에는 튜플 (height, width)을 사용할 수 있습니다. |
quantize | int 또는 str | None | 양자화 정밀도(CoreML의 경우 가중치 전용)입니다. 16(FP16), 8(INT8), "w8a16"(FP16 활성화를 사용하는 INT8 가중치) 또는 32/미설정(FP32)을 사용합니다. NMS ML Program은 FP16을 사용합니다(Xcode 미리 보기 및 segment와 pose에 필요). 탐지에서 이를 재정의하려면 32를 전달하세요. 더 이상 사용되지 않는 half/int8 플래그를 대체합니다. |
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 | 내보내기에 사용할 장치를 지정합니다. GPU(device=0), CPU(device=cpu), Apple 실리콘용 MPS(device=mps)를 사용할 수 있습니다. |
내보내기 프로세스에 관한 자세한 내용은 내보내기에 관한 Ultralytics 문서 페이지를 참조하세요.
Neural Engine 대상 설정#
CoreML은 MLModelConfiguration.computeUnits을 통해 하드웨어를 선택합니다. Ultralytics iOS SDK는 iOS 16 이상에서 .all 대신 .cpuAndNeuralEngine을 기본값으로 사용합니다. 실시간 카메라 앱에서는 GPU가 이미 미리 보기와 오버레이 합성에 사용 중이므로 GPU를 제외하면 경합과 프레임 시간 변동을 방지하고 ANE가 주요 연산을 처리할 수 있습니다. 호환성 테스트에만 .cpuOnly을 고정하세요. 위 표에서 그 비용을 확인할 수 있습니다.
Mac 호스트에서 Python으로 CoreML 모델을 실행하는 경우(Ultralytics 또는 coremltools 사용)에도 같은 규칙이 적용됩니다. Ultralytics는 ComputeUnit.CPU_AND_NE로 모델을 로드하고(macOS 13 이상, 이전 macOS에서는 CPU_ONLY로 대체), 추론을 Neural Engine에서 실행합니다(CPU보다 약 ~3배 빠름). 또한 GPU/MPSGraph 컴파일 경로를 추가하는 기본 ComputeUnit.ALL / CPU_AND_GPU가 coremltools 9.x에서 Error: MLIR pass manager failed 어설션과 함께 프로세스를 중단시키는 현재 macOS 호스트 제한도 피할 수 있습니다.
내보낸 YOLO26 CoreML 모델 배포#
가장 빠른 방법은 공식 Ultralytics YOLO iOS SDK입니다. 이 Swift 패키지는 Ultralytics iOS 앱과 Flutter 플러그인을 구동합니다. 공식 모델 이름을 자동으로 확인하고 .mlpackage를 다운로드 및 캐시한 뒤, 디코딩이 완료된 결과를 반환합니다:
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을 추가해 네이티브 오버레이를 포함한 실시간 추론을 실행하거나, Android와 코드베이스를 공유하는 크로스 플랫폼 앱에는 Flutter 플러그인을 사용하세요.
Apple 스택을 사용하면 원시 .mlpackage을 직접 통합하는 것도 간단합니다. MLModel로 로드하고 VNCoreMLRequest로 래핑한 다음 VNImageRequestHandler을 통해 이미지를 입력하면 됩니다. 자세한 내용은 다음 리소스를 참조하세요:
- Core ML 모델을 앱에 통합하기: CoreML 모델을 앱에 번들링하고 호출하는 방법에 관한 Apple 가이드입니다.
- CoreML Tools: 이 내보내기를 지원하는
coremltools툴체인의 변환, 양자화 및 최적화 참고 자료입니다. - Xcode Core ML 성능 보고서: 특정 모델 및 기기에 대한 레이어별 기기 배치와 지연 시간 프로파일링을 제공합니다.
모델은 앱 번들에 포함해 즉시 사용할 수 있도록 배포하거나(나노/소형 모델에 적합), 첫 실행 시 다운로드해 캐시할 수 있습니다(바이너리 크기 감소 및 간편한 모델 업데이트). 공식 앱은 두 방식을 함께 사용합니다. 기본 나노 모델은 즉시 사용할 수 있도록 번들에 포함하고, 더 큰 모델은 필요할 때 다운로드해 로컬에 캐시합니다.
권장 워크플로#
- Ultralytics 학습 모드로 모델을 학습하거나 공식 YOLO26 가중치로 시작하세요.
- macOS 또는 x86 Linux에서
model.export(format="coreml", quantize=8, imgsz=640)을 사용해 내보내기하세요(분류에는imgsz=224사용). - Mac에서
model.val()을 사용해 정확도를 검증하고, 대상 기기에서 Xcode Core ML 성능 보고서로 프로파일링하세요. - iOS SDK, Flutter 플러그인 또는 자체 Vision 통합을 사용해
.cpuAndNeuralEngine을 대상으로 배포하세요.
요약#
이 가이드에서는 Ultralytics YOLO26 모델을 CoreML의 .mlpackage 형식으로 내보내고, Apple Neural Engine에 맞게 양자화한 다음 한 자릿수 밀리초의 지연 시간으로 배포하는 방법을 살펴보았습니다. 공식 iOS SDK와 Flutter 플러그인을 사용하거나 자체 Vision 통합을 사용할 수 있습니다. 다른 배포 대상을 알아보려면 통합 가이드 페이지를 살펴보고, 벤치마크 모드로 형식을 비교하세요.
자주 묻는 질문#
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()을 사용해 정확한 내보내기 결과를 검증하세요.MLModelConfiguration.computeUnits = .cpuAndNeuralEngine을 설정하세요(iOS 16 이상에서 iOS SDK의 기본값). 카메라 앱에서는.all을 사용하지 마세요. GPU가 미리 보기를 합성하느라 사용 중인 상태에서 추론을 GPU에 예약하면 프레임 시간 변동이 발생합니다. Xcode Core ML 성능 보고서에서 배치를 확인하세요.네, 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 플러그인을 사용하세요. 두 방식 모두 이름으로 공식 모델을 로드하고 자동 다운로드 및 캐싱을 지원하며, Neural Engine에서 실행됩니다. 완전한 실시간 카메라 UI도 포함되어 있습니다. 위의 성능 표는 바로 이 스택으로 측정한 결과입니다.