为SVM自定义对象检测器分离正样本和负样本

时间:2017-07-11 14:50:02

标签: python-2.7 opencv svm

我正在尝试在OpenCV上使用HOG + SVM方法训练自定义对象检测器。

我已设法使用以下代码行从我的正样本和负样本中提取HOG特征:

import cv2

hog = cv2.HOGDescriptor()
def poshoggify():

        for i in range(1,20):
            image = cv2.imread("/Users/munirmalik/cvprojek/cod/pos/" + str(i)+ ".jpg")
            (winW, winH) = (500, 500)

            for resized in pyramid(image, scale=1.5):
                # loop over the sliding window for each layer of the pyramid
                for (x, y, window) in sliding_window(resized, stepSize=32, windowSize=(winW, winH)):
                    # if the window does not meet our desired window size, ignore it
                    if window.shape[0] != winH or window.shape[1] != winW:
                        continue

                    img_pos = hog.compute(image)
                    np.savetxt('posdata.txt',img_pos)

                    return img_pos

和阴性样本的等效函数。

如何格式化数据,使SVM知道哪个是正数,哪个是负数?

此外,我如何将此培训转化为"测试"通过我的网络摄像头检测所需的物体?

1 个答案:

答案 0 :(得分:1)

如何格式化数据,使SVM知道哪个是正数,哪个是负数?

现在,您将创建另一个名为labels的列表,该列表将存储与相应图像关联的类值。例如,如果您有一组训练集,如下所示:

features = [pos_features1, pos_features2, neg_features1, neg_features2, neg_features3, neg_features4]

您将拥有相应的标签类,如

labels = [1, 1, 0, 0, 0, 0]

然后您可以将其提供给分类器,如下所示:

clf=LinearSVC(C=1.0,  class_weight='balanced')
clf.fit(features,labels)

此外,我如何将此培训转化为"测试"通过我的网络摄像头检测所需的对象?

在训练之前,您应该将标记的数据集(groundtruth)拆分为训练和测试数据集。您可以使用skilearns KFold module

执行此操作