主要内容

图像类别分类使用的特性

这个例子展示了如何使用一个袋的功能图像类别分类的方法。这种技术通常也称为袋的话。视觉图像分类是一个分配一个类别标签的过程被测试图像。类可以包含图像代表任何东西,例如,狗,猫,火车,船只。

加载图像数据集

解压缩的图像集合用于这个例子。

解压缩(“MerchData.zip”);

加载图像使用一个集合imageDatastore来帮助您管理数据。因为imageDatastore作用于图像文件的位置,因此不所有的图像加载到内存中,它的使用是安全的,在大型图像集合。

imd = imageDatastore (“MerchData”,“IncludeSubfolders”,真的,“LabelSource”,“foldernames”);

你可以很容易地检查每个类别的图片数量以及分类标签,如下所示:

台= countEachLabel (imd)
台=5×2表标签数_______________________ _____ MathWorks帽15 MathWorks立方体15 MathWorks扑克牌15 MathWorks螺丝刀15 MathWorks火炬15

注意标签来自用于构造ImageDatastore目录名称,但可以通过手动设置自定义的标签属性ImageDatastore对象。接下来,显示的图像的图像所使用的类型。

图蒙太奇(imds.Files (1:16)):

图包含一个坐标轴对象。坐标轴对象包含一个类型的对象的形象。

注意包的特性是有效的方法,大多数的对象必须是可见的图像。

准备培训和验证图像集

单独的训练集和验证数据。选择图像从每组训练数据的60%,其余40%,验证数据。随机分割来避免结果的偏差。

[trainingSet, validationSet] = splitEachLabel (imd, 0.6,“随机”);

上面的调用返回两个imageDatastore对象准备好培训和验证任务。

创建一个视觉词汇和图像类别分类器训练

袋的技术适应计算机视觉从自然语言处理的世界。由于图片不实际上包含离散的话说,我们首先构造一个“词汇表”extractFeatures功能代表每个图像的类别。

这是一个调用来完成bagOfFeatures函数,该函数:

  1. 从所有图像图像提取冲浪功能类别

  2. 构造视觉词汇的数量减少使用k - means聚类特性通过量化的特征空间

袋= bagOfFeatures (trainingSet);
创建Bag-Of-Features。- - - - - - - - - - - - - - - - - - - - - - - - - *图像类别1:MathWorks帽*图像类别2:MathWorks立方体*图像类别3:MathWorks扑克牌*图像类别4:MathWorks螺丝刀*图5级:MathWorks火炬*使用网格方法选择特征点的位置。*从所选特征点提取冲浪功能位置。* * GridStep [8], BlockWidth (32 64 96 128)。*从45图像中提取特征……做的。提取141120特性。*保持最强的功能从每个类别的80%。*创建一个500字的视觉词汇。*层数:1 *分支系数:500 *的聚类步骤:1 *[1/1]步聚类词汇一级。*的特点:112895 *集群数量:500 *初始化聚类中心…100.00%。 * Clustering...completed 15/100 iterations (~1.13 seconds/iteration)...converged in 15 iterations. * Finished creating Bag-Of-Features

此外,bagOfFeatures对象提供了一个编码方法计算视觉单词出现在一个图像。它产生的直方图,变成了一个新的和减少表示图像。

img = readimage (imd, 1);featureVector =编码(袋、img);
使用Bag-Of-Features编码图像。- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *编码图像做…。
%画出直方图的视觉词出现图酒吧(featureVector)标题(“视觉词出现”)包含(“视觉词指数”)ylabel (发生的频率)

图包含一个坐标轴对象。坐标轴对象与标题的视觉词出现,包含视觉词指数ylabel发生频率包含一个对象类型的酒吧。

这柱状图形式的基础训练分类器,对实际的图像分类。从本质上讲,它编码一个图像到一个特征向量。

从每个类别编码训练图像被送入分类器的训练过程调用的trainImageCategoryClassifier函数。注意,这个函数依赖于多级线性SVM分类器的统计和机器学习的工具箱™。

categoryClassifier = trainImageCategoryClassifier (trainingSet、袋);
训练一个图像类别分类器5类。- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *类别1:MathWorks帽*类别2:MathWorks立方体* 3级:MathWorks扑克牌* 4级:MathWorks螺丝刀* 5级:MathWorks火炬* 45…做图像编码特性。*完成培训类别分类器。使用评估测试测试集上的分类器。

上述函数使用编码输入的方法对象制定代表每个图像类别的特征向量trainingSet

评估分类器的性能

现在,我们有一个训练分类器,categoryClassifier让我们评估。作为一个检查,让我们首先测试它与训练集,应该产生近乎完美的混淆矩阵,即对角线上。

confMatrix =评估(categoryClassifier trainingSet);
评价图像类别分类器5类。- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *类别1:MathWorks帽*类别2:MathWorks立方体* 3级:MathWorks扑克牌* 4级:MathWorks螺丝刀* 5级:MathWorks火炬* 45图片…做评估。*完成评估的所有测试集。*的混淆矩阵测试集是:预测已知| MathWorks帽MathWorks立方体MathWorks扑克牌MathWorks螺丝刀MathWorks火炬- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MathWorks帽| MathWorks立方体| 1.00 0.00 0.00 0.00 0.00 0.00 - 0.89 0.00 0.00 0.11 MathWorks扑克牌| 0.00 0.00 1.00 0.00 0.00 MathWorks螺丝刀| MathWorks火炬| 0.00 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 1.00 *平均精度为0.98。

接下来,让我们来评估分类器validationSet,期间并没有使用培训。默认情况下,评估函数返回混淆矩阵,这是一个很好的分类器是如何执行的初始指标。

confMatrix =评估(categoryClassifier validationSet);
评价图像类别分类器5类。- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *类别1:MathWorks帽*类别2:MathWorks立方体* 3级:MathWorks扑克牌* 4级:MathWorks螺丝刀* 5级:MathWorks火炬* 30图片…做评估。*完成评估的所有测试集。*的混淆矩阵测试集是:预测已知| MathWorks帽MathWorks立方体MathWorks扑克牌MathWorks螺丝刀MathWorks火炬- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MathWorks帽| MathWorks立方体| 1.00 0.00 0.00 0.00 0.00 0.00 - 0.50 0.17 0.17 0.17 MathWorks扑克牌| 0.00 0.00 1.00 0.00 0.00 MathWorks螺丝刀| MathWorks火炬| 0.00 0.00 0.00 1.00 0.00 0.17 0.00 0.00 0.00 0.83 *平均精度为0.87。
%计算平均精度意思是(诊断接头(confMatrix))
ans = 0.8667

您可以调整bagOfFeatureshyperparameters并继续评估训练分类器,直到你对结果很满意。额外的数据可以使用返回的其他参数评价功能。请参阅帮助imageCategoryClassifier /评估

尝试新训练的分类器在测试图像

你现在可以申请新训练的分类器进行分类的新图像。

img = imread (fullfile (“MerchData”,“MathWorks帽”,“Hat_0.jpg”));图imshow (img)

图包含一个坐标轴对象。坐标轴对象包含一个类型的对象的形象。

[labelIdx,分数]=预测(categoryClassifier, img);
使用Bag-Of-Features编码图像。- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *编码图像做…。
%显示字符串标签categoryClassifier.Labels (labelIdx)
ans =1 x1单元阵列{' MathWorks帽'}