Готовый код — это конечно интересно, а более подробную информацию об установке драйверов приходится собирать по кусочкам — постараюсь объединить все нужные телодвижения в одну статью.

У меня имеется ноутбук с Ubuntu 18.04 на борту,
- CPU: intel
- GPU: Intel/Nvidia
Nvidia и Intel пытаются превзойти друг друга, а я постараюсь одновременно использовать все преимущества OpenVino и Cuda.
Сразу предупреждаю, для использования Cuda нужно минимально Compute capability (version) 5.3, посмотреть для своей видеокарты можно тут
Cuda
Я выбрал Cuda 10.0, чтобы можно было еще и Tensorflow использовать.
Сначала нужно скачать пакет с developer.nvidia.com (например runtime (local))

Устанавливаем командой
sudo sh cuda_10.0.130_410.48_linux.run
cudNN
Ссылка на пакеты
Нужно выбрать версию, соответствующую Cuda, то есть
Download cuDNN v7.5.0 (Feb 21, 2019), for CUDA 10.0

И скачать два deb-пакета
cuDNN Runtime Library for Ubuntu18.04 (Deb)
cuDNN Developer Library for Ubuntu18.04 (Deb)
Если у Вас не аккаунта https://developer.nvidia.com/, Вам предложат зарегистрироваться

Установка:
sudo dpkg -i libcudnn7-dev_7.5.0.56-1+cuda10.0_amd64.deb sudo dpkg -i libcudnn7_7.5.0.56-1+cuda10.0_amd64.deb
Intel OpenCL Driver
Ссылка на репозиторий
Установка:
wget https://github.com/intel/compute-runtime/releases/download/20.04.15428/intel-gmmlib_19.4.1_amd64.deb wget https://github.com/intel/compute-runtime/releases/download/20.04.15428/intel-igc-core_1.0.3151_amd64.deb wget https://github.com/intel/compute-runtime/releases/download/20.04.15428/intel-igc-opencl_1.0.3151_amd64.deb wget https://github.com/intel/compute-runtime/releases/download/20.04.15428/intel-opencl_20.04.15428_amd64.deb wget https://github.com/intel/compute-runtime/releases/download/20.04.15428/intel-ocloc_20.04.15428_amd64.deb sudo dpkg -i *.deb
Opencv+OpenVino
Cкрипт (естественно с костылями), который соберет все сам.
#!/bin/bash git clone https://github.com/opencv/dldt && \ (cd dldt/inference-engine && \ git submodule init && \ git submodule update --recursive && \ ./install_dependencies.sh && \ mv -f thirdparty/clDNN/common/intel_ocl_icd/6.3/linux/Release thirdparty/clDNN/common/intel_ocl_icd/6.3/linux/RELEASE && \ mkdir -p build && \ cd build && \ cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D BUILD_SHARED_LIBS=ON \ -D ENABLE_TESTS=OFF \ -D ENABLE_VPU=ON \ -D ENABLE_MKL_DNN=ON \ -D ENABLE_CLDNN=ON .. && \ make -j $(nproc --all) && \ touch VERSION && \ mkdir -p src/ngraph && \ sudo cp -r ../bin/intel64/RELEASE/lib/* /usr/local/lib && \ cp thirdparty/ngraph/src/ngraph/version.hpp src/ngraph && \ sudo make install) OPENCV_VERSION="4.2.0" # install opencv curl -Lo opencv.zip https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip && \ unzip -q opencv.zip && \ curl -Lo opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip && \ unzip -q opencv_contrib.zip && \ rm opencv.zip opencv_contrib.zip && \ (cd opencv-${OPENCV_VERSION} && \ mkdir build && cd build && \ cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-${OPENCV_VERSION}/modules \ -D InferenceEngine_DIR=../../../dldt/inference-engine/build \ -D WITH_JASPER=OFF \ -D BUILD_DOCS=OFF \ -D BUILD_EXAMPLES=OFF \ -D ENABLE_CXX11=ON \ -D WITH_INF_ENGINE=ON \ -D WITH_QT=OFF \ -D WITH_GTK=ON \ -D WITH_FFMPEG=OFF \ -D WITH_TIFF=OFF \ -D WITH_WEBP=OFF \ -D WITH_QT=OFF \ -D WITH_PNG=OFF \ -D WITH_1394=OFF \ -D HAVE_OPENEXR=OFF \ -D BUILD_TESTS=OFF \ -D BUILD_PERF_TESTS=OFF \ -D BUILD_opencv_java=NO \ -D BUILD_opencv_python=NO \ -D BUILD_opencv_python2=NO \ -D BUILD_opencv_python3=NO \ -D BUILD_SHARED_LIBS=no \ -D OPENCV_GENERATE_PKGCONFIG=ON .. && \ make -j $(nproc --all) && \ sudo make preinstall && sudo make install && sudo ldconfig )
А теперь проверим, как будет работать это все!
Клонируем себе исходный код
git clone https://github.com/Danile71/go_realtime_object_recognition cd go_realtime_object_recognition go get -d go build ./go_realtime_object_recognition
Видеораспознавание будет работать на CPU,VulkanAPI и/или Cuda.
Сейчас я сделал несколько pull request’ов в
для поддержки OpenVino+Cuda, но неизвестно сколько они будут идти до master ветки, поэтому сделаем небольшую хитрость
#!/bin/bash cd $GOPATH/src/gocv.io/x/gocv wget https://patch-diff.githubusercontent.com/raw/hybridgroup/gocv/pull/607.patch wget https://patch-diff.githubusercontent.com/raw/hybridgroup/gocv/pull/609.patch wget https://patch-diff.githubusercontent.com/raw/hybridgroup/gocv/pull/610.patch wget https://patch-diff.githubusercontent.com/raw/hybridgroup/gocv/pull/612.patch patch -p1 < 607.patch patch -p1 < 609.patch patch -p1 < 610.patch patch -p1 < 612.patch
Чтобы можно было использовать OpenVino/CPU/VulkanAPI/Cuda одновременно
go build -tags openvino ./go_realtime_object_recognition
А для выбора устройства, меняем
- CPU
modelNet.SetPreferableBackend(gocv.NetBackendDefault) modelNet.SetPreferableTarget(gocv.NetTargetCPU) - VulkanAPI
modelNet.SetPreferableBackend(gocv.NetBackendVKCOM) modelNet.SetPreferableTarget(gocv.NetTargetVulkan) - Cuda
modelNet.SetPreferableBackend(gocv.NetBackendCUDA) modelNet.SetPreferableTarget(gocv.NetTargetCUDA) - Intel GPU
modelNet.SetPreferableBackend(gocv.NetBackendOpenVINO) modelNet.SetPreferableTarget(gocv.NetTargetFP16) - Intel Neural Compute Stick 2
modelNet.SetPreferableBackend(gocv.NetBackendOpenVINO) modelNet.SetPreferableTarget(gocv.NetTargetVPU)
Вот еще небольшой пример, с распознаванием пола/возраста/эмоций.
А тут распознавание объекта «человек» с использованием Cuda
Если у кому это интересно, и что-либо не получилось, пишите, с радостью помогу)
Чукча не писатель, однако но я старался.
ссылка на оригинал статьи https://habr.com/ru/post/487404/
Добавить комментарий