Доброго времени, уважаемые Хабровчане. Я занимаю должность 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++.

Комментарии (0)