gpt4 book ai didi

python - 无法训练线性 SVM 机器

转载 作者:行者123 更新时间:2023-11-30 09:55:33 29 4
gpt4 key购买 nike

我正在为我的图像处理项目构建一个 SVM 线性机,在其中提取正样本和负样本的特征并将其保存到目录中。然后,我使用这些功能训练 SVM,但收到一个无法调试的错误。下面是我用于训练分类器的 train-classifier.py 文件 -

from skimage.feature import local_binary_pattern
from sklearn.svm import LinearSVC
from sklearn.linear_model import LogisticRegression
from sklearn.externals import joblib
import argparse as ap
import glob
import os
from config import *

if __name__ == "__main__":
# Parse the command line arguments
parser = ap.ArgumentParser()
parser.add_argument('-p', "--posfeat", help="Path to the positive features directory", required=True)
parser.add_argument('-n', "--negfeat", help="Path to the negative features directory", required=True)
parser.add_argument('-c', "--classifier", help="Classifier to be used", default="LIN_SVM")
args = vars(parser.parse_args())

pos_feat_path = args["posfeat"]
neg_feat_path = args["negfeat"]

# Classifiers supported
clf_type = args['classifier']

fds = []
labels = []
# Load the positive features
for feat_path in glob.glob(os.path.join(pos_feat_path,"*.feat")):
fd = joblib.load(feat_path)
fds.append(fd)
labels.append(1)

# Load the negative features
for feat_path in glob.glob(os.path.join(neg_feat_path,"*.feat")):
fd = joblib.load(feat_path)
fds.append(fd)
labels.append(0)

if clf_type is "LIN_SVM":
clf = LinearSVC()
print "Training a Linear SVM Classifier"
clf.fit(fds, labels)
# If feature directories don't exist, create them
if not os.path.isdir(os.path.split(model_path)[0]):
os.makedirs(os.path.split(model_path)[0])
joblib.dump(clf, model_path)
print "Classifier saved to {}".format(model_path)

我在 clf.fit(fds, labels) 行中遇到错误,下面是它的内容 -

Calculating the descriptors for the positive samples and saving them
Positive features saved in ../data/features/pos
Calculating the descriptors for the negative samples and saving them
Negative features saved in ../data/features/neg
Completed calculating features from training images
Training a Linear SVM Classifier
Traceback (most recent call last):
File "../object-detector/train-classifier.py", line 42, in <module>
clf.fit(fds, labels)
File "/usr/local/lib/python2.7/dist-packages/sklearn/svm/classes.py", line 200, in fit
dtype=np.float64, order="C")
File "/usr/local/lib/python2.7/dist-packages/sklearn/utils/validation.py", line 444, in check_X_y
ensure_min_features)
File "/usr/local/lib/python2.7/dist-packages/sklearn/utils/validation.py", line 344, in check_array
array = np.array(array, dtype=dtype, order=order, copy=copy)
ValueError: setting an array element with a sequence.
Traceback (most recent call last):
File "../object-detector/test-classifier.py", line 68, in <module>
fd = hog(im_window, orientations, pixels_per_cell, cells_per_block, visualize, normalize)
File "/usr/lib/python2.7/dist-packages/skimage/feature/_hog.py", line 63, in hog
raise ValueError("Currently only supports grey-level images")
ValueError: Currently only supports grey-level images

最佳答案

我推测该代码源自 https://github.com/bikz05/object-detector 。您需要确保训练样本(pos 和 neg)具有相同的大小(宽度x高度)并且是灰度图像。您的测试图像也应该是灰色的。

我为此使用 imagemagick 的转换命令:

转换sample.png -调整大小100x40 -颜色空间灰色sample.png

更新(使用python转换为灰度图像并调整大小):

import cv2

img = cv2.imread('color_image.jpg',0)
im = cv2.resize(img, (100,40), interpolation=cv2.INTER_CUBIC)
cv2.imwrite("gray_image.jpg", im)

关于python - 无法训练线性 SVM 机器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32260428/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com