OpenCV: How to enable Halide backend for improve efficiency

| OpenCV 3.4.2 Open Source Computer Vision

How to enable Halide backend for improve efficiency

## 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
  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
- Build LLVM on Windows (Developer Command Prompt)
  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

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.
  git clone https://github.com/halide/Halide.git
- Build Halide on Linux
  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
- Build Halide on Windows (Developer Command Prompt)
  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

## Build OpenCV with Halide backend

When you build OpenCV add the following configuration flags:

- `ENABLE_CXX11` - enable C++11 standard
- `WITH_HALIDE` - enable Halide linkage
- `HALIDE_ROOT_DIR` - path to Halide build directory

## Set Halide as a preferable backend

net.setPreferableBackend(DNN_BACKEND_HALIDE);