Ultralytics YOLO27:

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

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

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

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

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

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

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

Apple представила новый Core AI framework и формат .aimodel для поколения iOS 27 и macOS 27, и Ultralytics экспортирует его с помощью format="coreai". CoreML остается форматом по умолчанию для SDK iOS и Flutter от Ultralytics, которые загружают Core AI как опцию на устройствах с iOS 27, а также форматом для более широкой совместимости с устройствами Apple.



Watch: How to Export Ultralytics YOLO26 to CoreML with INT8 Quantization | Apple Deployment | 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, который масштабирует и ориентирует изображения перед передачей в модель. Именно так Ultralytics iOS SDK передаёт кадры с камеры в 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, а также используется официальными iOS SDK и Flutter plugin Ultralytics.

Измеренная производительность#

Сквозной инференс одного изображения для стандартизированных ресурсов v8.3.0 YOLO26n INT8 CoreML на 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
(мс)
YOLO26nDetect6409.2
0.0 / 9.2 / 0.0
3.2
0.0 / 3.2 / 0.0
YOLO26n-segSegment64012.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 для всех остальных задач.
  • Значения Speed — это задержки пакетной обработки одного изображения: среднее значение для 15 запусков после 3 прогревочных запусков на bus.jpg, измеренное с помощью поэтапного тайминга iOS SDK через тестовый стенд Flutter plugin в режиме профилирования (оптимизированный нативный код). Порядок CPU/ускорителя чередовался между задачами в одном последовательном проходе. Для строк CPU запрашивается Core ML .cpuOnly, а для строк CPU + ANE, предпочтительно, — .cpuAndNeuralEngine; окончательное размещение операций контролирует Core ML. При длительной работе камеры в реальном времени значения выше, поскольку учитывают конвейер захвата и масштабирования, а также стабилизацию температуры. В ходе исторического измерения камеры до введения стандарта на том же устройстве были получены значения 11.3 мс/кадр для detect YOLO26n и 16.5 мс/кадр для Depth YOLO26n — см. документацию по производительности iOS SDK, посвящённую профилированию установившегося режима.
  • Сравни результаты CPU/GPU для Android в интеграции LiteRT и результаты NPU Snapdragon в интеграции Qualcomm QNN.

Поддерживаемые задачи#

Экспорт CoreML поддерживает все семь задач Ultralytics. Семантическая сегментация и оценка глубины доступны только в YOLO26 — единственном семействе с такими головами.

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

Установка#

Чтобы установить необходимый пакет, выполни:

Установка
# Install the required package for YOLO26
pip install ultralytics

Конвертер coremltools устанавливается автоматически при первом экспорте. Экспорт выполняется в macOS или x86 Linux; подробные инструкции и рекомендации см. в нашем руководстве по установке и руководстве по распространённым проблемам.

Использование#

Формат CoreML поддерживает режимы Export, Predict и Validate. Инференс и валидация с 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, imgsz=640)  # use imgsz=224 for classification
Predict
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")

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

АргументТипПо умолчаниюОписание
formatstr'coreml'Целевой формат экспортированной модели, определяющий совместимость с различными средами развёртывания.
imgszint или tuple640Требуемый размер изображения для входных данных модели. Может быть целым числом для квадратных изображений или кортежем (height, width) для указания конкретных размеров.
quantizeint или strNoneТочность квантования (только веса для CoreML): 16 (FP16), 8 (INT8), "w8a16" (веса INT8 с активациями FP16) или 32/не задано (FP32). ML Programs NMS используют FP16 (для предпросмотра в Xcode и обязательно для segment и pose); передай 32, чтобы переопределить это значение для detect. Заменяет устаревшие флаги 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. Ultralytics iOS SDK по умолчанию использует .cpuAndNeuralEngine в iOS 16+ вместо .all: в приложении с камерой реального времени GPU уже занят компоновкой предпросмотра и наложений, поэтому его исключение предотвращает конкуренцию за ресурсы и дрожание времени обработки кадров, пока ANE выполняет основную работу. Используй .cpuOnly только для проверки совместимости — в таблице выше показана соответствующая стоимость.

Запуск модели CoreML из Python на хосте Mac (через 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.

Развёртывание экспортированных моделей YOLO26 CoreML#

Самый быстрый способ — официальный Ultralytics YOLO iOS SDK, тот же пакет Swift, который используется в приложении Ultralytics для iOS и Flutter plugin. Он автоматически распознаёт официальные имена моделей, загружает и кэширует .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 plugin для кроссплатформенных приложений с единой кодовой базой для Android.

Самостоятельная интеграция необработанного .mlpackage также проста с использованием стека Apple: загрузи его с помощью MLModel, оберни в VNCoreMLRequest и передавай изображения через VNImageRequestHandler. Подробности приведены в следующих ресурсах:

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

Рекомендуемый рабочий процесс#

  1. Обучи модель с помощью режима Train Ultralytics или начни с официальных весов YOLO26
  2. Экспортируй с помощью model.export(format="coreml", quantize=8, imgsz=640) в macOS или x86 Linux (imgsz=224 для классификации)
  3. Проверь точность с помощью model.val() на Mac и выполни профилирование с помощью отчёта о производительности Core ML в Xcode на целевом устройстве
  4. Разверни модель с помощью iOS SDK, Flutter plugin или собственной интеграции Vision, выбрав .cpuAndNeuralEngine

Итоги#

В этом руководстве ты узнал, как экспортировать модели Ultralytics YOLO26 в формат .mlpackage CoreML, квантовать их для Apple Neural Engine и развёртывать с задержкой в единицы миллисекунд — через официальный iOS SDK и Flutter plugin или собственную интеграцию Vision. Для других целевых платформ открой страницу руководства по интеграциям и сравни форматы с помощью режима Benchmark.

Часто задаваемые вопросы#

  • Выполни model.export(format="coreml", imgsz=640) в Python или yolo export model=yolo26n.pt format=coreml imgsz=640 из CLI в macOS или x86 Linux. Используй imgsz=224 для классификации и добавь quantize=8, чтобы соответствовать моделям официального приложения. В результате экспорта создаётся yolo26n.mlpackage ML Program, готовый для Xcode, iOS SDK или Flutter plugin.

  • Используй nms=True, если твоему приложению нужны детекции с включенной NMS. Значение по умолчанию nms=None экспортирует сырые результаты «один ко многим» для обработки твоим приложением; nms=False выбирает голову YOLO26 без NMS. Встроенная NMS поддерживает детектирование, сегментацию и позы со статическими формами; остальные задачи сохраняют свой собственный вывод.

  • Официальные модели приложений Ultralytics поставляются в формате INT8, что минимизирует размер загрузки и обеспечивает скорость, указанную в таблице выше. quantize=16 (FP16) — консервативная альтернатива практически без потери точности. Перед выпуском проверь свой конкретный экспорт с помощью model.val() на Mac.

  • Установи MLModelConfiguration.computeUnits = .cpuAndNeuralEngine (значение по умолчанию в iOS SDK на 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.

  • Используй официальный Ultralytics YOLO iOS SDK (Swift Package) или Flutter plugin. Оба компонента загружают официальные модели по имени, автоматически скачивают и кэшируют их, запускают на Neural Engine и включают полнофункциональные интерфейсы камеры реального времени — приведённая выше таблица производительности получена именно с этим стеком.

Комментарии