GoLang рдФрд░ OpenCV (OpenVino рдФрд░& Cuda)

рд╕рдмрдХреЗ рд▓рд┐рдП рджрд┐рди рдЕрдЪреНрдЫрд╛ рд╣реЛред OpenCV рдСрди рдж рд╣рдм ( рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ ) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рд╕рд╛рд░реЗ рд▓реЗрдЦ рд╣реИрдВред

рд╕рдорд╛рдкреНрдд рдХреЛрдб рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рд▓реЗрдХрд┐рди рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рдПрдХрддреНрд░ рдХреА рдЬрд╛рдиреА рд╣реИ - рдореИрдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЗрд╢рд╛рд░реЛрдВ рдХреЛ рдПрдХ рд▓реЗрдЦ рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред

рдЫрд╡рд┐


рдореЗрд░реЗ рдкрд╛рд╕ рдЙрдмрдВрдЯреВ рдореЗрдВ 18.04 рд╡рд╛рд▓рд╛ рдПрдХ рд▓реИрдкрдЯреЙрдк рд╣реИ,

  • рд╕реАрдкреАрдпреВ: рдЗрдВрдЯреЗрд▓
  • GPU: рдЗрдВрдЯреЗрд▓ / рдПрдирд╡реАрдбрд┐рдпрд╛

рдПрдирд╡реАрдбрд┐рдпрд╛ рдФрд░ рдЗрдВрдЯреЗрд▓ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рд╣рд░рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдореИрдВ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдУрдкрдирд╡рд┐рдиреЛ рдФрд░ рдХреВрдбрд╛ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред
рдореИрдВ рдЖрдкрдХреЛ рддреБрд░рдВрдд рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реВрдВ, рдХреНрдпреВрдбрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рдиреНрдпреВрдирддрдо рдЧрдгрдирд╛ рдХреНрд╖рдорддрд╛ (рд╕рдВрд╕реНрдХрд░рдг) 5.3 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЖрдк рдпрд╣рд╛рдВ рдЕрдкрдирд╛ рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ

CUDA


рдореИрдВрдиреЗ рдХреНрдпреВрдбрд╛ 10.0 рдХреЛ рдЪреБрдирд╛ рддрд╛рдХрд┐ рдореИрдВ рднреА рдЯреЗрдВрд╕рд░рдлреНрд▓реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреВрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ developer.nvidia.com (рдЬреИрд╕реЗ рд░рдирдЯрд╛рдЗрдо (рд▓реЛрдХрд▓) )

рдЫрд╡рд┐

рд╕реЗрдЯ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдПрдХ рдкреИрдХреЗрдЬ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛

sudo sh cuda_10.0.130_410.48_linux.run


cudNN


рд╕рдВрдХреБрд▓ рд╕реЗ рд▓рд┐рдВрдХ
рдЖрдкрдХреЛ рдЙрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЪреБрдирдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдХреБрдбрд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд
CUDA 10.0 рдХреЗ рд▓рд┐рдП cuDNN v7.5.0 (рдлрд░рд╡рд░реА 21, 2019) рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ

рдЫрд╡рд┐

рдФрд░ рджреЛ рдбрд┐рдмреЗрдЯ рдкреИрдХреЗрдЬ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ
Ubuntu18.04 рдХреЗ рд▓рд┐рдП cuDNN рдбреЗрд╡рд▓рдкрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА (Ubuntu) Ubuntu18.04 (Deb) рдХреЗ рд▓рд┐рдП
cuDNN рдбреЗрд╡рд▓рдкрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА

рдпрджрд┐ рдЖрдкрдХрд╛ рдЦрд╛рддрд╛ 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

рдЗрдВрдЯреЗрд▓ OpenCL рдЪрд╛рд▓рдХ


рднрдВрдбрд╛рд░ рдХрд╛ рд▓рд┐рдВрдХ ред

рд╕реНрдерд╛рдкрдирд╛:

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

Script (рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдмреИрд╕рд╛рдЦреА рдХреЗ рд╕рд╛рде), рдЬреЛ рдЕрдкрдиреЗ рдЖрдк рд╣реА рд╕рдм рдХреБрдЫ рдЗрдХрдЯреНрдард╛ рдХрд░ рд▓реЗрдЧрд╛ред

run.sh
#!/bin/bash
git clone https://github.com/opencv/dldt -b 2019 && \
            (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 CUDA_ARCH_BIN=5.3,6.0,6.1,7.0,7.5 \
                  -D CUDA_ARCH_PTX=5.3 \
                  -D WITH_CUDA=ON \
                  -D WITH_CUDNN=ON \
                  -D OPENCV_DNN_CUDA=ON \
                  -D ENABLE_FAST_MATH=1 \
                  -D WITH_CUBLAS=1 \
                  -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=ON \
                  -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 рдкрд░ рдХрд╛рдо рдХрд░реЗрдЧреАред

рдЕрдм рдореИрдВрдиреЗ рдХрдИ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХрд┐рдП рд╣реИрдВ
github.com/hybridgroup/gocv

OpenVino + Cuda рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗ рдорд╛рд╕реНрдЯрд░ рдмреНрд░рд╛рдВрдЪ рдореЗрдВ рдХрдм рддрдХ рдЬрд╛рдПрдВрдЧреЗ, рддреЛ рдЪрд▓рд┐рдП рдереЛрдбрд╝рд╛ рдЯреНрд░рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ:

#!/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

рдФрд░ рдПрдХ рдЙрдкрдХрд░рдг рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрджрд▓реЗрдВ

  • рд╕реА рдкреА рдпреВ

    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)
    

  • рдЗрдВрдЯреЗрд▓ рдЬреАрдкреАрдпреВ

    modelNet.SetPreferableBackend(gocv.NetBackendOpenVINO)
    modelNet.SetPreferableTarget(gocv.NetTargetFP16)
    

  • рдЗрдВрдЯреЗрд▓ рдиреНрдпреВрд░рд▓ рдХрдВрдкреНрдпреВрдЯ рд╕реНрдЯрд┐рдХ 2
    modelNet.SetPreferableBackend(gocv.NetBackendOpenVINO)
    modelNet.SetPreferableTarget(gocv.NetTargetVPU)
    


рдпрд╣рд╛рдБ рд▓рд┐рдВрдЧ / рдЙрдореНрд░ / рднрд╛рд╡рдирд╛ рдорд╛рдиреНрдпрддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рдЫреЛрдЯрд╛ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдФрд░ рдлрд┐рд░ рдХреЙрдбрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП "рд╡реНрдпрдХреНрддрд┐" рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдорд╛рдиреНрдпрддрд╛ред

рдпрджрд┐ рдХрд┐рд╕реА рдХреЛ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рдФрд░ рдХреБрдЫ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛, рддреЛ рд▓рд┐рдЦреЛ,

рдореБрдЭреЗ рдорджрдж рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА :-) рдЪреБрдЪреНрдЪреА рдПрдХ рд▓реЗрдЦрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреАред

рдпреБрдкреАрдбреАред
рдРрд╕реЗ рд╕рдордп рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдЖрдкрдХреЛ рдПрдХ рд╕реНрдерд┐рд░ рдмрд╛рдЗрдирд░реА рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ dldt рдФрд░ opencv рдмрджрд▓реЗрдВ
-D BUILD_SHARED_LIBS=ON

рдкрд░
-D BUILD_SHARED_LIBS=OFF

Source: https://habr.com/ru/post/undefined/


All Articles