我可以在 OpenCV 中为 CascadeClassifier GPU 使用 gpu::Stream 吗?如何使用?
Posted
技术标签:
【中文标题】我可以在 OpenCV 中为 CascadeClassifier GPU 使用 gpu::Stream 吗?如何使用?【英文标题】:Can I use gpu::Stream for CascadeClassifier_GPU on OpenCV and how? 【发布时间】:2015-02-16 07:54:23 【问题描述】:我使用Opencv 2.4.10(当前稳定版本)。我使用gpu::CascadeClassifier_GPU::detectMultiScale
来检测人脸。我想将它 async 与我在单独的 cudaStream_t
中启动的 CUDA 内核代码一起使用。但默认情况下,CascadeClassifier_GPU
在默认的 zero-stream 中启动,这使得在 GPU 上无法启动任何与此异步的东西。
我在这里看到没有办法将gpu::Stream
用于CascadeClassifier_GPU
:OpenCV DOC link
gpu::Stream
用于CascadeClassifier_GPU
吗?如何使用?
如果不是,那么我可以在哪个版本的 OpenCV 中执行此操作?
更新:到目前为止,我发现的唯一方法是使用单独的 CPU 线程来执行 gpu::CascadeClassifier_GPU::detectMultiScale
的功能并在单独的 GPU 上执行。但为此至少我需要 2 个 GPU。
【问题讨论】:
【参考方案1】:CascadeClassifier_GPU
使用混合 GPU/CPU 实现并在内部执行额外的同步,这就是它不支持带有 gpu::Stream
参数的异步模式的原因。为了与您的代码异步启动它,您需要为其使用单独的 CPU 线程。
【讨论】:
好的,我知道这一点,但即使我使用单独的 CPU 线程,我的自定义 CUDA 内核函数或 cudaMemcpy 仍然无法同时执行异步,因为 @987654323 中的所有 CUDA 内核@ 在 默认零流 中启动,这使得 不可能 在 GPU 上执行任何 async-simultaneously 的操作。到目前为止,我发现的唯一方法 - 使用单独的 CPU 线程来执行gpu::CascadeClassifier_GPU::detectMultiScale
的功能并在单独的 GPU 上执行它。但为此至少我需要 2 个 GPU。以上是关于我可以在 OpenCV 中为 CascadeClassifier GPU 使用 gpu::Stream 吗?如何使用?的主要内容,如果未能解决你的问题,请参考以下文章
我是不是必须在 Opencv C 包装器中为 C++ 接口释放 New 分配的内存
在 Ubuntu 18.04 Jetson 中为 cv_bridge 链接 opencv 3.2
在 OpenCV 2.3 中为 Mat 数组赋值的问题 - 看起来很简单