OpenCV 5 релиз – новый DNN-движок с улучшенной поддержкой ONNX, LLM/VLM, аппаратное ускорение Intel, Arm и RISC-V

Недавно была выпущена пятая версия библиотеки компьютерного зрения OpenCV с открытым исходным кодом, которая получила全新的 DNN (глубокая нейронная сеть) движок с лучшей поддержкой ONNX и возможностью работы с LLM/VLM.

Пятая версия популярной библиотеки CV также добавляет поддержку аппаратного ускорения Intel, Arm, Qualcomm и RISC-V, улучшенное 3D-зрение, а также различные новые основные функции, такие как новые типы данных, полноценная N-мерная и скалярная поддержка, а также улучшения производительности.

OpenCV 5

DNN-движок OpenCV 5

OpenCV 4.x поддерживает около 22% операторов ONNX, а новый DNN-движок в OpenCV 5 расширяет покрытие до более чем 80%. Это означает, что модели с динамическими формами, которые не работали в OpenCV 4.x, теперь должны работать, так как движок 5.x был перестроен на основе графа операций с типизацией, правильным выводом формы, свёрткой констант и слиянием операторов.

ONNX Coverage OpenCV 5 vs 4
Покрытие ONNX: OpenCV 4.x против OpenCV 5

В таблице ниже показаны основные различия между OpenCV 4.x и OpenCV 5

Аспект Классический движок (4.x) Новый движок (5.x)
Представление модели Одна структура на слой, обход в порядке следования Типизированный граф, который может анализировать движок
Формы Только статический Символический динамичный
Подграфы Не поддерживается Поддерживается If и Loop
Слияние Ограниченное QDQ, BatchNorm, Attention, MatMul, Softmax и более
Память Повторно используется для каждого слоя Единый буферный пул, который активно повторно использует память

Поскольку это довольно большое изменение, чтобы ничего не сломать, можно выбрать один из четырёх вариантов движка:

  • ENGINE_CLASSIC (1) – принудительное использование старого движка версии 4.x. Поддерживает не-CPU бэкенды и цели, такие как CUDA и OpenVINO.
  • ENGINE_NEW (2) – принудительное использование нового графового движка со слиянием и динамическими формами. Важно: новый движок пока работает только на CPU, хотя работа над ускорением вывода на GPU и не-CPU HAL для предварительной/последующей обработки для нового DNN уже начата.
  • ENGINE_AUTO (3) – по умолчанию. Сначала пытается использовать новый движок, а в случае неудачи загрузки модели переключается на классический.
  • ENGINE_ORT (4) – использование встроенной обёртки ONNX Runtime. Только модели ONNX, причём сборка должна быть настроена с WITH_ONNXRUNTIME=ON.

Хотя аббревиатура CV в OpenCV означает Computer Vision (компьютерное зрение), OpenCV 5 также может запускать большие языковые модели (LLM) и визуально-языковые модели (VLM) непосредственно внутри модуля DNN без отдельного рантайма благодаря встроенному токенизатору и KV-кэшу для авторегрессионного декодирования. Qwen 2.5, Gemma 3, PaliGemma, а также модели семейства GPT-2 / GPT-4 работают через тот же Net API, что используется для модели YOLO.

На практике это означает, что в OpenCV 5 теперь поддерживаются различные модели обнаружения, сегментации, визуально-языковые и генеративные AI-модели.

OpenCV 5 Model enabled by new DNN

Производительность также выглядит довольно хорошо, как показано в таблице ниже, где сравнивается DNN OpenCV 5 с ONNX runtime на машине с Intel Core i9-14900KS под управлением Ubuntu 24.04 LTS.

Model OpenCV 5 DNN (ms) ONNX Runtime (ms) Difference
XFeat 6.56 8.61 31.25% faster
YOLOv8n 10.9 12.15 11.5% faster
YOLOX-S 23.46 25.16 7.24% faster
DINOv2 small 23.78 29.58 24.4% faster
RF-DETR 102.01 106.49 4.4% faster
OWLv2 1,090 1,489 36.6% faster
BiRefNet 7,178 9,503.14 32.4% faster

Дополнительные бенчмарки на различных платформах можно найти в вики на GitHub ..

Новые базовые функции

Помимо изменений в глубоком обучении, ядро OpenCV также получило улучшения:

  • Новые типы данных. OpenCV 5 добавляет типы первого класса FP16 (cv::hfloat, CV_16F) и BF16 (cv::bfloat, CV_16BF), а также bool, 64-битные целые числа и другие.
  • Полноценная N-мерная и скалярная поддержка. cv::Mat теперь может представлять 0D (скалярные) и 1D массивы; OpenCV 5 также добавляет широковещательную рассылку и N-мерные операции первого класса, такие как transposeND и flipND.
  • Улучшенная производительность. Ускорение до 2 раз на математических нагрузках, и один и тот же код теперь выполняется на CPU и ускорителях без изменений.

Были проведены некоторые чистки в языковой части:

  • Устаревший C API официально признан устаревшим.
  • C++17 теперь является минимальным рекомендованным стандартом, а модули C++20 запланированы для более поздних релизов 5.x.
  • Python – поддержка NumPy 2.x, более глубокая интеграция и именованные (ключевые) аргументы для алгоритмов C++, так что теперь можно писать cv.someAlgorithm(threshold=0.5) вместо запоминания позиционного порядка.

Аппаратное ускорение

OpenCV 5 использует переработанный уровень аппаратного ускорения (HAL), основанный на Universal Intrinsics 2.0 – единой векторной кодовой базе, которая отображается на SSE, AVX2/512, NEON, SVE, RVV и другие. Поддерживаются следующие ускорители:

  • Intel IPP (IPPICV) – реструктурирован из оригинального пути ускорения x86/x64. Бесплатный поднабор (ICV) поставляется по умолчанию, диспетчеризуя оптимизированные для SSE/AVX ядра для фильтрации, преобразования цветов и геометрических трансформаций.
  • Arm KleidiCV – HAL для AArch64, ускоряющий основные операции обработки изображений и ядра DNN с использованием NEON, SVE и SME, протестирован на AWS Graviton 4 и чипах Cortex-A. Включается автоматически для поддерживаемых операций; на операциях Arm, таких как масштабирование и деформация, замерено ускорение до 3-4 раз.
  • Qualcomm FastCV – ускорение на устройствах Snapdragon через Hexagon DSP и NPU.
  • RISC-V Vector (RVV) – масштабируемая векторная поддержка, в основном реализованная организацией OpenCV China.

Это один и тот же высокоуровневый код для всех четырёх, и OpenCV автоматически выбирает наилучший путь на том оборудовании, на котором работает.

Улучшенное 3D-зрение

3D-зрение OpenCV 5 поддерживает калибровку нескольких камер, ввод/вывод облаков точек и сеток, плотную RGB-D-реконструкцию. Реализованы три модуля:

  • 3d: базовая 3D-геометрия и зрение, включая ввод/вывод, геометрические примитивы, алгоритмы (например, ICP) и части SLAM.
  • calib: калибровка камеры, включая калибровку одной камеры и переработанный конвейер для нескольких камер.
  • stereo: глубина по стереопаре.

Разработчики утверждают, что это значительное обновление для людей, работающих со структурой из движения, робототехникой или любым видом реконструкции.

Более подробную информацию об OpenCV 5 можно найти в анонсе и на обновлённом сайте документации , а исходный код размещён на GitHub . В анонсе говорится, что «pip-версия OpenCV 5 будет выпущена 8 июня», но пока я вижу только «4.13.0.92», так что пока всё ещё нужно собирать из исходников.

Выражаем свою благодарность источнику, с которого взята и переведена статья, сайту cnx-software.com.

Оригинал статьи вы можете прочитать здесь.

0 0 votes
Article Rating
Подписаться
Уведомление о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

0 Комментарий
Oldest
Newest Most Voted
Inline Feedbacks
View all comments