Link to this sectionЭкспорт CoreML для моделей YOLO26#
Apple оснащает все современные iPhone, iPad и Mac специализированным ИИ-процессором Neural Engine, а CoreML является поддерживаемым Ultralytics способом развертывания моделей на этих устройствах. Экспорт моделей Ultralytics YOLO26 в CoreML превращает обученную контрольную точку .pt в нативный формат .mlpackage, который выполняет все семь задач YOLO локально с низкой задержкой, без необходимости подключения к сети и выхода данных с устройства.
Официальные Ultralytics YOLO iOS SDK и плагин Flutter позволяют запускать экспорт CoreML на Apple Neural Engine «из коробки» — обеспечивая инференс с камеры в реальном времени, предсказание для одного изображения и автоматическую загрузку моделей для всех семи задач YOLO26, включая Depth. Информацию о развертывании на NPU для Android см. в интеграции Qualcomm QNN.
Apple представила новый фреймворк Core AI и формат .aimodel для поколения iOS 27 и macOS 27. Экспорт Ultralytics в Core AI запланирован на четвертый квартал 2026 года, но пока недоступен. CoreML остается поддерживаемым форматом для текущих релизов Ultralytics и обеспечения широкой совместимости с устройствами Apple.
Watch: How to Export Ultralytics YOLO26 to CoreML for 2x Fast Inference on Apple Devices 🚀
Link to this sectionЧто такое CoreML?#
CoreML (в стиле Apple «Core ML») — это фреймворк Apple для машинного обучения на устройстве. Он загружает модели в современном формате ML Program — это пакет .mlpackage, который создает экспортер Ultralytics, — и распределяет их между CPU, GPU и Apple Neural Engine (ANE), специализированным NPU в каждом чипе Apple Silicon. Поскольку все выполняется локально, инференс работает офлайн, не добавляет задержек сети и сохраняет пользовательские данные на устройстве.
CoreML напрямую интегрируется с фреймворком Vision от Apple, который управляет масштабированием и ориентацией изображений перед их подачей в модель — именно так iOS SDK Ultralytics передает кадры с камеры в YOLO практически с нулевыми затратами на предобработку.
Link to this sectionЗачем экспортировать YOLO26 в CoreML?#
- Скорость Neural Engine: обнаружение с помощью YOLO26n выполняется от начала до конца за 3,8 мс на iPhone 17 Pro для одного изображения и за 11,3 мс/кадр при использовании камеры в режиме реального времени; YOLO26n Depth занимает 5,5 мс для одного изображения и 16,5 мс/кадр в режиме камеры (см. таблицу и примечания ниже).
- Без NMS по своей сути: YOLO26 является end-to-end, поэтому экспортированному графу не нужен конвейер NMS, а декодирование занимает менее миллисекунды. Более старые модели обнаружения, такие как YOLO11, могут встраивать конвейер CoreML NMS с помощью
nms=True. - Приватно и офлайн: все вычисления остаются на устройстве — никаких обращений к облаку, никаких API-ключей, полная конфиденциальность данных.
- Один экспорт — вся экосистема: один и тот же файл
.mlpackageработает на iOS, iPadOS, macOS, watchOS, tvOS и visionOS, а также поддерживает официальный iOS SDK и плагин Flutter от Ultralytics.
Link to this sectionИзмеренная производительность#
Инференс от начала до конца для одного изображения на официальных моделях YOLO26n INT8 CoreML на iPhone 17 Pro (Apple A19, iOS 26.5.2). В каждой ячейке указано общее время (препроцессинг + инференс + постпроцессинг, без учета аннотации) с разбивкой по этапам под ним. В iOS Vision выполняет масштабирование входных данных внутри запроса на инференс, поэтому препроцессинг отображается как 0, а его стоимость включена в инференс.
| Модель | Задача | размер (пиксели) | CPU.cpuOnly(мс) | Neural Engine.cpuAndNeuralEngine(мс) |
|---|---|---|---|---|
| YOLO26n | Обнаружение | 640 | 9.1 0.0 / 9.1 / 0.0 | 3.8 0.0 / 3.8 / 0.0 |
| YOLO26n-seg | Сегментация | 640 | 12.3 0.0 / 12.1 / 0.2 | 4.8 0.0 / 4.5 / 0.3 |
| YOLO26n-sem | Семантика | 10241 | 21.8 0.0 / 21.0 / 0.8 | 12.1 0.0 / 11.3 / 0.8 |
| YOLO26n-depth | Depth | 640 | 24.8 0.0 / 23.9 / 0.9 | 5.5 0.0 / 4.7 / 0.9 |
| YOLO26n-cls | Классификация | 224 | 2.2 0.0 / 2.2 / 0.0 | 2.0 0.0 / 2.0 / 0.0 |
| YOLO26n-pose | Поза | 640 | 12.0 0.0 / 11.9 / 0.0 | 3.8 0.0 / 3.8 / 0.0 |
| YOLO26n-obb | OBB | 1024 | 21.7 0.0 / 21.7 / 0.0 | 7.2 0.0 / 7.2 / 0.0 |
- 1 Экспорт семантического CoreML встраивает ArgMax в граф и возвращает компактную карту классов в полном разрешении (
[1, 1024, 1024]) вместо float-логитов, поэтому постобработка представляет собой цветовое сканирование длительностью менее миллисекунды, а маски отображаются с высокой четкостью пикселей. - Значения скорости — это задержки при пакетной обработке одного изображения — среднее арифметическое значение 15 запусков после 3 прогревочных запусков на
bus.jpg, измеренное с помощью пошагового тайминга iOS SDK через бенчмарк-инструментарий плагина Flutter в режиме профилирования (оптимизированный нативный код). Стабильная работа камеры в реальном времени требует больше времени, так как включает конвейер захвата и масштабирования, а также тепловую стабилизацию: YOLO26n detect показывает 11,3 мс/кадр, а YOLO26n Depth — 16,5 мс/кадр в приложении камеры на том же устройстве — см. документацию по производительности iOS SDK для профилирования установившегося режима. - Соответствующая таблица для CPU/GPU/NPU Snapdragon находится в разделе интеграции Qualcomm QNN.
Link to this sectionЭкспорт моделей YOLO26 в CoreML#
Link to this sectionУстановка#
Чтобы установить необходимый пакет, выполни:
# Install the required package for YOLO26
pip install ultralyticsКонвертер coremltools устанавливается автоматически при первом экспорте. Экспорт работает на macOS или x86 Linux; подробные инструкции и лучшие практики смотри в нашем руководстве по установке и руководстве по распространенным проблемам.
Link to this sectionИспользование#
Формат CoreML поддерживает режимы Экспорт, Предсказание и Валидация. Инференс и валидация с CoreML работают только на macOS. Экспортируй свою модель, а затем загрузи ее для выполнения инференса или проверки точности.
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) # creates 'yolo26n.mlpackage'from 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")Link to this sectionАргументы экспорта#
| Аргумент | Тип | По умолчанию | Описание |
|---|---|---|---|
format | str | 'coreml' | Целевой формат для экспортированной модели, определяющий совместимость с различными средами развертывания. |
imgsz | int или tuple | 640 | Желаемый размер изображения для входных данных модели. Может быть целым числом для квадратных изображений или кортежем (height, width) для конкретных размеров. |
quantize | int или str | None | Точность квантования (только для весов в CoreML): 16 (FP16), 8 (INT8), "w8a16" (веса INT8 с активациями FP16) или 32/не задано (FP32). Не заданные ML-программы NMS используют FP16 для предварительного просмотра в Xcode; передай 32, чтобы переопределить это. Заменяет устаревшие флаги half/int8. |
nms | bool | False | Встраивает конвейер CoreML NMS. Только для моделей обнаружения (для других задач игнорируется с предупреждением); не требуется для YOLO26, где NMS не используется, но пригодится для более ранних моделей, таких как YOLO11. |
dynamic | bool | False | Позволяет использовать динамические размеры входных данных, повышая гибкость при обработке изображений с различными размерами. |
batch | int | 1 | Задает размер пакета (batch) для вывода экспортированной модели или максимальное количество изображений, которые модель будет обрабатывать одновременно в режиме predict. |
device | str | None | Указывает устройство для экспорта: GPU (device=0), CPU (device=cpu), MPS для Apple silicon (device=mps). |
Для получения дополнительной информации о процессе экспорта посети страницу документации Ultralytics по экспорту.
Link to this sectionНацеливание на Neural Engine#
CoreML выбирает оборудование через MLModelConfiguration.computeUnits. iOS SDK Ultralytics по умолчанию использует .cpuAndNeuralEngine на iOS 16+ вместо .all: в приложении камеры в реальном времени GPU уже занят композитингом превью и оверлеев, поэтому исключение его из работы позволяет избежать конфликтов и джиттера времени кадра, пока ANE выполняет основную работу. Выбирай .cpuOnly только для проверки совместимости — таблица выше показывает, сколько это стоит.
Запуск модели CoreML из Python на Mac host (через Ultralytics или coremltools) следует тем же правилам: Ultralytics загружается с ComputeUnit.CPU_AND_NE (macOS 13+ с переходом на CPU_ONLY в старых версиях macOS), что позволяет выполнять инференс на Neural Engine (в ~3 раза быстрее, чем на CPU). Это также позволяет избежать текущего ограничения macOS, при котором использование стандартных ComputeUnit.ALL / CPU_AND_GPU, добавляющих путь компиляции GPU/MPSGraph, прерывает процесс с ошибкой Error: MLIR pass manager failed в coremltools 9.x.
Link to this sectionРазвертывание экспортированных моделей YOLO26 CoreML#
Самый быстрый путь — это официальный iOS SDK Ultralytics YOLO, тот же пакет 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
}
}Для приложений с камерой используй готовый YOLOView из SDK для инференса в реальном времени с нативными оверлеями или используй плагин Flutter для кроссплатформенных приложений, использующих одну кодовую базу с Android.
Интегрировать «сырой» файл .mlpackage самостоятельно также несложно с помощью стека Apple — загрузи его через MLModel, оберни в VNCoreMLRequest и передавай изображения через VNImageRequestHandler. Эти ресурсы охватывают детали:
- Интеграция модели Core ML в твое приложение: руководство Apple по объединению и вызову модели CoreML.
- CoreML Tools: справочник по конвертации, квантованию и оптимизации для инструментария
coremltools, который обеспечивает этот экспорт. - Отчеты о производительности Xcode Core ML: профилирование размещения слоев на устройстве и задержек для твоей конкретной модели и устройства.
Поставляй модель либо встроенной в бандл приложения (мгновенная доступность, идеально для моделей nano/small), либо загружаемой при первом запуске и кэшируемой (меньший размер бинарного файла, легкие обновления модели) — официальные приложения используют второй подход с релизными ассетами GitHub.
Link to this sectionРекомендуемый рабочий процесс#
- Обучай свою модель с помощью режима обучения Ultralytics или начни с официальных весов YOLO26
- Экспортируй с помощью
model.export(format="coreml", quantize=8)на macOS или x86 Linux. - Проверяй точность с помощью
model.val()на Mac и профилируй с помощью отчета о производительности Xcode Core ML на целевом устройстве - Развертывай с помощью iOS SDK, плагина Flutter или собственной интеграции Vision, нацеливаясь на
.cpuAndNeuralEngine
Link to this sectionРезюме#
В этом руководстве ты узнал, как экспортировать модели Ultralytics YOLO26 в формат .mlpackage для CoreML, квантовать их для Apple Neural Engine и развертывать с задержками в считанные миллисекунды — через официальный iOS SDK и плагин Flutter или через собственную интеграцию Vision. Для других целей развертывания просмотри страницу руководства по интеграции и сравни форматы с режимом Benchmark.
Link to this sectionFAQ#
Link to this sectionКак экспортировать модели YOLO26 в формат CoreML?#
Запусти model.export(format="coreml") в Python или yolo export model=yolo26n.pt format=coreml через CLI на macOS или x86 Linux. Добавь quantize=8, чтобы соответствовать официальным моделям приложения. Экспорт создает yolo26n.mlpackage ML Program, готовую для Xcode, iOS SDK или плагина Flutter.
Link to this sectionНужно ли мне nms=True при экспорте YOLO26?#
Нет. YOLO26 работает без NMS, поэтому экспортированный граф уже выдает финальные результаты обнаружения, а декодирование занимает значительно меньше миллисекунды. Опция nms=True существует для более ранних моделей обнаружения, таких как YOLO11: она встраивает конвейер CoreML NMS, чтобы твоему приложению не приходилось реализовывать подавление. Конвейеры CoreML NMS поддерживают только обнаружение объектов, поэтому nms=True игнорируется с предупреждением для других задач, таких как сегментация и определение позы.
Link to this sectionКакую точность использовать — FP16 или INT8?#
Официальные модели приложения Ultralytics поставляются в формате INT8, что минимизирует размер загрузки и обеспечивает скорость, указанную в таблице выше. quantize=16 (FP16) — это консервативная альтернатива практически без потери точности. Перед выпуском проверь свой конкретный экспорт с помощью model.val() на Mac.
Link to this sectionКак убедиться, что инференс выполняется на Neural Engine?#
Установи MLModelConfiguration.computeUnits = .cpuAndNeuralEngine (по умолчанию в iOS SDK на iOS 16+). Избегай .all в приложениях с камерой — GPU занят композитингом превью, и планирование инференса там вызывает джиттер времени кадра. Подтверди размещение с помощью отчета о производительности Xcode Core ML.
Link to this sectionМогу ли я запускать и проверять модели CoreML с помощью Ultralytics CLI?#
Да, на macOS: yolo predict model=yolo26n.mlpackage source=image.jpg и yolo val model=yolo26n.mlpackage data=coco8.yaml работают так же, как и с любым другим форматом. Выполнение CoreML требует оборудования Apple, поэтому эти режимы недоступны на Linux и Windows.
Link to this sectionКакой самый быстрый способ запустить YOLO26 в приложении iOS или Flutter?#
Используй официальный iOS SDK Ultralytics YOLO (Swift Package) или плагин Flutter. Оба варианта загружают официальные модели по имени с автоматической загрузкой и кэшированием, запускают их на Neural Engine и включают полноценные пользовательские интерфейсы камеры в реальном времени — таблица измеренной производительности выше была создана именно с этим стеком.