我将使用与SVM分类器结合使用的HOG功能描述符进行对象检测项目。Scikit-图像中提供的HOG在分类阶段带来了很好的结果。但是,它运行非常缓慢(每图像20秒)。另一方面,OPENCV版本非常快(每张图像0.3s)。问题是,尽管我在两个猪版本中都使用了相同的参数,但结果彼此不同。我用于每个版本的参数如下:
OPENCV版本:
winSize = (4,4)
blockSize = (2,2)
blockStride = (2,2)
cellSize = (2,2)
nbins = 5
hog = cv2.HOGDescriptor(winSize,blockSize,blockStride,cellSize,nbins)
hist = hog.compute(image)
scikit-image版本:
hist = hog(image, orientations=5, pixels_per_cell=(2,2),cells_per_block=(2, 2), block_norm='L2-Hys')
由OpenCV产生的猪:
[[ 0. ]
[ 0. ]
[ 0.99502486]
...,
[ 0.99502486]
[ 0. ]
[ 0. ]]
由scikit-image产生的猪:
[[ 0. ]
[ 0. ]
[ 0.16415654]
...,
[ 0.14253933]
[ 0. ]
[ 0. ]]
值得注意的是,两个描述符生成的功能数量都是相同的。
OpenCV Hog的问题是什么,不会产生与Scikit-image相同的结果?
在scikit-image中的猪纸的实现与OpenCV的实现不同。我上次浏览源代码时,我注意到,除其他外,Scikit-image执行的标准化不是纸张的建议。
我建议使用OPENCV提供的一种,因为它可以更改几个参数,并且更接近Hog Paper的实现。另外,正如您为自己发现的那样,OpenCV实施是优化速度更快的。