使用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(我)结束
负载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(标签)结束
计算测试集上的分类精度。精度是标签的一部分网络预测正确。
精度=意味着(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深层神经网络。
另请参阅
fitcecoc
(统计和机器学习的工具箱)|resnet50