OpenCV GPU HOG检测

时间:2012-10-29 12:14:56

标签: c++ opencv cuda gpu

我正在使用Windows 7 64bit,visual studio 2010,opencv 2.4.2。

我正在尝试使用GPU猪检测器。

现在我可以使用自己的CPU生猪探测器(我的训练版)。

我的猪的细胞大小为Size(4,4)

然而,在opencv / modules / gpu / src / cuda / hog.cu中,它声明

 // Other values are not supported
  #define CELL_WIDTH 8
  #define CELL_HEIGHT 8 

或者,在opencv / modules / gpu / src / hog.cpp中,在

cv::gpu::HOGDescriptor::HOGDescriptor( ... ) { ... CV_Assert(cell_size == Size(8, 8)); ... }

我认为这就是我的程序崩溃的原因。但是我不想使用单元格大小8.如何将其变为4?

2 个答案:

答案 0 :(得分:4)

你有几个选择......

  • 打开OpenCV HOG code并破解8x8约束。将#define语句从8x8更改为4x4,并删除assert语句。重新编译OpenCV代码,然后运行您的应用程序。看看会发生什么......也许它会起作用。

  • 如果OpenCV代码中的快速入侵不起作用,还有其他开源GPU HOG实现,例如:fastHOGGroundHOG

  • 如果上述想法都不起作用,您可以在CUDA或OpenCL中编写自己的GPU HOG代码。手写的HOG实现可以相当简洁,特别是如果您为特定情况硬编码单元大小和其他维度。但是,如果您不熟悉GPU编程可能需要一些时间来学习。

另外,我应该确定 - 如果你运行8x8单元格,OpenCV HOG是否正常运行,对吗?

答案 1 :(得分:0)

您真的不应该更改单元格的大小。像元大小为8,因为这是“足以执行渐变的像素”,但“执行任务没有太多”。如果像元大小为4,那么对于梯度强度和精度可能还不够有用?与其将单元格大小减小为4,为什么不将两个方向的图像大小都减小2?