Экспорт CoreML для моделей YOLO26#
Apple устанавливает специализированные AI-чипы — Neural Engine — во все современные iPhone, iPad и Mac, а CoreML — это поддерживаемый Ultralytics способ развёртывания моделей на них. Экспорт моделей Ultralytics YOLO26 в CoreML преобразует обученный чекпойнт .pt в нативный .mlpackage, который запускает на устройстве все семь задач YOLO с низкой задержкой, без подключения к сети и передачи данных за пределы устройства.
Официальный SDK Ultralytics YOLO для iOS и плагин Flutter запускают экспортированные модели CoreML на Apple Neural Engine сразу после установки: инференс с камеры в реальном времени, предсказание для отдельного изображения и автоматическая загрузка моделей для всех семи задач YOLO26, включая глубину. Для развёртывания на NPU Android см. интеграцию Qualcomm QNN.
Экспортируй модели классификации в imgsz=224. Экспортируй модели детекции, сегментации, семантической сегментации, оценки глубины, позы и OBB в imgsz=640. Этот стандарт 224/640 используется в официальных мобильных ресурсах CoreML, LiteRT и QNN.
Apple представила новый фреймворк Core AI и формат .aimodel для поколения iOS 27 и macOS 27, а Ultralytics поддерживает экспорт в него с помощью format="coreai". CoreML остается форматом по умолчанию для SDK Ultralytics для iOS и Flutter: на устройствах с iOS 27 они загружают Core AI по желанию. CoreML также обеспечивает совместимость с более широким набором устройств Apple.
Смотри: Как экспортировать Ultralytics YOLO26 в CoreML с квантованием INT8 | Развертывание на устройствах Apple | iOS/MacOS 🍎
Что такое CoreML?#
CoreML (Apple пишет это название как «Core ML») — фреймворк Apple для машинного обучения непосредственно на устройстве. Он загружает модели в современном формате ML Program — комплекте .mlpackage, который создает экспортёр Ultralytics, — и распределяет их выполнение между CPU, GPU и Apple Neural Engine (ANE) — специализированным NPU в каждом чипе Apple silicon. Поскольку все вычисления выполняются локально, инференс работает офлайн, не создает сетевых задержек, а данные пользователя остаются на устройстве.
CoreML напрямую интегрируется с фреймворком Vision от Apple, который масштабирует и корректирует ориентацию изображения перед передачей модели. Благодаря этому SDK Ultralytics для iOS передает кадры с камеры в YOLO практически без затрат на предобработку.
Зачем экспортировать YOLO26 в CoreML?#
- Скорость Neural Engine: CoreML распределяет поддерживаемые операции по Neural Engine от Apple для инференса с низкой задержкой непосредственно на устройстве. Смотри таблицу ниже с результатами на физических устройствах и измеряй производительность своего экспорта на целевом оборудовании.
- Выбери формат вывода: в экспортах по умолчанию NMS выполняет приложение. Используй
nms=True, чтобы встроить NMS, илиnms=Falseдля головы YOLO26 без NMS. - Конфиденциальность и работа офлайн: все вычисления выполняются на устройстве — без обращений к облаку и ключей API, с полной защитой данных.
- Один экспорт — вся экосистема: один и тот же
.mlpackageработает на iOS, iPadOS, macOS, watchOS, tvOS и visionOS, а также лежит в основе официальных SDK Ultralytics для iOS и плагина Flutter.
Измеренная производительность#
Сквозной инференс одного изображения для стандартизированных ресурсов YOLO26n INT8 CoreML v8.3.0 на iPhone 17 Pro с 12 ГБ памяти и iOS 26.5.2. Чип A19 Pro оснащен 6-ядерным CPU (2 производительных и 4 энергоэффективных ядра), 6-ядерным GPU с Neural Accelerators и 16-ядерным Neural Engine. В каждой ячейке указано общее время (предобработка + инференс + постобработка, без учета аннотирования), а ниже приведено время каждого этапа. В iOS Vision масштабирует входные данные в рамках запроса на инференс, поэтому время предобработки указано как 0, а ее затраты включены во время инференса.
| Модель | Задача | размер (пиксели) | CPU Core ML .cpuOnly(мс) | CPU + предпочтительно ANE Core ML .cpuAndNeuralEngine(мс) |
|---|---|---|---|---|
| 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 для всех остальных задач. - Значения скорости — это задержки при серии запусков для одного изображения: среднее по 15 запускам после 3 прогревочных запусков на
bus.jpg. Их измеряли поэтапно через SDK для iOS, используя тестовый стенд плагина Flutter в режиме профилирования (оптимизированный нативный код). В одном последовательном цикле задачи запускались попеременно на CPU и ускорителе. В строках CPU запрашивается Core ML.cpuOnly, а в строках «CPU + предпочтительно ANE» —.cpuAndNeuralEngine; фактическое распределение операций определяет Core ML. При длительной работе камеры в реальном времени значения выше, поскольку учитывают конвейер захвата и масштабирования, а также стабилизацию температуры. В историческом тесте камеры до стандартизации на том же устройстве было получено 11.3 мс/кадр для детекции YOLO26n и 16.5 мс/кадр для оценки глубины YOLO26n — смотри документацию по производительности SDK для iOS, чтобы узнать о профилировании в установившемся режиме. - Сравни результаты CPU/GPU на Android в интеграции LiteRT и результаты NPU Snapdragon в интеграции Qualcomm QNN.
Поддерживаемые задачи#
Экспорт в CoreML поддерживает все семь задач Ultralytics. Семантическая сегментация и оценка глубины доступны только в YOLO26 — единственном семействе с такими головами.
| Задача | YOLOv8 | YOLO11 | YOLO26 |
|---|---|---|---|
| Обнаружение | ✅ | ✅ | ✅ |
| Сегментация | ✅ | ✅ | ✅ |
| Семантическая сегментация | ❌ | ❌ | ✅ |
| Глубина | ❌ | ❌ | ✅ |
| Классификация | ✅ | ✅ | ✅ |
| Оценка позы | ✅ | ✅ | ✅ |
| OBB | ✅ | ✅ | ✅ |
Экспорт моделей YOLO26 в CoreML#
Установка#
Чтобы установить необходимый пакет, выполни команду:
# Install the required package for YOLO26
pip install ultralyticsКонвертер coremltools автоматически устанавливается при первом экспорте. Экспорт выполняется в macOS или Linux на x86; подробные инструкции и рекомендации смотри в руководстве по установке и руководстве по распространенным проблемам.
Использование#
Формат CoreML поддерживает режимы Export, Predict и Validate. Инференс и валидация с CoreML доступны только в macOS. Экспортируй модель, а затем загрузи экспортированную модель, чтобы запустить инференс или проверить точность.
from ultralytics import YOLO
# Загрузи модель YOLO26
model = YOLO("yolo26n.pt")
# Экспорт в CoreML с квантованием весов INT8, как в официальных моделях приложения
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" (веса INT8 с активациями FP16) или 32/не задано (FP32). ML Program с NMS используют FP16 (для предпросмотра в Xcode и по требованию сегментации и позы); для детекции передай 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), MPS для Apple silicon (device=mps). |
Подробнее о процессе экспорта смотри на странице документации Ultralytics об экспорте.
Использование Neural Engine#
CoreML выбирает оборудование с помощью MLModelConfiguration.computeUnits. В SDK Ultralytics для iOS на iOS 16 и новее по умолчанию используется .cpuAndNeuralEngine, а не .all: в приложении с камерой реального времени GPU уже занят композицией предпросмотра и наложений, поэтому его исключение помогает избежать конкуренции за ресурсы и скачков времени обработки кадров, пока ANE выполняет основную работу. Фиксируй .cpuOnly только для проверки совместимости — стоимость такого выбора показана в таблице выше.
Запуск модели CoreML из Python на компьютере Mac (через Ultralytics или coremltools) работает по тому же принципу: Ultralytics загружает модель с ComputeUnit.CPU_AND_NE (macOS 13 и новее, а в более старых версиях macOS переключается на CPU_ONLY), чтобы инференс выполнялся на Neural Engine (примерно в 3 раза быстрее, чем на CPU). Это также позволяет обойти текущее ограничение macOS на хост-компьютерах: конфигурации по умолчанию ComputeUnit.ALL / CPU_AND_GPU, активирующие путь компиляции GPU/MPSGraph, аварийно завершают процесс с утверждением Error: MLIR pass manager failed на coremltools 9.x.
Развертывание экспортированных моделей YOLO26 CoreML#
Быстрее всего это сделать с помощью официального SDK Ultralytics YOLO для iOS — того же пакета Swift, на котором работают приложение Ultralytics для iOS и плагин Flutter. SDK автоматически определяет официальные названия моделей, загружает модели и сохраняет их в кэше .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
}
}Для приложений с камерой подключи YOLOView из SDK, чтобы выполнять инференс в реальном времени с нативными наложениями, или используй плагин Flutter для кроссплатформенных приложений с общей кодовой базой для Android.
Встроить необработанную модель .mlpackage самостоятельно тоже просто с помощью стека Apple: загрузи ее через MLModel, оберни в VNCoreMLRequest и передавай изображения через VNImageRequestHandler. Подробности описаны в этих материалах:
- Интеграция модели Core ML в приложение: руководство Apple по включению модели CoreML в приложение и работе с ней.
- Инструменты CoreML: справочник по преобразованию, квантованию и оптимизации для набора инструментов
coremltools, используемого при этом экспорте. - Отчеты о производительности Core ML в Xcode: профилирование распределения операций по устройствам и задержек для конкретной модели и устройства.
Включи модель в пакет приложения (она будет доступна сразу — идеально для моделей nano/small) либо загружай при первом запуске и сохраняй в кэше (меньший размер приложения и простое обновление модели). В официальных приложениях используются оба подхода: модели nano по умолчанию включены в приложение и готовы к работе, а более крупные варианты загружаются по запросу и сохраняются локально.
Рекомендуемый рабочий процесс#
- Обучи модель в режиме Train Ultralytics или начни с официальных весов YOLO26
- Экспортируй с помощью
model.export(format="coreml", quantize=8, imgsz=640)в macOS или Linux на x86 (imgsz=224для классификации) - Проверь точность с помощью
model.val()на Mac и профилируй модель на целевом устройстве с помощью отчета о производительности Core ML в Xcode - Разверни модель с помощью SDK для iOS, плагина Flutter или собственной интеграции Vision, ориентируясь на
.cpuAndNeuralEngine
Итоги#
В этом руководстве ты узнал, как экспортировать модели Ultralytics YOLO26 в формат .mlpackage для CoreML, квантовать их для Apple Neural Engine и развертывать с задержкой в несколько миллисекунд — через официальный SDK для iOS и плагин Flutter либо собственную интеграцию Vision. Чтобы выбрать другие целевые платформы, смотри руководство по интеграциям и сравнивай форматы в режиме Benchmark.
Часто задаваемые вопросы#
Запусти
model.export(format="coreml", imgsz=640)в Python илиyolo export model=yolo26n.pt format=coreml imgsz=640из CLI в macOS или Linux на x86. Для классификации используйimgsz=224и добавьquantize=8, чтобы получить модель, соответствующую официальным моделям приложения. В результате экспорта будет создана модель ML Programyolo26n.mlpackage, готовая для Xcode, SDK для iOS или плагина Flutter.Используй
nms=True, если приложению нужны детекции со встроенным NMS. По умолчаниюnms=Noneэкспортирует необработанные выходные данные по принципу «один ко многим», которые обрабатывает приложение;nms=Falseвыбирает голову YOLO26 без NMS. Встроенный NMS поддерживает детекцию, сегментацию и позу при статических формах; остальные задачи сохраняют собственные выходные данные.Официальные модели приложения Ultralytics поставляются в формате INT8: это уменьшает размер загрузки и обеспечивает скорость, указанную в таблице выше.
quantize=16(FP16) — более консервативный вариант, практически не снижающий точность. Перед выпуском проверь точность конкретного экспорта с помощьюmodel.val()на Mac.Задай
MLModelConfiguration.computeUnits = .cpuAndNeuralEngine(значение по умолчанию в SDK для iOS на iOS 16 и новее). Не используй.allв приложениях с камерой: GPU занят композицией предпросмотра, и выполнение инференса на нем приводит к скачкам времени обработки кадров. Проверь распределение операций с помощью отчета о производительности Core ML в Xcode.Да, в macOS:
yolo predict model=yolo26n.mlpackage source=image.jpgиyolo val model=yolo26n.mlpackage data=coco8.yamlработают так же, как с любым другим форматом. Для работы CoreML требуется оборудование Apple, поэтому в Linux и Windows эти режимы недоступны.Используй официальный SDK Ultralytics YOLO для iOS (Swift Package) или плагин Flutter. Оба решения загружают официальные модели по имени, автоматически скачивают и кэшируют их, выполняют на Neural Engine и предоставляют готовые пользовательские интерфейсы камеры для работы в реальном времени — таблица производительности выше получена именно с помощью этого стека.