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