我有大量标有植物名称的植物图像。用来对该数据集进行训练以对未标记照片进行分类的最佳算法是什么?对照片进行处理,以使100%的像素包含植物(例如叶子的特写或树皮),因此没有其他物体/算法需要过滤掉的空白空间/背景。

我已经尝试为所有照片生成SIFT功能,并将这些(功能,标签)对馈送到LibLinear SVM,但是准确度只有6%。

我还尝试将相同的数据提供给一些Weka分类器。准确性要好一些(使用Logistic时为25%,使用IBk时为18%),但是Weka并非为可伸缩性而设计(它将所有内容加载到内存中)。由于SIFT要素数据集有几百万行,因此我只能使用3%的随机切片来测试Weka,因此它可能不具有代表性。

编辑:一些示例图像:

最佳答案

通常,您不会直接使用SIFT功能进行训练。对它们进行聚类(使用k均值),然后在聚类成员身份标识符的直方图上进行训练(即k维向量,该向量在位置i上为第i个聚类分配了多少个特征)。

这样,您可以获得每个图像的单个输出(以及单个k维特征向量)。

这是准代码(在Pythonn中使用mahotasmilk):

from mahotas.surf import surf
from milk.unsupervised.kmeans import kmeans,assign_centroids
import milk

# First load your data:
images = ...
labels = ...

local_features = [surfs(im, 6, 4, 2) for im in imgs]
allfeatures = np.concatenate(local_features)
_, centroids = kmeans(allfeatures, k=100)
histograms = []
for ls in local_features:
     hist = assign_centroids(ls, centroids, histogram=True)
     histograms.append(hist)

cmatrix, _ = milk.nfoldcrossvalidation(histograms, labels)
print "Accuracy:", (100*cmatrix.trace())/cmatrix.sum()

08-24 15:15