2

我正在使用 Windows 7 64 位,Visual Studio 2010,opencv 2.4.2。

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

现在我可以使用我自己的 CPU hog 检测器(我训练过的版本)。

我的猪有细胞大小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?

4

2 回答 2

4

你有几个选择...

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

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

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

另外,我应该确保——如果您使用 8x8 单元运行,OpenCV HOG 可以正常运行,对吗?

于 2012-11-05T06:02:13.593 回答
0

您实际上不应该更改单元格大小。单元格大小为 8,因为这是“足够的像素来执行渐变”,但“不会太多以执行不必要的工作”。如果您的单元格大小为 4,那么对于梯度强度和精度来说,这可能还不够有用吗?与其将单元格大小减小到 4,不如将图像大小在两个方向上减小 2?

于 2019-08-12T19:15:40.353 回答