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