【发布时间】:2013-08-30 18:13:03
【问题描述】:
问题
最快的多核 CPU 开源 HOG 提取代码是什么?
动机
我正在开发一个实时对象检测应用程序。具体来说,我开发了Deformable Parts Model cascades 的变体,目标检测速度为 30fps。我已经达到了提取HOG 特征比我的管道的其余部分加起来更昂贵的地步。我正在使用 [Felzenzwalb, Girshick, et al] 参数进行 HOG 提取。也就是说,HOG 描述符的多分辨率金字塔,每个描述符总共有 32 个用于定向和一些其他线索的 bin。
目标
我想在多核 CPU 上以 60fps (16ms) 为 640x480 图像进行多尺度 HOG 特征提取。
相关工作
我在 6 核 Intel 3930k CPU 上对一些现成的多尺度 HOG 实现进行了基准测试。对于 640x480 图像,我观察到以下性能数据:
- Dubout 的 FFLD DPM 代码中的 HOG:19fps (52ms) -- 使用 OpenMP 的 C++,但没有矢量化
- voc-release5 DPM 代码中的 HOG:2.4fps (410ms) -- 单线程 C++,外加一个 Matlab 包装器
我还尝试了OpenCV HOG extraction code。 OpenCV 版本有效,但它似乎是针对 Dalal-Triggs 的 HOG 设置进行硬编码的,而且 OpenCV 似乎不允许我使用与 [Felzenzwalb, Girshick 等人]。 OpenCV 版本本身也不支持多尺度 HOG,尽管您可以自己进行下采样并为每个尺度调用 OpenCV HOG。我不记得 OpenCV HOG 的表现是什么样的了。
最后的想法
【问题讨论】:
-
OpenCV 包括 Dalal 在 CPU 和 GPU 版本中的 HOG 实现。在我看来,它们工作得很好,并且可以很容易地用于 OpenCV 的 CvSVM 的对象检测。
-
滤波器卷积是DPM中最昂贵的部分,那么您如何管理这部分?
-
@MickeyShine 常见的东西......大规模量化特征,并进行级联。这些天我正在做更多的深度学习和更少的基于 HOG 的 DPM。但我达到了一个点,即我可以在 50 毫秒内完成基于 HOG 的 3 组件、每组件 8 部分模型的卷积。
-
@3yanlis1bos 谢谢!我已经修复了 FFLD 链接。
标签: c++ performance image-processing computer-vision