主要内容

基于小波散射的数字分类

此示例演示如何使用小波散射进行图像分类。这个例子需要小波工具箱™, 深度学习工具箱™, 并行计算工具箱™.

对于分类问题,将数据映射到一些替代表示是很有用的,这些替代表示丢弃了不相关的信息,同时保留了每个类的区别属性。小波图像散射构造了对平移和小变形不敏感的图像的低方差表示。因为图像中的平移和小变形不会影响类的隶属度,所以散射变换系数提供了可以用来构建健壮分类模型的特征。

小波散射的工作原理是通过一系列小波变换、非线性和平均[1][3][4]级联图像特征提取是指在散射变换表示中,同一类别中的图像彼此移动得更近,而属于不同类别的图像则移动得更远。虽然小波散射变换与深度卷积神经网络在结构上有许多相似之处,包括卷积算子、非线性和平均,但散射变换中的滤波器是预定义和固定的。

数字图像

本例中使用的数据集包含10,000张从0到9的合成图像。这些图像是通过对使用不同字体创建的这些数字的图像应用随机转换生成的。每个数字图像是28 × 28像素。数据集包含每个类别相同数量的图像。使用imageDataStore读取图像。

digitDatasetPath = fullfile (matlabroot,“工具箱”“nnet”“nndemos”“nndatasets”“DigitDataset”);Imds=图像数据存储(digitDatasetPath,“包含子文件夹”,真的,“标签源”“foldernames”);

从数据集中随机选择并绘制20幅图像。

数字数字图像=10000;rng(100);perm=randperm(数字图像,20);Np = 1:20 subplot(4,5, Np);imshow (Imds.Files{烫发(np)});结束

你可以看到8s表现出相当大的可变性,而所有都可以被识别为8。样本中其他重复的数字也是如此。这与自然手写是一致的,在自然手写中,每个人的任何数字都有很大的不同,甚至在同一个人的手写中,关于平移、旋转和其他小的变形。使用小波散射,我们希望建立这些数字的表示,掩盖不相关的可变性。

小波图像散射特征提取

合成图像是28乘28的。建立小波图像散射框架,并设置不变尺度与图像大小相等。在两个小波散射滤波器组中设置旋转的次数为8。小波散射框架的构造要求我们只设置两个超参数InvarianceScaleNumRotations

科幻小说= waveletScattering2 (“图像大小”28 [28],“InvarianceScale”28岁...“NumRotations”,[8 8]);

本例利用MATLAB™的并行处理能力数组接口。如果并行池当前未运行,则可以通过执行以下代码启动并行池。或者,第一次创建数组,则创建并行池。

如果parpool isempty (gcp);结束
使用“local”配置文件启动并行池(parpool)…连接到并行池(工作人员数量:6)。

为了再现性,设置随机数生成器。洗牌的文件图像数据存储并将这10000张图片分成两组,一组用于训练,另一组用于测试。将80%的数据(即8000张图像)分配到训练集,并将剩余的2000张图像保留下来进行测试。创建来自训练和测试数据集的数组。使用helper函数助手图像从散射变换系数创建特征向量。助手图像得到散射变换特征矩阵的对数以及每幅图像的行维和列维的均值。的代码助手图像位于本例的末尾。对于本例中的每个图像,helper函数创建一个217×1的特征向量。

rng (10);imd = shuffle (imd);[trainImds, testImds] = splitEachLabel (imd, 0.8);Ttrain =高(trainImds);tt =高(testImds);trainfeatures = cellfun (@ (x) helperScatImages(科幻,x), Ttrain,“UniformOutput”、假);testfeatures = cellfun (@ (x) helperScatImages(科幻,x), tt,“UniformOutput”、假);

使用收集能够将所有的培训和测试功能连接起来。

Trainf =收集(trainfeatures);
使用并行池“local”评估tall表达式:-通过1/1:在3分钟51秒内完成评估在3分钟51秒内完成
trainfeatures =猫(2,Trainf {:});Testf =收集(testfeatures);
使用Parallel Pool 'local'计算tall表达式:Pass 1 of 1: Completed in 49 sec
testfeatures =猫(2,Testf {:});

前面的代码得到两个矩阵,行维217,列维分别等于训练集和测试集中的图像数。因此,每一列都是对应图像的特征向量。原始图像包含784个元素。散射系数表示每幅图像的大小大约减少了4倍。

PCA模型与预测

该示例基于每个类的散射特征向量的主分量构造了一个简单的分类器。该分类器在函数中实现helperPCAModel助手分类器helperPCAModel根据散射特征确定每个数字类的主成分。代码helperPCAModel位于本示例的末尾。助手分类器对保留的测试数据进行分类,方法是在每个测试特征向量的主成分与训练集之间找到最接近的匹配(最佳投影),并相应地分配类。的代码助手分类器位于本示例的末尾。

模型= helperPCAModel (trainfeatures 30 trainImds.Labels);predlabels = helperPCAClassifier (testfeatures模型);

在构建模型并对测试集进行分类后,确定测试集分类的准确性。

=总和(testImds准确性。标签= = predlabels)。/元素个数(testImds.Labels) * 100
精度= 99.6000

我们对测试数据的正确分类达到了99.6%。要查看这2000张测试图像是如何分类的,请绘制混淆矩阵。每10个类的测试集中都有200个例子。

图;混淆图(testImds.Labels、predlabels)标题(“测试集混淆矩阵—小波散射”

有线电视新闻网

在本节中,我们训练一个简单的卷积神经网络(CNN)来识别数字。构造CNN,使其由20个具有1 × 1步幅的5 × 5滤波器的卷积层组成。遵循卷积层与RELU激活和最大池化层。使用一个完全连接层,然后是一个softmax层来将完全连接层的输出归一化到概率。使用交叉熵损失函数进行学习。

imageSize = [28 28 1];层= [...imageInputLayer([28 28 1])卷积2dlayer (5,20) reluLayer maxPooling2dLayer(2, 20)“步”,2) fulllyconnectedlayer (10) softmaxLayer classificationLayer;

使用动量和学习率为0.0001的随机梯度下降进行训练。将最大历元数设置为20。对于再现性,将执行环境“cpu”

选项=培训选项(“个”...“MaxEpochs”, 20岁,...“InitialLearnRate”1的军医,...“详细”,错,...“阴谋”“训练进步”“ExecutionEnvironment”“cpu”);

培训网络。为了训练和测试,我们使用与散射变换相同的数据集。

重置(列车imds);重置(testImds);网络=列车网络(列车imds、层、选项);

训练结束时,CNN在训练集上的表现接近100%。使用训练过的网络对保留的测试集进行预测。

testImds YPred =分类(净,“ExecutionEnvironment”“cpu”);DCNNaccuracy = sum(YPred == testImds.Labels)/numel(YPred)*100
DCNNaccuracy = 95.5000

简单的CNN在保留测试集上取得了95.5%的正确分类。为CNN绘制混淆图。

图;confusionchart (testImds.Labels YPred)标题('测试集混淆图--CNN'

总结

本例使用小波图像散射创建数字图像的低方差表示,以进行分类。使用固定滤波器权重的散射变换和一个简单的主成分分类器,我们在一个测试集上实现了99.6%的正确分类。通过学习滤波器的简单CNN,我们获得了95.5%的正确率。本示例不打算直接比较散射变换和CNN。在每种情况下都可以进行多个超参数和体系结构更改,这会显著影响结果。本示例的目的只是演示深层特征提取程序(如小波散射变换)的潜力,以生成用于学习的稳健数据表示。

参考文献

布鲁纳J.和S.马拉特。“不变散射卷积网络”模式分析与机器智能学报第35卷,第8期,2013年,第1872-1886页。

[2] Mallat, S。“集团不变的散射。”纯数学和应用数学中的通信. 2012年第65卷第10期,第1331-1398页。

Sifre, L.和S. Mallat。旋转,缩放和变形不变散射用于纹理识别2013 IEEE计算机视觉与模式识别学术会议2013年,第1233-1240页。10.1109/CVPR.2013.163。

附录-支持功能万博1manbetx

助手图像

功能特点= helperScatImages(科幻,x)%这个函数只支持小波工具箱中的示例。万博1manbetx%它可能会在未来的版本中改变或被删除。%版权所有2018 MathWorkssmat = featureMatrix(科幻,x,“转换”“日志”);特征=平均值(平均值(smat,2),3);结束

helperPCAModel

功能模型= helperPCAModel(特性、M标签)%这个函数只是支持小波图像散射的例子万博1manbetx%小波工具箱。它可能会在未来的版本中更改或删除。%模型=helperPCAModel(特征、M、标签)%版权所有2018 MathWorks%初始化结构数组以保存仿射模型模型=结构(“暗”,[],“亩”,[],“U”,[],“标签”,分类的([]),“年代”[]);模型。昏暗的= M;%获取类的数量LabelCategories =类别(标签);类=元素个数(类别(标签));kk = 1:Nclasses Class = LabelCategories{kk};找到每个类对应的索引idxClass = label == Class;%提取每个类的特征向量tmpFeatures =特性(:,idxClass);确定每个类的平均值model.mu{kk}=均值(tmpFeatures,2);[model.U{kk},model.S{kk}]=scatPCA(tmpFeatures);如果大小(model.U{kk},2)>M model.U{kk}=model.U{kk}(:,1:M);model.S{kk}=model.S{kk}(1:M);结束model.Labels (kk) =类;结束功能[u,s,v]=scatPCA(x,M)%计算x沿二维的主分量。如果nargin > 1 && M >%如果M不为零,则计算前M个主分量。[u,s,v]=svds(x-sig_平均值(x),M);s=abs(诊断)/sqrt(尺寸(x,2)-1))^2;其他的%否则,计算所有的主成分。%每一行是一个观测值,即散射路径的数目%每一列是一个类观察(u, d) = eig (x (x '));位于[s] =排序(诊断接头(d),“下”);u = u(:,印第安纳州);结束结束结束

助手分类器

功能标签= helperPCAClassifier(特性,模型)%这个函数只是支持小波图像散射的例子万博1manbetx%小波工具箱。它可能会在未来的版本中更改或删除。% model是一个包含字段M、mu、v和Labels的结构数组%特征为测试数据的矩阵,为n -by- l, n为%散射路径,L为测试例数。每一列的%features是一个测试示例。%版权所有2018 MathWorkslabelIdx = determineClass(特性,模型);标签= model.Labels (labelIdx);%返回与imageDatastore标签一致的列向量标签=标签(:);%--------------------------------------------------------------------------功能labelIdx = determineClass(特性,模型)%确定类的数量类=元素个数(model.Labels);初始化误差矩阵errMatrix=Inf(n类,大小(特征,2));数控= 1:类%类质心μ= model.mu{数控};u = model.U{数控};% 1-by-L: errMatrix (nc) = projectionError(特性、μu);结束沿着类尺寸确定最小值[~, labelIdx] = min (errMatrix [], 1);%--------------------------------------------------------------------------功能totalerr = projectionError(特性、μu)人大=大小(u, 2);L =大小(功能,2);%减去类别平均值:Ns-by-L减去Ns-by-1s=特征μ;% 1-by-LnormSqX =总和(abs (s)。^ 2,1)';呃=正(人大+ 1,L);:犯错(1)= normSqX;犯错(2:,:)= abs (u ' *。^ 2;% 1-by-Ltotalerr =√sum(呃,1));结束结束结束

另请参阅

相关的例子

更多关于