大规模图像分类器

Cer*_*rin 9 classification machine-learning image-processing

我有一大堆用植物学名称标记的植物图像.什么是用于训练此数据集以便对无标签照片进行分类的最佳算法?处理照片以使100%的像素包含植物(例如叶子或树皮的特写),因此算法不必过滤掉其他对象/空白空间/背景.

我已经尝试为所有照片生成SIFT功能并将这些(特征,标签)对提供给LibLinear SVM,但准确度却低了6%.

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

编辑:一些示例图像:

Pachira aquatica Fagus grandifolia

lui*_*dro 7

通常,您不会直接训练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()
Run Code Online (Sandbox Code Playgroud)