我将使用hog特征描述符与SVM分类器结合用于对象检测项目。 scikit-image中提供的猪在分类阶段产生了非常好的结果。但是,它运行速度非常慢(每张图像20秒)。另一方面,OpenCV版本非常快(每张图像0.3秒)。问题是虽然我对两个猪版本使用了相同的参数,但结果却彼此不同。 我为每个版本使用的参数如下:
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的问题是什么,与scikit-image的结果不同?
答案 0 :(得分:1)
scikit-image中HOG文件的实现与opencv不同。我最后一次浏览源代码时注意到,除其他外,scikit-image执行的规范化不是本文推荐的规范化。
我建议使用opencv提供的那个,因为它允许你更改几个参数,并且更接近HOG文件的实现。此外,正如您自己发现的那样,opencv实现经过优化并且速度更快。