Відбувся реліз OpenCV 5. Розбираємо, що там цікавого
Нещодавно стало відомо, що відбувся реліз OpenCV 5. Якщо вірити словам авторів, то це оновлення повністю змінює логіку інструменту. Розробники врахували сучасні реалії індустрії, позбулися багаторічних обмежень та перетворили бібліотеку на передовий рушій для роботи з LLM та
Новий графовий рушій
Найголовніша зміна стосується модуля глибокого навчання. Попередні версії підтримували ледве двадцять два відсотки операторів ONNX, що робило запуск сучасних моделей справжнім випробуванням. В OpenCV 5 же ж сумісність перевищила вісімдесят відсотків.

Новий рушій сприймає мережу не як плоский список шарів, а як єдиний граф. І саме це дозволяє системі динамічно обчислювати форми та об’єднувати типові операції в один швидкий процес. Обчислення прискорилися настільки, що у прямих тестах на центральних процесорах OpenCV 5 тепер часто обходить спеціалізований ONNX Runtime.
|
Модель |
OpenCV 5 DNN (мс) |
ONNX Runtime (мс) |
Різниця |
|
XFeat |
6.56 |
8.61 |
на 31.25% швидше |
|
YOLOv8n |
10.9 |
12.15 |
на 11.5% швидше |
|
YOLOX-S |
23.46 |
25.16 |
на 7.24% швидше |
|
DINOv2 small |
23.78 |
29.58 |
на 24.4% швидше |
|
RF-DETR |
102.01 |
106.49 |
на 4.4% швидше |
|
OWLv2 |
1,090 |
1,489 |
на 36.6% швидше |
|
BiRefNet |
7,178 |
9,503.14 |
на 32.4% швидше |
Щоб стабільні конвеєри не ламалися в день оновлення, розробники залишили доступними одразу кілька рушіїв під одним знайомим DNN API. Вибір архітектури відбувається безпосередньо в момент зчитування моделі через аргумент engine у функціях сімейства readNet*.
За замовчуванням у системі активний режим автоматичного вибору ENGINE_AUTO. У цьому сценарії OpenCV спершу тестує новий графовий рушій, а якщо модель містить непідтримувані елементи, вона непомітно повертається до класичного варіанту. Також розробники передбачили режим примусового запуску нової архітектури ENGINE_NEW, роботу суто через старий рушій 4.х чи пряму інтеграцію з ONNX Runtime.
На практиці це виглядає досить просто.
Реалізація на Python:
import cv2 as cv
# Автоматичний вибір за замовчуванням — новий рушій, або класичний як резерв
net = cv.dnn.readNetFromONNX("model.onnx")
# Або примусова фіксація нової графової архітектури
# net = cv.dnn.readNetFromONNX("model.onnx", engine=cv.dnn.ENGINE_NEW)
net.setInput(blob)
out = net.forward()
Реалізація на C++:
#include <opencv2/dnn.hpp>
using namespace cv;
// Автоматичний вибір рушія
dnn::Net net = dnn::readNetFromONNX("model.onnx");
// Або чітка фіксація потрібної архітектури під час завантаження
// dnn::Net netNew = dnn::readNetFromONNX("model.onnx", dnn::ENGINE_NEW);
net.setInput(blob);
Mat out = net.forward();
Важливим аспектом є те, що новий графовий рушій наразі оптимізований виключно під центральні процесори. Якщо у вашому проєкті використовуються відеокарти чи сторонні прискорювачі через CUDA або OpenVINO, конвеєр вимагатиме класичного рушія.
Мовні моделі та генеративне мистецтво всередині OpenCV
Відтепер бібліотека вміє локально запускати LLM та VLM без залучення сторонніх екосистем. В систему вбудували власний токенізатор та механізм кешування тексту, тому важкі моделі рівня Qwen 2.5 чи сімейства GPT-4 розгортаються тими ж базовими командами, що й звичайні детектори об’єктів. Більше того, з’явилася нативна підтримка дифузійних моделей та архітектури LaMa. Тепер складне інтелектуальне видалення об’єктів та домальовування фону виконується в один прохід, видаючи ідеально згладжений результат.

Оновлене ядро та стандартизоване прискорення
Математичне ядро нарешті навчилося повноцінно працювати з масивами даних будь-якої розмірності — включно з поодинокими числами та звичайними списками. Додано підтримку типів даних FP16 та BF16, а застарілий C API остаточно видалено. Роботу з просторовим зором розбили на три логічні спеціалізовані модулі, щоб прибрати хаос у функціях калібрування.
Замість розпорошення оптимізацій по всьому коду тепер працює єдиний рівень апаратного прискорення. Система сама визначає процесор і підключає відповідні інструкції. Наразі система розпізнає та оптимізує роботу під чотири базові архітектури
- Intel IPP для десктопних і серверних процесорів x86
- Arm KleidiCV для векторних інструкцій NEON та SVE
- Qualcomm FastCV для мобільного сегмента
- RISC-V Vector для новітніх відкритих процесорів
Також у планах розгортання непроцесорного рівня апаратного прискорення. Ця технологія дозволить виконувати всю рутину зі зміни розміру зображень, кольорової корекції чи нормалізації безпосередньо на відеокарті або нейропроцесорі.
Детальніше про оновлення можете прочитати в офіційному блозі OpenCV.
Як вам таке оновлення? Відчуваєте різницю, в порівнянні з попередньою версією?
Немає коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів