如何启用 Halide 后端以提升效率
本教程介绍如何使用 Halide 语言后端在 OpenCV 深度学习模块中运行你的模型。Halide 是一个开源项目,它让我们能够以可读性良好的格式编写图像处理算法,根据特定设备调度计算,并以相当不错的效率对其进行求值。
Halide 项目的官方网站:http://halide-lang.org/。
最新的效率对比:https://github.com/opencv/opencv/wiki/DNN-Efficiency
LLVM 编译器
Section titled “LLVM 编译器”注意: LLVM 的编译可能需要很长时间。
-
从 http://releases.llvm.org/4.0.0/llvm-4.0.0.src.tar.xz 下载 LLVM 源代码。 解压它。令 llvm_root 为源代码的根目录。
-
创建目录 llvm_root/tools/clang
-
下载与 LLVM 版本相同的 Clang。在我们的例子中,从 http://releases.llvm.org/4.0.0/cfe-4.0.0.src.tar.xz 下载。将其解压到 llvm_root/tools/clang。注意,它应当是 Clang 源代码的根目录。
-
在 Linux 上构建 LLVM
cd llvm_rootmkdir build && cd buildcmake -DLLVM_ENABLE_TERMINFO=OFF -DLLVM_TARGETS_TO_BUILD="X86" -DLLVM_ENABLE_ASSERTIONS=ON -DCMAKE_BUILD_TYPE=Release ..make -j4- 在 Windows 上构建 LLVM(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注意: \\path-to-llvm-build\\ 和 \\path-to-llvm-install\\ 是不同的目录。
Halide 语言
Section titled “Halide 语言”- 从 GitHub 仓库 https://github.com/halide/Halide 下载源代码, 或使用 git 克隆。其根目录将作为 halide_root。
git clone https://github.com/halide/Halide.git- 在 Linux 上构建 Halide
cd halide_rootmkdir build && cd buildcmake -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- 在 Windows 上构建 Halide(Developer Command Prompt)
cd halide_rootmkdir build && cd buildcmake.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构建 OpenCV 的 Halide 后端
Section titled “构建 OpenCV 的 Halide 后端”在构建 OpenCV 时,添加以下配置选项:
-
WITH_HALIDE- 启用 Halide 链接 -
HALIDE_ROOT_DIR- Halide 构建目录的路径
将 Halide 设置为首选后端
Section titled “将 Halide 设置为首选后端”net.setPreferableBackend(DNN_BACKEND_HALIDE);