gpt4 book ai didi

opencv - 如果我使用 Halide,为什么 opencv dnn 会变慢?

转载 作者:太空宇宙 更新时间:2023-11-03 20:58:38 26 4
gpt4 key购买 nike

我正在测试 opencv 源代码树中一些示例的性能,具体取决于是否使用 Halide 。

令人惊讶的是,如果使用 Halide 进行计算,性能会更差:

  • squeezenet_halide:使用 Halide 约 24 毫秒,不使用 Halide 约 16 毫秒。
  • resnet_ssd_face:使用 Halide 约 84 毫秒,不使用 Halide 约 36 毫秒。

我已经按照 this tutorial 中的说明编译了 halide 和 opencv . opencv代码是从master branch of the opencv git repository下载的.

我已经使用示例文件“resnet_ssd_face.cpp”和“squeezenet_halide.cpp”测试了性能。在这两种情况下,我都在调用“forward”之前包含了这些代码行之一,以激活或停用 Halide :

net.setPreferableBackend(DNN_BACKEND_HALIDE);  // use Halide

net.setPreferableBackend(DNN_BACKEND_DEFAULT); // NOT use Halide

时间是在调用“转发”函数之后使用此代码测量的:

std::vector<double> layersTimings;
double freq = cv::getTickFrequency() / 1000;
double time = net.getPerfProfile(layersTimings) / freq;
std::cout << "Time: " << time << " ms" << std::endl;

教程中是否遗漏了什么? Halide 应该用不同的参数编译吗?

我的设置是:

OS: Linux (Ubuntu 16.04)
CPU: Intel(R) Core(TM) i5-4570 CPU @ 3.20GHz
GPU: nVidia GeForce GT 730 (Driver Version: 384.90)
Cuda: CUDA Version 9.0.176

最佳答案

考虑到 Dmitry Kurtaev 的评论并查看 OpenCV GitHub 帐户中的 wiki,我找到了 a page其中包含比较不同方法的基准(我错过了教程中的链接)。

此外,还有一个 merge request其中包含类似的基准。

在这两种方法中,时间测量表明使用 Halide 的性能比使用原始的 c++ 方法差。

我可以假设 Halide 集成处于早期阶段。此外,作为 Zalman Stern评论,Halide 调度是一项正在进行的工作,opencv 的 dnn 模块中的原始优化可能比包含的 Halide 调度更准确。

我希望这种措施可以在未来版本的 OpenCV 中改变,但就目前而言,这就是性能。

关于opencv - 如果我使用 Halide,为什么 opencv dnn 会变慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47202895/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com