Сборка OpenCV с поддержкой OpenVINO

от автора

Доброго времени, уважаемые Хабровчане. Я занимаю должность Computer Vision Engineer, поэтому часто возникает потребность в запуске различных моделей с использованием разнообразных Inference Engine. В этой статье:

  • соберём OpenCV с поддержкой OpenVINO в качестве backend’а для моделей;

  • узнаем разницу в скорости инференса модели на C++ и Python при прочих равных.

Статья будет больше технической, без сложных речевых оборотов и лишней воды.

Сразу приведу полезные ссылки, которые помогли мне разобраться в данной теме:

Сборка будет осуществляться под управлением операционной системы Ubuntu.

Системные зависимости

sudo apt remove --purge cmake sudo apt update sudo apt install -y cmake unzip wget

Базовый репозиторий

Данный репозиторий содержит:

  • полную инструкцию по сборке;

  • bash-скрипт для сборки;

  • скрипты инференса модели person-detection-0200 используя OpenCV DNN на С++ и Python;

  • CMakeLists.txt для сборки примера на C++.

Также стоит отметить, что дальнейшие шаги инструкции подразумевают, что Вы находитесь в корне репозитория.

git clone git@github.com:DanilZittser/opencv-python-openvino-backend.git cd opencv-python-openvino-backend

Объявляем переменные окружения

OPENCV_DIR_NAME=opencv-4.6.0 OPENCV_DIR_PATH=$(pwd)/${OPENCV_DIR_NAME} OPENVINO_DIR_NAME=openvino-2022.1.1 OPENVINO_DIR_PATH=$(pwd)/${OPENVINO_DIR_NAME} INSTALL_DIR_PATH=$(pwd)/install

Скачиваем исходники OpenCV и OpenVINO

# opencv-4.6.0 wget https://github.com/opencv/opencv/archive/refs/tags/4.6.0.zip unzip 4.6.0.zip  # openvino-2022.1.1 wget https://github.com/openvinotoolkit/openvino/releases/download/2022.1.1/l_openvino_toolkit_ubuntu20_2022.1.1.7030.39aba80957e.tgz tar -xf l_openvino_toolkit_ubuntu20_2022.1.1.7030.39aba80957e.tgz mv l_openvino_toolkit_ubuntu20_2022.1.1.7030.39aba80957e/ ${OPENVINO_DIR_NAME}

Сборка и установка

Несколько моментов:

  • установка библиотеки будет происходить по кастомному пути, смотри флаг -DCMAKE_INSTALL_PREFIX;

  • OpenCV по умолчанию собирается вместе с питоновскими биндингами.

mkdir build && cd build  cmake \   -DWITH_OPENVINO=ON \   -DINF_ENGINE_RELEASE=2022010100 \   -DInferenceEngine_DIR=${OPENVINO_DIR_PATH}/runtime/cmake \   -DOpenVINO_DIR=${OPENVINO_DIR_PATH}/runtime/cmake \   -Dngraph_DIR=${OPENVINO_DIR_PATH}/runtime/cmake \   -DOPENCV_GAPI_WITH_OPENVINO=OFF \   -DOPENCV_DNN_OPENVINO=ON \   -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR_PATH} \   ${OPENCV_DIR_PATH}  make -j$(nproc) && make install  cd ..

Инференс модели person-detection-0200.

Скачиваем модель:

wget https://storage.openvinotoolkit.org/repositories/open_model_zoo/2022.1/models_bin/3/person-detection-0200/FP32/person-detection-0200.xml wget https://storage.openvinotoolkit.org/repositories/open_model_zoo/2022.1/models_bin/3/person-detection-0200/FP32/person-detection-0200.bin

Подробное описание модели находится здесь — person-detection-0200.

При желании для скачивания модели можно воспользоваться утилитой omz_downloader из экосистемы OpenVINO.

Ниже представлены результаты инференса модели на HP OMEN Laptop 15-en1021ur.

Python inference

# указываем где искать собранный OpenCV export PYTHONPATH=${INSTALL_DIR_PATH}/lib/python3.8/site-packages/cv2/python-3.8/:$PYTHONPATH python3 samples/main.py --xml person-detection-0200.xml --bin person-detection-0200.bin --video person.mp4  >>> Throughput = 259.16 fps

C++ inference

export OpenCV_DIR=${INSTALL_DIR_PATH}/lib/cmake/opencv4 # сборка примера mkdir cmake-build && cd $_ cmake ../ make -j$(nproc) # запуск примера ./opencv_python_openvino_backend --xml ../person-detection-0200.xml --bin ../person-detection-0200.bin --video ../person.mp4  >>> Throughput = 269.25 fps

Моё почтение, C++.


ссылка на оригинал статьи https://habr.com/ru/post/724276/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *