Ultralytics YOLO27:

Экспорт CoreML для моделей YOLO26#

Apple устанавливает специализированные AI-чипы — Neural Engine — во все современные iPhone, iPad и Mac, а CoreML — это поддерживаемый Ultralytics способ развёртывания моделей на них. Экспорт моделей Ultralytics YOLO26 в CoreML преобразует обученный чекпойнт .pt в нативный .mlpackage, который запускает на устройстве все семь задач YOLO с низкой задержкой, без подключения к сети и передачи данных за пределы устройства.

Запускай YOLO на Apple Neural Engine уже сегодня с помощью официальных мобильных приложений

Официальный SDK Ultralytics YOLO для iOS и плагин Flutter запускают экспортированные модели CoreML на Apple Neural Engine сразу после установки: инференс с камеры в реальном времени, предсказание для отдельного изображения и автоматическая загрузка моделей для всех семи задач YOLO26, включая глубину. Для развёртывания на NPU Android см. интеграцию Qualcomm QNN.

Официальные размеры входных данных для мобильных устройств

Экспортируй модели классификации в imgsz=224. Экспортируй модели детекции, сегментации, семантической сегментации, оценки глубины, позы и OBB в imgsz=640. Этот стандарт 224/640 используется в официальных мобильных ресурсах CoreML, LiteRT и QNN.

Новый формат Core AI от Apple

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?#

Apple CoreML deployment pipeline

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Обнаружение6409.2
0.0 / 9.2 / 0.0
3.2
0.0 / 3.2 / 0.0
YOLO26n-segСегментация64012.6
0.0 / 12.0 / 0.5
4.8
0.0 / 4.2 / 0.6
YOLO26n-semСемантическая6409.7
0.0 / 9.2 / 0.5
4.6
0.0 / 4.2 / 0.5
YOLO26n-depthГлубина64025.0
0.0 / 24.1 / 0.9
5.3
0.0 / 4.5 / 0.9
YOLO26n-clsКлассификация2242.2
0.0 / 2.2 / 0.0
1.9
0.0 / 1.9 / 0.0
YOLO26n-poseПоза64011.9
0.0 / 11.9 / 0.0
3.9
0.0 / 3.9 / 0.0
YOLO26n-obbOBB64010.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 — единственном семействе с такими головами.

Экспорт моделей 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")

Аргументы экспорта#

АргументТипПо умолчаниюОписание
formatstr'coreml'Целевой формат экспортируемой модели, определяющий совместимость с различными средами развертывания.
imgszint или tuple640Заданный размер изображения на входе модели. Можно указать целое число для квадратных изображений или кортеж (height, width) для конкретных размеров.
quantizeint или strNoneТочность квантования (только весов для CoreML): 16 (FP16), 8 (INT8), "w8a16" (веса INT8 с активациями FP16) или 32/не задано (FP32). ML Program с NMS используют FP16 (для предпросмотра в Xcode и по требованию сегментации и позы); для детекции передай 32, чтобы переопределить это значение. Заменяет устаревшие флаги half/int8.
nmsbool, необязательноNoneВыбери необработанный вывод (None, по умолчанию), встроенный NMS (True) или голову без NMS (False). Встроенный NMS поддерживает детекцию, сегментацию и позу при статических размерах с помощью dynamic=False.
dynamicboolFalseРазрешает динамические размеры входных данных. Не поддерживается для моделей классификации и RT-DETR; нельзя сочетать с nms=True.
batchint1Задает размер батча при инференсе экспортированной модели или максимальное число изображений, которые экспортированная модель обрабатывает одновременно в режиме predict. Для значений выше 1 требуется dynamic=True.
devicestrNoneЗадает устройство для экспорта: 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. Подробности описаны в этих материалах:

Включи модель в пакет приложения (она будет доступна сразу — идеально для моделей nano/small) либо загружай при первом запуске и сохраняй в кэше (меньший размер приложения и простое обновление модели). В официальных приложениях используются оба подхода: модели nano по умолчанию включены в приложение и готовы к работе, а более крупные варианты загружаются по запросу и сохраняются локально.

  1. Обучи модель в режиме Train Ultralytics или начни с официальных весов YOLO26
  2. Экспортируй с помощью model.export(format="coreml", quantize=8, imgsz=640) в macOS или Linux на x86 (imgsz=224 для классификации)
  3. Проверь точность с помощью model.val() на Mac и профилируй модель на целевом устройстве с помощью отчета о производительности Core ML в Xcode
  4. Разверни модель с помощью 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 Program yolo26n.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 и предоставляют готовые пользовательские интерфейсы камеры для работы в реальном времени — таблица производительности выше получена именно с помощью этого стека.

Комментарии