opencv-dnn-ml
OpenCV-dnn-ml — это объединение двух модулей библиотеки OpenCV (Open Source Computer Vision Library): dnn (Deep Neural Networks) и ml (Machine Learning). Модуль dnn предоставляет инфраструктуру для загрузки и запуска предобученных моделей глубокого обучения из популярных фреймворков, а также для выполнения инференса на различных бэкендах. Модуль ml включает классические алгоритмы машинного обучения, такие как метод опорных векторов, деревья решений, бустинг и кластеризацию. Вместе они образуют мощный инструментарий для решения широкого круга задач компьютерного зрения и анализа данных.
Особенности
- модуль
dnnподдерживает загрузку моделей из TensorFlow, PyTorch, Caffe, Darknet, ONNX и других фреймворков; - возможность выполнения инференса на CPU, GPU (CUDA, OpenCL) и специализированных бэкендах (Intel OpenVINO, ARM NPU);
- модуль
mlсодержит реализации классических алгоритмов машинного обучения с единообразным API; - предобученные модели для задач классификации, детекции, сегментации и распознавания лиц доступны в OpenCV Model Zoo;
- инструменты для предобработки изображений (приведение размера, нормализация) в связке с модулем
imgproc.
Основные компоненты
Объединённый модуль состоит из двух частей, которые дополняют друг друга: классические методы машинного обучения и современные подходы на основе глубоких нейронных сетей (подробнее с документацией можно ознакомиться здесь).
Глубокие нейронные сети
Модуль dnn позволяет загружать модели, обученные в различных фреймворках, и выполнять инференс без необходимости устанавливать эти фреймворки. Он также предоставляет средства для оптимизации и запуска моделей на гетерогенном оборудовании.
Основные возможности модуля dnn:
cv::dnn::readNet()— загрузка модели из файлов (например,.pb,.onnx,.caffemodel,.weights);cv::dnn::blobFromImage()— преобразование изображения в формат входного тензора (blob) с нормализацией и изменением размера;cv::dnn::Net::forward()— прямой проход (инференс) для получения выходных данных;- поддержка различных бэкендов и целевых устройств через
cv::dnn::setPreferableBackend()иcv::dnn::setPreferableTarget(); cv::dnn::NMSBoxes()— Non-Maximum Suppression для постобработки детекций;- работа с моделями для классификации, детекции (YOLO, SSD, Faster R-CNN), сегментации (Mask R-CNN, U-Net) и оценки позы.
Поддерживаемые форматы и бэкенды
Модуль dnn поддерживает множество форматов моделей и позволяет выбирать оптимальный бэкенд для выполнения инференса в зависимости от доступного оборудования.
Основные форматы моделей:
- ONNX (.onnx) — открытый формат обмена нейросетями;
- TensorFlow (.pb, .pbtxt) — замороженные графы TensorFlow 1.x;
- Caffe (.prototxt, .caffemodel) — модели Caffe;
- Darknet (.cfg, .weights) — модели YOLO;
- Torch (.net) — старый формат Torch7;
- OpenVINO (.xml, .bin) — оптимизированный формат Intel.
Поддерживаемые бэкенды:
DNN_BACKEND_DEFAULT— авто-выбор (обычно OpenCV);DNN_BACKEND_OPENCV— собственная реализация на CPU;DNN_BACKEND_INFERENCE_ENGINE— Intel OpenVINO;DNN_BACKEND_HALIDE— экспериментальный бэкенд на Halide;DNN_BACKEND_CUDA— NVIDIA CUDA (требуется сборка с CUDA);DNN_BACKEND_OPENCL— OpenCL;DNN_BACKEND_VKCOM— Vulkan (экспериментально).
Классическое машинное обучение
Модуль ml предоставляет реализацию классических алгоритмов машинного обучения с единообразным интерфейсом, основанным на классах cv::ml::StatModel. Это позволяет легко обучать модели и использовать их для предсказаний.
Основные алгоритмы модуля ml:
- SVM (метод опорных векторов) —
cv::ml::SVMдля задач классификации и регрессии; - Деревья решений —
cv::ml::DTreesдля классификации и регрессии; - Случайный лес —
cv::ml::RTrees(ансамбль деревьев); - Бустинг —
cv::ml::Boost(AdaBoost и другие); - k-ближайших соседей —
cv::ml::KNearest; - Нейронные сети —
cv::ml::ANN_MLP(многослойный перцептрон); - Логистическая регрессия —
cv::ml::LogisticRegression; - EM-алгоритм —
cv::ml::EMдля кластеризации; - Нормализация и PCA —
cv::PCA,cv::LDAдля снижения размерности.
Обучение и оценка моделей
Модуль ml предоставляет удобные методы для обучения моделей на пользовательских данных и оценки их качества. Все модели следуют общей парадигме: train(), predict(), save(), load().
Основные функции обучения:
cv::ml::TrainData::create()— создание структуры данных для обучения из матриц признаков и ответов;StatModel::train()— обучение модели на подготовленных данных;StatModel::calcError()— вычисление ошибки на валидационной выборке;StatModel::predict()— предсказание для новых данных;StatModel::save()иStatModel::load()— сохранение и загрузка обученной модели в формате XML/YAML/JSON.
Интеграция с модулями OpenCV
Модули dnn и ml тесно интегрируются с другими модулями OpenCV, такими как core (базовые структуры), imgproc (обработка изображений) и video (работа с видео). Это позволяет создавать законченные пайплайны компьютерного зрения.
Примеры интеграции:
- Извлечение признаков с помощью
imgproc(HOG, SIFT) и передача их в классификатор изml; - Предобработка кадров видео (масштабирование, цветокоррекция) перед подачей в нейросеть из
dnn; - Использование
dnnдля детекции объектов иmlдля классификации выделенных областей; - Визуализация результатов инференса с помощью функций рисования из
imgproc.