OpenCV GPU HOG detection

OpenCV GPU HOG detection

本文关键字:detection HOG GPU OpenCV      更新时间:2023-10-16

我正在使用Windows 7 64bit,Visual Studio 2010,OpenCV 2.4.2。

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

目前我可以使用自己的CPU猪检测器(我的训练有素的版本)。

我的猪具有Size(4,4)的细胞。

但是,在OpenCV/模块/gpu/src/cuda/hog.cu中,它指出

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

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

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

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

您有一些选择...

  • 打开OpenCV Hog Code并围绕8x8约束入侵。将#define语句从8x8更改为4x4,并摆脱断言语句。重新编译OpenCV代码,然后运行您的应用程序。看看会发生什么...也许会起作用。

  • 如果OpenCV代码中的快速黑客行为不起作用,则还有其他开源GPU HOG实现,例如:Fasthog和Groundhog

  • 如果上述想法都没有起作用,则可以在CUDA或OPENCL中编写自己的GPU HOG代码。手写的猪实现可以合理地简洁,尤其是如果您为特定情况进行硬编码单元格大小和其他尺寸时。但是,GPU编程可能需要一些时间来学习是否新手。

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

您并不应该更改单元格大小。单元格的大小为8,因为那是"足够的像素可以执行梯度",但"不是太多而无法执行不必要的工作"。如果您的单元大小为4,则可能没有足够的有用信息来梯度强度和精度?为什么不将单元大小降低到4,为什么不在两个方向上缩小图像尺寸2?