主要内容

使用深度学习图像类别分类

这个例子展示了如何使用一个pretrained卷积神经网络(CNN)作为训练图像的特征提取器的类别分类器。

概述

一个卷积神经网络(CNN)是一个功能强大的机器学习技术领域的深入学习。cnn被训练使用大量不同的图像。从这些大集合,cnn可以学到丰富的特性表现为广泛的图像。这些特性表征往往比手工特性如猪,枸杞多糖或冲浪。一个简单的方法来利用CNN的力量,没有投资时间和精力投入到训练,是使用pretrained CNN作为特征提取器。

在这个例子中,鲜花的图片数据集[5]分为类别使用多级线性SVM训练与CNN从图像中提取特征。这种图像类别分类方法遵守标准的现成的分类器训练的利用从图像中提取特征。例如,图像类别分类使用的特性示例使用上网功能袋内功能训练多类支持向量机的框架。这里的差别是,而不是使用图像特性,比如猪或冲浪、特性提取使用CNN。

注意:这个例子需要深度学习工具箱™,统计和机器学习的工具箱™,深度学习工具箱™模型ResNet-50网络

使用CUDA-capable NVIDIA GPU™强烈推荐用于运行这个例子。使用GPU需要并行计算工具箱™。关于支持计算能力的信息,看到金宝appGPU的金宝app支持版本(并行计算工具箱)

下载图像数据

类别分类器将被训练在鲜花的图片数据集[5]。

%的位置压缩数据集url =“http://download.tensorflow.org/example_images/flower_photos.tgz”;%的输出存储在一个临时文件夹中downloadFolder = tempdir;文件名= fullfile (downloadFolder,“flower_dataset.tgz”);

注意:下载数据的时间取决于您的网络连接。下一组命令使用MATLAB下载数据并将阻止MATLAB。或者,您可以使用web浏览器来第一个数据下载到您的本地磁盘。用你从网上下载的文件,上面的“outputFolder”变量更改为下载文件的位置。

%未压缩的数据集imageFolder = fullfile (downloadFolder,“flower_photos”);如果~存在(imageFolder“dir”)%只下载一次disp (“下载数据集(218 MB)花…”);websave(文件名、url);解压(文件名,downloadFolder)结束

加载图片

加载数据集使用ImageDatastore来帮助您管理数据。因为ImageDatastore作用于图像文件位置,图像不加载到内存中,直到读,使其有效使用大型图像集合。

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

下面,你可以看到一个例子图像的类别中包含的数据集。显示的图像马里奥

%找到第一个图片为每个类别的实例黛西=找到(imd)。标签= =“黛西”1);黛西图imshow (readimage (imd))

洛桑国际管理发展学院变量现在包含图片和每个图像的分类标签。自动分配的标签图像文件的文件夹的名称。使用countEachLabel总结每个类别图像的数量。

台= countEachLabel (imd)
台=5×2表标签数_____ _____黛西633蒲公英898朵玫瑰641向日葵699 799年郁金香

因为洛桑国际管理发展学院上面包含了一个不平等的每个类别的图片数量,先调整,所以在训练集图像的数量平衡。

%确定最小数量的图像在一个类别minSetCount = min(台{:2});%限制图片的数量,以减少所花费的时间%运行这个例子。maxNumImages = 100;minSetCount = min (maxNumImages minSetCount);%使用splitEachLabel方法修剪。imd = splitEachLabel (imd, minSetCount“随机”);%注意每组现在拥有完全相同的图像。countEachLabel (imd)
ans =5×2表标签数_____ _____黛西100蒲公英100朵玫瑰100向日葵100 100年郁金香

负载pretrained网络

有几个pretrained网络已经得到普及。其中大部分已经ImageNet数据集训练有素,拥有1000对象类别和120万训练图像[1]。“ResNet-50”就是这样的一个模型,可以加载使用resnet50从神经网络工具箱™函数。使用resnet50要求你第一次安装resnet50(深度学习工具箱)

%负载pretrained网络网= resnet50 ();

其他受欢迎的网络训练ImageNet包括AlexNet GoogLeNet, VGG-16和VGG-19[3],它可以加载使用alexnet,googlenet,vgg16,vgg19从深度学习工具箱™。

使用情节可视化网络。因为这是一个大型网络,调整显示窗口显示只是第一部分。

%可视化网络的第一部分。图绘制(净)标题(“ResNet-50第一节”甘氨胆酸)组(,“YLim”170年[150]);

第一层定义了输入维度。每个CNN都有大小不同的输入要求。在这个例子中需要使用的图像输入224 - 224 - 3。

%检查第一层net.Layers (1)
ans = ImageInputLayer属性:名称:“input_1”InputSize: [224 224 3] Hyperparameters DataAugmentation:“没有”正常化:“zerocenter”NormalizationDimension:“汽车”的意思是:(224×224×3个)

中间的层构成了大部分的CNN。这是一系列的卷积层,点缀着纠正线性单元(ReLU)和max-pooling层[2]。在这些层3全层。

最后一层是分类层及其属性依赖于分类任务。在这个例子中,CNN模型加载被训练来解决1000 -方式分类问题。因此,从ImageNet数据集分类层有1000类。

%检查最后一层net.Layers(结束)
ans = ClassificationOutputLayer属性:名称:“ClassificationLayer_fc1000”类:[1000×1分类]OutputSize: 1000 Hyperparameters LossFunction:“crossentropyex”
% ImageNet分类任务的类名元素个数(net.Layers(结束).ClassNames)
ans = 1000

注意,CNN模型不能用于最初的分类任务。它是妄解决不同数据集分类任务的花。

准备培训和测试图像集

将集分为训练和验证数据。选择图像从每组训练数据的30%,其余70%,验证数据。随机分割来避免结果的偏差。训练集和测试集将由CNN模型处理。

[trainingSet, testSet] = splitEachLabel (imd, 0.3,“随机”);

预处理图像为CNN

正如前面所提到的,只能处理224年的RGB图像- 224。为了避免重新保存所有的图像格式,使用一个augmentedImageDatastore调整和任何灰度图像转换为RGB动态。的augmentedImageDatastore也可以用于其他数据增加时用于网络培训。

%从训练集和测试集创建augmentedImageDatastore调整在imd %图像网络所需的大小。图象尺寸= net.Layers (1) .InputSize;trainingSet augmentedTrainingSet = augmentedImageDatastore(图象尺寸,“ColorPreprocessing”,“gray2rgb”);testSet augmentedTestSet = augmentedImageDatastore(图象尺寸,“ColorPreprocessing”,“gray2rgb”);

提取训练使用有线新闻网

每一层的CNN产生响应,或激活一个输入图像。然而,只有几层在CNN,适用于图像特征提取。网络的初层捕获基本图像特征,如边缘和斑点。看到这,可视化网络滤波器权重从第一个回旋的层。这可以帮助建立一个直觉为什么从cnn提取的特征图像识别任务的好工作。注意,可视化特性从更深的层权重可以通过使用deepDreamImage从深度学习工具箱™。

%获得第二的网络权值卷积层w1 = net.Layers (2) .Weights;%规模和调整权重的可视化w1 = mat2gray (w1);w1 = imresize (w1, 5);%显示网络权重的蒙太奇。有96个人组%重量在第一层。图蒙太奇(w1)标题(“第一卷积层权重”)

注意网络的第一层已经学会过滤器捕捉blob和边缘特征。这些“原始”功能被更深的网络层处理,并结合早期功能形成更高层次的图像特征。这些更高层次特性更适合识别任务,因为他们将所有的原始功能合并到更丰富的图像表示[4]。

你可以很容易地提取从一个深层的使用特性激活方法。选择深层选择的设计选择,但通常从一层一层之前分类是一个很好的起点。在,这一层命名为“fc1000”。使用这一层我们提取训练功能。

featureLayer =“fc1000”;trainingFeatures =激活(净、augmentedTrainingSet featureLayer,“MiniBatchSize”32岁的“OutputAs”,“列”);

注意,激活函数自动使用GPU处理如果是可用的,否则,使用一个CPU。

在上面的代码中,“MiniBatchSize”设置32 CNN和图像数据,以确保适合GPU内存。你可能需要降低“MiniBatchSize”如果你的GPU耗尽内存。此外,激活输出安排列。这有助于加速多级线性支持向量机训练。

训练多类SVM分类器使用CNN特性

接下来,使用CNN图像特征来训练一个多类支持向量机分类器。快速随机梯度下降法解算器是用来训练通过设置fitcecoc函数的参数“线性”“学习者”。这有助于加速训练CNN在处理高维特征向量。

%得到培训从trainingSet标签trainingLabels = trainingSet.Labels;%的火车多类支持向量机分类器使用一个快速线性规划求解,并设置%“ObservationsIn”“列”匹配用于培训的安排%的特性。分类器= fitcecoc (trainingFeatures trainingLabels,“学习者”,“线性”,“编码”,“onevsall”,“ObservationsIn”,“列”);

评估分类器

重复使用的程序之前提取图像特征testSet。测试功能可以被传递到分类器测量的准确性训练分类器。

使用CNN %提取测试功能testFeatures =激活(净、augmentedTestSet featureLayer,“MiniBatchSize”32岁的“OutputAs”,“列”);%通过CNN图像特征训练分类器testFeatures predictedLabels =预测(分类器,“ObservationsIn”,“列”);%得到已知的标签testLabels = testSet.Labels;%使用混淆矩阵汇总结果。confMat = confusionmat (testLabels predictedLabels);%混淆矩阵转化为百分比的形式confMat = bsxfun (@rdivide confMat, sum (confMat, 2))
confMat =5×50.8571 0.0286 0.0286 0.0714 0.0143 0.0571 0.8286 0.0571 0.0571 0.0143 0 0 0 0.7714 0.0714 0.1429 0.0286 0.0571 0.0571 0.8000 0.0571 0.2000 0.0286 0.7714
%显示平均精度意思是(诊断接头(confMat))
ans = 0.8057

在一个测试图像上应用训练分类器

应用训练的分类器进行分类的新图像。读的一个“黛西”测试图像。

testImage = readimage (testSet, 1);testLabel = testSet.Labels (1)
testLabel =分类黛西

使用CNN提取图像特征。

%创建augmentedImageDatastore时自动调整图像使用激活%图像特征提取。ds = augmentedImageDatastore (testImage图象尺寸,“ColorPreprocessing”,“gray2rgb”);使用CNN %提取图像特征featureLayer imageFeatures =激活(净,ds,“OutputAs”,“列”);

使用分类器作出预测。

使用分类器%作出预测imageFeatures predictedLabel =预测(分类器,“ObservationsIn”,“列”)
predictedLabel =分类黛西

引用

[1]邓小平,贾,et al。“Imagenet:大规模的分层图像数据库。”Computer Vision and Pattern Recognition, 2009. CVPR 2009. IEEE Conference on. IEEE, 2009.

[2]Krizhevsky,亚历克斯,Ilya Sutskever和杰弗里·e·辛顿。“Imagenet与深卷积神经网络分类。”Advances in neural information processing systems. 2012.

[3]Simonyan,凯伦和安德鲁Zisserman。“很深的卷积网络大规模图像识别。”arXiv预印本arXiv: 1409.1556 (2014)。

多纳休[4],杰夫,et al。“脱咖啡因:深卷积激活特性通用视觉识别。”arXiv预印本arXiv: 1310.1531 (2013)。

[5]Tensorflow:如何为新类别重新培训一个图像分类器

另请参阅

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

相关的话题