dnn_halide.markdown 3.0 KB

How to enable Halide backend for improve efficiency {#tutorial_dnn_halide}

@tableofcontents

@prev_tutorial{tutorial_dnn_googlenet} @next_tutorial{tutorial_dnn_halide_scheduling}

| | | | -: | :- | | Original author | Dmitry Kurtaev | | Compatibility | OpenCV >= 3.3 |

Introduction

This tutorial guidelines how to run your models in OpenCV deep learning module using Halide language backend. Halide is an open-source project that let us write image processing algorithms in well-readable format, schedule computations according to specific device and evaluate it with a quite good efficiency.

An official website of the Halide project: http://halide-lang.org/.

An up to date efficiency comparison: https://github.com/opencv/opencv/wiki/DNN-Efficiency

Requirements

LLVM compiler

@note LLVM compilation might take a long time.

  • Download LLVM source code from http://releases.llvm.org/4.0.0/llvm-4.0.0.src.tar.xz. Unpack it. Let llvm_root is a root directory of source code.

  • Create directory llvm_root/tools/clang

  • Download Clang with the same version as LLVM. In our case it will be from http://releases.llvm.org/4.0.0/cfe-4.0.0.src.tar.xz. Unpack it into llvm_root/tools/clang. Note that it should be a root for Clang source code.

  • Build LLVM on Linux @code cd llvm_root mkdir build && cd build cmake -DLLVM_ENABLE_TERMINFO=OFF -DLLVM_TARGETS_TO_BUILD="X86" -DLLVM_ENABLE_ASSERTIONS=ON -DCMAKE_BUILD_TYPE=Release .. make -j4 @endcode

  • Build LLVM on Windows (Developer Command Prompt) @code mkdir \path-to-llvm-build\ && cd \path-to-llvm-build\ cmake.exe -DLLVM_ENABLE_TERMINFO=OFF -DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_ENABLE_ASSERTIONS=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=\path-to-llvm-install\ -G "Visual Studio 14 Win64" \path-to-llvm-src\ MSBuild.exe /m:4 /t:Build /p:Configuration=Release .\INSTALL.vcxproj @endcode

@note \\path-to-llvm-build\\ and \\path-to-llvm-install\\ are different directories.

Halide language.

  • Download source code from GitHub repository, https://github.com/halide/Halide or using git. The root directory will be a halide_root. @code git clone https://github.com/halide/Halide.git @endcode

  • Build Halide on Linux @code cd halide_root mkdir build && cd build cmake -DLLVM_DIR=llvm_root/build/lib/cmake/llvm -DCMAKE_BUILD_TYPE=Release -DLLVM_VERSION=40 -DWITH_TESTS=OFF -DWITH_APPS=OFF -DWITH_TUTORIALS=OFF .. make -j4 @endcode

  • Build Halide on Windows (Developer Command Prompt) @code cd halide_root mkdir build && cd build cmake.exe -DLLVM_DIR=\path-to-llvm-install\lib\cmake\llvm -DLLVM_VERSION=40 -DWITH_TESTS=OFF -DWITH_APPS=OFF -DWITH_TUTORIALS=OFF -DCMAKE_BUILD_TYPE=Release -G "Visual Studio 14 Win64" .. MSBuild.exe /m:4 /t:Build /p:Configuration=Release .\ALL_BUILD.vcxproj @endcode

Build OpenCV with Halide backend

When you build OpenCV add the following configuration flags:

  • WITH_HALIDE - enable Halide linkage

  • HALIDE_ROOT_DIR - path to Halide build directory

Set Halide as a preferable backend

@code net.setPreferableBackend(DNN_BACKEND_HALIDE); @endcode