我几天前在简历上发布了这个question,但论坛基本上没有观察到它。我试图在MATLAB中实现NBNN来对CIFAR-10图像数据集进行图像分类。算法非常简单,我对它的正确性充满信心,然而,我收到22-28%的可怕准确率。我不确定为什么,我希望有图像分类或算法经验的人可以指出我正确的方向。该算法学习了SIFT图像描述符,这可能是其表现不佳的原因之一。 Matlab只有一个SURF特征检测器。根据我的阅读,SURF / SIFT基本相同。我一直在使用features
,(nDescriptros x 64)从下面的函数中获取我的模型。
points = detectSURFFeatures(rgb2gray(image));
[features,valid_points] = extractFeatures(image,points);
CIFAR数据集和此方法的另一个可能问题是图像的小尺寸。每张图像都是32 x 32图像,我相信,这使得特征检测非常困难。我在detectSURFFeatures()
中使用了不同的八度音阶设置,但没有任何事情使我的准确度超过28%。
该方法的注释代码如下。这很难理解,但仍然可能有所帮助。
希望有人可以帮助我。
for i = 3001:4000 %Train on the first 3000 instances and test on the remaining 1000.
closeness = [];
for j = 1:10 %loop over the 10 catergories
class = train(trainLabel==j,:); % Pull out all descriptors that belong to class j
descriptor = test(test_id==i,:); % Pull out all descriptors for image i
[idx,dist] = knnsearch(class,descriptor,'K',1); % Find the distance between the descriptors and the closest labeled descriptor in class j.
total = sum(dist); % sum up distances
closeness = [closeness,sum(total)]; % append a vector of the image-to-class distances.
end
[val,cat] = min(closeness); % Find choose the class that resulted in the lowest, summed distance.
predLabel = [predLabel;cat]; % Append to a vector of labels.
i
end
答案 0 :(得分:0)
如果您的图像是32x32像素,那么尝试检测兴趣点并不是一个好主意。正如您所观察到的,如果有的话,您将获得很少的功能。对图像进行上采样是一种选择。另一种选择是使用像HOG(extractHOGFeatures
)这样的全局描述符。