图像目标识别中的值误差

2024-03-28 21:45:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用kNearestNeigbours做一个图像分类器。我有50节课,每节课我们有4张图片。我使用3个图像进行训练,1个用于测试。 我的代码:

def get_img_files(img_dir):
    df = pd.DataFrame(filter(lambda x: ".JPG" in x, listdir(img_dir)), columns=["name"])
    df["class"] = np.repeat(np.linspace(0, 49, num=50), 4) # number of files=200, number of classes=4
    df["class"] = df["class"].astype("category")
    return df


def extract_sift(df):
    key_points, kp_descriptors = [], []
    df_name = list(df["name"])
    sift = cv2.SIFT(nfeatures=20)
    for i in xrange(len(df)):
        img = cv2.imread(join(img_dir, df_name[i]))
        img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        kp, des = sift.detectAndCompute(img, None)
        key_points.append(kp)
        kp_descriptors.append(des.astype(np.uint16))
    df["sift_kp"] = key_points
    df["sift_kp_desc"] = kp_descriptors
    return df


if __name__ == '__main__':
    img_dir = '../data/uni/'
    df = get_img_files(img_dir)
    df = extract_sift(df)
    X_train, X_test, y_train, y_test = train_test_split(df["sift_kp_desc"], df["class"], test_size=0.25, random_state=42)

    knn = KNeighborsClassifier(n_neighbors=5, weights="distance", metric=cos_dist)
    knn.fit(X_train, y_train)

    print knn.score(X_test, y_test)

但我犯了个错误

 Traceback (most recent call last):
  File "/Users/manabchetia/Documents/PyCharm/horc/src/classifier.py", line 50, in <module>
    print(knn.score(X_test, y_test))
  File "/Users/manabchetia/anaconda/lib/python2.7/site-packages/sklearn/base.py", line 291, in score
    return accuracy_score(y, self.predict(X), sample_weight=sample_weight)
  File "/Users/manabchetia/anaconda/lib/python2.7/site-packages/sklearn/neighbors/classification.py", line 147, in predict
    neigh_dist, neigh_ind = self.kneighbors(X)
  File "/Users/manabchetia/anaconda/lib/python2.7/site-packages/sklearn/neighbors/base.py", line 316, in kneighbors
    **self.effective_metric_params_)
  File "/Users/manabchetia/anaconda/lib/python2.7/site-packages/sklearn/metrics/pairwise.py", line 1078, in pairwise_distances
    X, Y = check_pairwise_arrays(X, Y)
  File "/Users/manabchetia/anaconda/lib/python2.7/site-packages/sklearn/metrics/pairwise.py", line 97, in check_pairwise_arrays
    X.shape[1], Y.shape[1]))
ValueError: Incompatible dimension for X and Y matrices: X.shape[1] == 50 while Y.shape[1] == 150

我该怎么修?你知道吗


Tags: nameinpytestdfimgdirline