主要内容

数字分类使用猪特性

这个例子展示了如何使用猪分类数字特性和多类支持向量机分类器。

对象分类是一个重要的任务在许多计算机视觉应用,包括监测、汽车安全,图像检索。例如,在一个汽车安全应用程序中,您可能需要分类附近的对象作为行人或车辆。无论类型的对象分类,创建一个对象分类的基本过程是:

  • 获得图像的标注数据集所需的对象。

  • 数据集分割成一个训练集和测试集。

  • 训练分类器使用训练集的特征提取。

  • 测试使用特性提取测试集分类器。

为了说明这一点,这个例子展示了如何使用猪分类数值位数(面向梯度直方图)特性[1]和多类SVM(支持向量机)分类器。金宝app这种类型的分类通常是用在许多光学字符识别(OCR)应用程序。

这个例子使用了fitcecoc函数的统计和机器学习的工具箱™extractHOGFeatures从计算机视觉的工具箱™函数。

数字数据集

合成数字图像用于培训。训练图像每一个标题都包含一个数字被其他数字,模拟数字如何通常发生在一起。使用合成照片是方便,它使建立一个各种各样的训练样本,而不必手动收集它们。进行检测,扫描的手写数字用于验证分类器如何执行在不同的训练数据的数据。虽然这不是最具代表性的数据集,有足够的数据来训练和测试分类器,并展示该方法的可行性。

%负荷训练和测试数据使用| imageDatastore |。syntheticDir = fullfile (toolboxdir (“愿景”),“visiondata”,“数字”,“合成”);handwrittenDir = fullfile (toolboxdir (“愿景”),“visiondata”,“数字”,“手写”);% | imageDatastore |递归扫描目录树包含%的图像。文件夹的名字是自动为每个图像作为标签。trainingSet = imageDatastore (syntheticDir,“IncludeSubfolders”,真的,“LabelSource”,“foldernames”);testSet = imageDatastore (handwrittenDir,“IncludeSubfolders”,真的,“LabelSource”,“foldernames”);

使用countEachLabel汇总的数字图像与每一个标签。在这个例子中,101年的训练集由图像的每个10位数。测试集包含12每个数字图像。

countEachLabel (trainingSet)
ans =10×2表标签数_____ _____ 0 101 101 101 101 101 4 101 5 6 101 7 101 101 101 9
countEachLabel (testSet)
ans =10×2表标签数_____ _____ 0 12 1 12 2 12 3 12 4 12 5 12 6 12 7 12 8 12 9 12

显示的一些培训和测试图像

图;次要情节(2、3、1);imshow (trainingSet.Files {102});次要情节(2、3、2);imshow (trainingSet.Files {304});次要情节(2、3、3);imshow (trainingSet.Files {809});次要情节(2、3、4);imshow (testSet.Files {13});次要情节(2、3、5); imshow(testSet.Files{37}); subplot(2,3,6); imshow(testSet.Files{97});

训练和测试分类器之前,一个预处理步骤应用于去除噪声工件时提出收集图像样本。这提供了更好的特征向量训练分类器。

%显示预处理结果exTestImage = readimage (testSet, 37);processedImage = imbinarize (im2gray (exTestImage));图;次要情节(1、2、1)imshow (exTestImage)次要情节(1、2、2)imshow (processedImage)

使用猪特性

数据用于训练分类器是猪从训练图像中提取特征向量。因此,重要的是要确保猪特征向量编码的对象的信息。的extractHOGFeatures函数返回一个可视化输出,可以帮助形成一些直觉的“足够的信息”是什么意思。通过改变猪的细胞尺寸参数和可视化结果,可以看到影响细胞尺寸参数对的形状信息编码在特征向量:

img = readimage (trainingSet, 206);%提取猪的特性和可视化[hog_2x2, vis2x2] = extractHOGFeatures (img,“CellSize”(2 - 2));[hog_4x4, vis4x4] = extractHOGFeatures (img,“CellSize”4 [4]);[hog_8x8, vis8x8] = extractHOGFeatures (img,“CellSize”[8]);%显示原始图像图;次要情节(2、3、1:3);imshow (img);%可视化猪的特性次要情节(2、3、4);情节(vis2x2);标题({' CellSize = 2 [2];(的长度= 'num2str(长度(hog_2x2))]});次要情节(2、3、5);情节(vis4x4);标题({' CellSize = 4 [4];(的长度= 'num2str(长度(hog_4x4))]});次要情节(2、3、6);情节(vis8x8);标题({“CellSize = [8]”;(的长度= 'num2str(长度(hog_8x8))]});

的可视化显示,细胞大小[8]不编码多形状信息,而细胞的大小(2 - 2)编码的形状信息,但显著增加猪特征向量的维数。一个好的妥协是一个4×4细胞的大小。这大小设置编码足够的空间信息可视化识别数字的形状而限制维度的猪的数量特征向量,这有助于加快培训。在实践中,猪的参数应随重复分类器训练和测试,以确定最优参数设置。

cellSize = 4 [4];hogFeatureSize =长度(hog_4x4);

火车一个数字分类器

数字分类是一个多类分类问题,你必须分类图像到一个可能的十个数字类。在这个例子中,fitcecoc从统计和机器学习的工具箱™函数用来创建一个使用二进制svm多类分类器。

首先从训练集提取猪的特性。这些特性将用于训练分类器。

% trainingSet循环,从图像中提取猪的特性。一个%将使用类似的过程从testSet提取特征。numImages =元素个数(trainingSet.Files);trainingFeatures = 0 (numImages hogFeatureSize,“单一”);i = 1: numImages img = readimage (trainingSet,我);img = im2gray (img);%应用预处理步骤img = imbinarize (img);trainingFeatures(我)= extractHOGFeatures (img,“CellSize”,cellSize);结束%获得每个图像的标签。trainingLabels = trainingSet.Labels;

接下来,使用提取的特征训练分类器。

% fitcecoc使用SVM学习者和One-vs-One编码方案。分类器= fitcecoc (trainingFeatures trainingLabels);

评价数字分类器

评估测试集的数字分类器使用图像,并生成一个混淆矩阵量化分类器精度。

的训练步骤,首先提取猪特性的测试图像。这些特性将被用来预测使用训练分类器。

%提取猪功能测试集的过程类似%,早些时候显示简洁的封装为一个helper函数。[testFeatures, testLabels] = helperExtractHOGFeaturesFromImageSet (testSet、hogFeatureSize cellSize);%进行类的预测使用测试功能。predictedLabels =预测(分类器,testFeatures);%使用混淆矩阵汇总结果。confMat = confusionmat (testLabels predictedLabels);helperDisplayConfusionMatrix (confMat)
数字| 0 1 2 3 4 5 6 7 8 9 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 | 0.25 0.00 0.08 0.00 0.00 0.00 0.58 0.00 0.08 0.00 1 | 0.00 0.75 0.00 0.00 0.08 0.00 0.00 0.08 0.08 0.00 - 2 | 0.00 0.00 0.67 0.17 0.00 0.00 0.08 0.00 0.00 0.08 - 3 | 0.00 0.00 0.00 0.58 0.00 0.00 0.33 0.00 0.00 0.08 - 4 | 0.00 0.08 0.00 0.17 0.75 0.00 0.00 0.00 0.00 0.00 - 5 | 0.00 0.00 0.00 0.00 0.00 0.33 0.58 0.00 0.08 0.00 6 | 0.00 0.00 0.00 0.00 0.25 0.00 0.67 0.00 0.08 0.00 7 | 0.00 0.08 0.08 0.33 0.00 0.00 0.17 0.25 0.00 0.08 8 | 0.00 0.00 0.00 0.08 0.00 0.00 0.00 0.08 0.67 0.17 9 | 0.00 0.08 0.00 0.25 0.17 0.00 0.08 0.00 0.00 0.42

表显示了以百分比形式混淆矩阵。矩阵的列表示预测的标签,而行表示已知的标签。对于这个测试集,数字0常被误诊为6,最有可能由于他们相似的形状。类似的错误9和图3。训练一个更有代表性的数据集像MNIST[2]或SVHN[3],包含成千上万的手写字符,可能产生一个更好的分类器相比,使用该合成数据集创建的一个。

总结

这个例子说明了创建一个多类对象的基本过程使用的分类器extractHOGfeatures从计算机视觉的工具箱和函数fitcecoc从统计和机器学习的工具箱™函数。尽管猪的特性和一个ECOC分类器使用,其他功能和机器学习算法可以以同样的方式使用。例如,您可以探索使用不同的功能类型进行训练分类器;或者你可以看到的影响使用其他机器学习算法的统计和机器学习等工具箱™再邻居。

金宝app支持功能

函数helperDisplayConfusionMatrix (confMat)%显示格式化的混淆矩阵表。%混淆矩阵转化为百分比的形式confMat = bsxfun (@rdivide confMat, sum (confMat, 2));数字=' 0 ':“9”;colHeadings = arrayfun (@ (x) sprintf (' % d ',0:9 x)“UniformOutput”、假);格式= repmat (' % 9 s '1、11);头= sprintf(格式,“数字|”,colHeadings {:});流(' \ n % s \ n % s \ n”头,repmat (“- - -”、大小(头)));idx = 1:元素个数(数字)流(' % 9 s ',(数字(idx)“|”]);流(' % -9.2 f 'confMat (idx:));流(' \ n ')结束结束
函数(特性,setLabels) = helperExtractHOGFeaturesFromImageSet (imd, hogFeatureSize cellSize)从一个imageDatastore %提取猪的特性。setLabels = imds.Labels;numImages =元素个数(imds.Files);特点= 0 (numImages hogFeatureSize,“单一”);%处理每个图像和提取功能j = 1: numImages img = readimage (imd, j);img = im2gray (img);%应用预处理步骤img = imbinarize (img);特性(j:) = extractHOGFeatures (img,“CellSize”,cellSize);结束结束

引用

[1]n .中间人和b区格”的梯度直方图的人体检测”,Proc。设计。计算机视觉和模式识别,1卷,第893 - 886页,2005年。

[2]LeCun (Y。Bottou, L。Bengio, Y。,and Haffner, P. (1998). Gradient-based learning applied to document recognition. Proceedings of the IEEE, 86, 2278-2324.

[3]y Netzer,科茨,a . Bissacco t . Wang A.Y. Ng,阅读数字b . Wu在自然图像与无监督特征学习捏深度学习和无监督特征学习研讨会2011。