主要内容

使用Pretrained网络提取图像特征

这个例子展示了如何提取图像特征认识从pretrained卷积神经网络训练图像分类器,并使用这些特性。特征提取是最简单和最快的方式使用pretrained深层网络的表征能力。例如,您可以使用训练支持向量机(SVM)金宝appfitcecoc(统计和机器学习的工具箱™)提取的特征。因为特征提取只需要一个通过数据,这是一个很好的起点,如果你没有一个GPU加速网络训练。

加载数据

解压缩和加载示例图像作为图像数据存储。imageDatastore自动标签图像基于文件夹的名字和存储数据作为ImageDatastore对象。图像数据存储可以存储大量图像数据,包括数据,并不适合在内存中。把数据分成70%的训练,30%测试数据。

解压缩(“MerchData.zip”);imd = imageDatastore (“MerchData”,“IncludeSubfolders”,真的,“LabelSource”,“foldernames”);[imdsTrain, imdsTest] = splitEachLabel (imd, 0.7,“随机”);

现在55训练图像和20验证图像在这个非常小的数据集。显示一些示例图像。

numTrainImages =元素个数(imdsTrain.Labels);idx = randperm (numTrainImages 16);图i = 1:16次要情节(4 4 i) i = readimage (imdsTrain idx (i));imshow(我)结束

图包含16个坐标轴对象。坐标轴对象1包含一个类型的对象的形象。坐标轴对象2包含一个类型的对象的形象。坐标轴对象3包含一个类型的对象的形象。坐标轴对象4包含一个类型的对象的形象。5轴对象包含一个类型的对象的形象。6轴对象包含一个类型的对象的形象。7轴对象包含一个类型的对象的形象。8轴对象包含一个类型的对象的形象。坐标轴对象9包含一个类型的对象的形象。 Axes object 10 contains an object of type image. Axes object 11 contains an object of type image. Axes object 12 contains an object of type image. Axes object 13 contains an object of type image. Axes object 14 contains an object of type image. Axes object 15 contains an object of type image. Axes object 16 contains an object of type image.

负载Pretrained网络

加载一个pretrained ResNet-18网络。如果深度学习工具箱模型ResNet-18网络金宝app支持包没有安装,那么软件提供一个下载链接。ResNet-18培训超过一百万张图片,可以分类图像到1000年对象类别,如键盘,鼠标,铅笔,和许多动物。结果,模型已经学会丰富广泛的图像特征表示。

网= resnet18
网= DAGNetwork属性:层:x1 nnet.cnn.layer.Layer[71]连接:[78 x2表]InputNames:{“数据”}OutputNames: {“ClassificationLayer_predictions”}

分析网络体系结构。图像输入层,第一层要求输入的图像大小224 - 224 - 3,3是颜色通道的数量。

inputSize = net.Layers (1) .InputSize;analyzeNetwork(净)

提取图像特征

网络需要输入的图像大小224 - 224 - 3,但图像的图像数据存储有不同的大小。自动调整训练和测试图像输入到网络之前,创建增强图像数据存储,指定所需的图像大小,和使用这些数据存储作为输入参数激活

augimdsTrain = augmentedImageDatastore (inputSize (1:2), imdsTrain);augimdsTest = augmentedImageDatastore (inputSize (1:2), imdsTest);

网络结构的层次化表示输入图像。深层包含高级特性,构造使用前面的低层特征层。的训练和测试的特征表示图像,使用激活在全球池层,“pool5”,的网络。全局池层池输入特性对所有空间位置,给512的特性。

层=“pool5”;featuresTrain =激活(净、augimdsTrain层,“OutputAs”,“行”);featuresTest =激活(净、augimdsTest层,“OutputAs”,“行”);谁featuresTrain
类属性名称大小字节featuresTrain 55 x512 112640单身

提取类标签的训练和测试数据。

YTrain = imdsTrain.Labels;欧美= imdsTest.Labels;

适合图像分类器

使用从训练图像提取的特征作为预测变量和适应多类支持向量机(SVM)使用金宝appfitcecoc(统计和机器学习的工具箱)。

分类器= fitcecoc (featuresTrain YTrain);

测试图像进行分类

分类测试图像使用训练SVM模型使用从测试中提取图像的特性。

YPred =预测(分类器,featuresTest);

显示四个样品的测试图像与他们预测标签。

idx = [1 5 10 15];图i = 1:元素个数(idx)次要情节(2,2,我)我= readimage (imdsTest idx (i));标签= YPred (idx (i));imshow (I)标题(char(标签)结束

图包含4轴对象。坐标轴对象1标题MathWorks帽包含一个类型的对象的形象。坐标轴对象2标题MathWorks多维数据集包含一个类型的对象的形象。坐标轴对象3标题MathWorks扑克牌包含一个类型的对象的形象。坐标轴对象4标题MathWorks螺丝刀包含一个类型的对象的形象。

计算测试集上的分类精度。精度是标签的一部分网络预测正确。

精度=意味着(YPred = =次)
精度= 1

训练分类器较浅的特性

你也可以从早期层网络中提取特征和训练一个分类器的特性。早些时候层通常提取较少,较浅的特点,有较高的空间分辨率,和一个更大的激活的总数。提取的特征“res3b_relu”层。这是最后一层,128年输出特性和激活28-by-28的空间大小。

层=“res3b_relu”;featuresTrain =激活(净、augimdsTrain层);featuresTest =激活(净、augimdsTest层);谁featuresTrain
类属性名称大小字节featuresTrain 28 x28x128x55 22077440单

提取的特征用于此示例的第一部分是汇集所有空间位置由全球池层。达到相同的结果在早些时候层提取特征时,手动平均激活所有空间位置。表单上的特性N——- - - - - -C,在那里N是观察和的数量吗C特征的数量,消除单维度和转置。

featuresTrain =挤压(平均(featuresTrain [1 - 2])) ';featuresTest =挤压(平均(featuresTest [1 - 2])) ';谁featuresTrain
类属性名称大小字节featuresTrain 55 28160 x128单身

训练支持向量机分类器在较浅的特性。计算测试精度。

分类器= fitcecoc (featuresTrain YTrain);YPred =预测(分类器,featuresTest);精度=意味着(YPred = =次)
精度= 0.9500

两个训练支持向量机有较高的精度。如果使用特征提取精度不够高,然后试着转移学习。例如,看到的火车深入学习网络对新图像进行分类。的列表和比较pretrained网络,看到的Pretrained深层神经网络

另请参阅

(统计和机器学习的工具箱)|

相关的话题