上一个教程 : 加载 Caffe 框架模型
下一个教程 : 如何为Halide后端调度网络
原作者 | Dmitry Kurtaev |
---|---|
兼容性 | OpenCV >= 3.3 |
简介
本教程介绍如何使用 Halide 语言后端在 OpenCV 深度学习模块中运行模型。Halide 是一个开源项目,可以让我们以可读格式编写图像处理算法,根据特定设备安排计算,并以相当高的效率进行评估。
Halide 项目的官方网站:http://halide-lang.org/
最新效率比较:https://github.com/opencv/opencv/wiki/DNN-Efficiency
要求
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_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
- 在 Windows 上编译 LLVM(开发人员命令提示符)
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-sr\c
MSBuild.exe /m:4 /t:Build /p:Configuration=Release .\INSTALL.vcxproj
注释
\path-to-llvm-build\
和\path-to-llvm-install\
是不同的目录。
Halide 语言。
- 从 GitHub 代码库、https://github.com/halide/Halide 或使用 git 下载源代码。根目录将是 halide_root。
git clone https://github.com/halide/Halide.git
- 在 Linux 上构建 Halide
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
- 在 Windows 上构建 Halide(开发人员命令提示符)
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
使用 Halide 后端构建 OpenCV
在构建 OpenCV 时,添加以下配置标志:
WITH_HALIDE
- 启用 Halide 链接HALIDE_ROOT_DIR
- Halide 构建目录的路径
将 Halide 设置为首选后端
net.setPreferableBackend(DNN_BACKEND_HALIDE);