0

我使用 opencv 人脸检测器编写了一个多视图人脸检测代码。我在一张图像上运行五个检测器(针对不同的姿势角度进行了训练),并采用它们的权重来检测图像中的人脸。我使用 TBB parallel_for 使代码并行,但它仅将性能提高了 1.7 倍。我想问有没有更好的方法来并行运行五个检测器?

我在一个 16 核的集群上运行我的代码。我认为线程数(在我的情况下是 5 个)太少而无法利用全部功能。

有什么建议么?

谢谢,

4

1 回答 1

1

一些可能需要调查的问题:

  • 其中一个检测器的运行时间比其他检测器长。例如,如果一个检测器需要 4 个单位的时间,而其他四个检测器每个需要 1 个单位的时间,则最可能的加速是 2 倍。在这种情况下,并行化慢速检测器本身可能会有所帮助。
  • 检测器运行得如此之快,以至于 parallel_for 没有时间分散工作。如果每个检测器至少需要 0.1 秒,这应该不是问题。
  • 内存带宽可能是一种限制资源,尤其是在工作集不适合外层缓存的情况下。

诸如 Intel(R) VTune(TM) Amplifier 之类的分析器有时可以帮助追踪这些问题。Amplifier 存在商业和非商业许可。[免责声明:我为英特尔工作。]

于 2013-03-22T15:14:55.450 回答