Недавно была выпущена пятая версия библиотеки компьютерного зрения OpenCV с открытым исходным кодом, которая получила全新的 DNN (глубокая нейронная сеть) движок с лучшей поддержкой ONNX и возможностью работы с LLM/VLM.
Пятая версия популярной библиотеки CV также добавляет поддержку аппаратного ускорения Intel, Arm, Qualcomm и RISC-V, улучшенное 3D-зрение, а также различные новые основные функции, такие как новые типы данных, полноценная N-мерная и скалярная поддержка, а также улучшения производительности.
DNN-движок OpenCV 5
OpenCV 4.x поддерживает около 22% операторов ONNX, а новый DNN-движок в OpenCV 5 расширяет покрытие до более чем 80%. Это означает, что модели с динамическими формами, которые не работали в OpenCV 4.x, теперь должны работать, так как движок 5.x был перестроен на основе графа операций с типизацией, правильным выводом формы, свёрткой констант и слиянием операторов.

В таблице ниже показаны основные различия между 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-модели.
Производительность также выглядит довольно хорошо, как показано в таблице ниже, где сравнивается 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.
Оригинал статьи вы можете прочитать здесь.


