主要内容

squeezenet

SqueezeNet卷积神经网络

  • SqueezeNet网络体系结构

描述

SqueezeNet卷积神经网络,是18层深。你可以加载一个pretrained版本的网络训练图像从ImageNet数据库超过一百万[1]。pretrained网络可以分类图像到1000年对象类别,如键盘,鼠标,铅笔,和许多动物。因此,网络学习丰富广泛的图像特征表示。这个函数返回一个SqueezeNet v1.1网络,也有类似的准确性SqueezeNet v1.0,但需要更少的浮点操作/预测[3]。的网络图像输入大小227 - 227。在MATLAB pretrained网络®,请参阅Pretrained深层神经网络

您可以使用分类对新的图像使用SqueezeNet网络进行分类。例如,看到的分类图像使用SqueezeNet

你可以再培训SqueezeNet网络使用转让执行新任务的学习。例如,看到的交互式学习使用SqueezeNet转移

例子

= squeezenet返回一个SqueezeNet ImageNet上网络训练数据集。

= squeezenet(“权重”,“imagenet”)返回一个在ImageNet SqueezeNet网络训练数据集,这个语法相当于网= squeezenet

lgraph= squeezenet(“权重”,“没有”)返回未经训练的SqueezeNet网络体系结构。

例子

全部折叠

加载一个pretrained SqueezeNet网络。

网= squeezenet
网= DAGNetwork属性:层:[68×1 nnet.cnn.layer.Layer]连接:(75×2表)

这个函数返回一个DAGNetwork对象。

在深度学习工具箱™SqueezeNet包含。加载其他网络,使用等功能googlenet要从插件下载pretrained网络浏览器的链接。

这个例子显示了如何调整pretrained SqueezeNet网络分类新图片的集合。这个过程称为转移学习和通常比训练一个新的网络快得多,也更容易,因为你可以学到特性应用于一个新的任务使用较少的训练图像。准备一个传输网络学习交互,使用深度网络设计师。

提取数据

在工作区中,提取MathWorks营销数据集。这是一个小数据集包含75的图像MathWorks商品,属于五个不同的类(,多维数据集,打牌,螺丝刀,火炬)。

解压缩(“MerchData.zip”);

打开SqueezeNet深陷网络设计师

开放的网络设计师SqueezeNet深处。

deepNetworkDesigner (squeezenet);

深层网络设计师显示缩放视图的整个网络设计师窗格。

探索网络图。放大用鼠标,使用Ctrl+滚轮。锅,使用箭头键或按住并拖动鼠标的滚轮。选择一个图层查看其属性。取消选择所有图层来查看网络总结属性窗格。

导入数据

将数据加载到深层网络设计师,在数据选项卡上,单击导入数据>导入图像数据。导入图像数据对话框打开。

数据源列表中,选择文件夹。点击浏览并选择提取MerchData文件夹。

将数据分为训练数据70%和30%的验证数据。

指定训练图像增强操作执行。对于这个示例,应用随机反射轴,一个随机的旋转范围(-90、90)度,和一个随机重新调节范围[1,2]。数据增加有助于防止网络过度拟合和记忆的训练图像的细节。

点击进口将数据导入到深层网络设计师。

可视化数据

使用深度网络设计师,可以直观地检查的培训和验证数据的分布数据选项卡。您还可以查看随机观察和训练前标签作为一个简单的检查。你可以看到,在这个例子中,有五类的数据集。

学习编辑网络传输

网络的卷积层提取图像特征,最后可学的一层一层和最后的分类使用对输入图像进行分类。这两个层,“conv10”“ClassificationLayer_predictions”SqueezeNet,包含的信息如何结合网络特性,提取类概率,损失价值,预测标签。再培训pretrained网络分类的新图像,用新的替换这两个层层适应新的数据集。

在大多数网络,可学的重量的最后一层是一个完全连接层。在一些网络,如SqueezeNet,最后可学的一层一层是最后的卷积。在这种情况下,将卷积层替换为一个新的卷积层过滤器的数量等于类的数量。

设计师窗格中,拖一个新的convolution2dLayer到画布上。匹配原始卷积层,集FilterSize1,- 1。改变NumFilters在新数据类的数量,在这个例子中,5

改变利率,这样学习是学习更快的新层的传输层的设置WeightLearnRateFactorBiasLearnRateFactor10。删除最后一个二维卷积层和连接你的新层。

替换输出层。滚动到结束的层的图书馆并拖动一个新的classificationLayer到画布上。删除原来的输出层和连接你的新层。

检查网络

确保你的编辑网络准备训练,点击分析并确保深度学习网络分析仪报道,零错误。

列车网络的

指定培训选项。选择培训选项卡并单击培训方案

  • 设置初始学习速率减缓学习在一个较小的值传输层。

  • 指定验证频率,以便验证数据的准确性是计算一次时代。

  • 指定一个小数量的时代。一个时代是一个完整的培训周期在整个训练数据集。转移学习,你不需要训练尽可能多的时代。

  • 指定mini-batch大小,多少图片在每个迭代中使用。以确保整个数据集在每个时代,设置mini-batch大小均匀划分训练样本的数量。

对于这个示例,集InitialLearnRate0.0001,ValidationFrequency5,MaxEpochs8。有55的观察,集MiniBatchSize11

训练的网络培训指定选项,点击关闭然后点击火车

深层网络设计师允许您可视化和监控培训的进展。然后您可以编辑培训选项和培训网络,如果需要的话。

导出结果,生成MATLAB代码

出口的网络体系结构训练权重,在培训选项卡上,选择出口>出口网络和训练的结果。深层网络设计师出口训练网络的变量trainedNetwork_1和培训信息的变量trainInfoStruct_1

trainInfoStruct_1
trainInfoStruct_1 =结构体字段:TrainingLoss:[1×40双]TrainingAccuracy:[1×40双]ValidationLoss:[3.3420 1.4291 2.1187南南南南南南南南南南南南南南南0.8527 0.5849 0.3967 0.4678南南南南南南南南南南南南南南南南0.3875 0.3749]ValidationAccuracy:[20 30 55.0000南南南南南南南南南南南南南南南65 85年95年95年南南南南南南南南南南南南南南南南95 95]BaseLearnRate:[1×40双]FinalValidationLoss: 0.3749 FinalValidationAccuracy: 95

你也可以生成MATLAB代码,再现了网络和使用培训选项。在培训选项卡上,选择出口>生成代码的训练。检查MATLAB代码来学习如何编程的数据准备培训,创建网络体系结构,和培训网络。

分类新形象

加载一个新的图像分类使用训练网络。

我= imread (“MerchDataTest.jpg”);

深层网络设计师调整图像的大小在训练输入匹配网络的大小。查看网络输入大小,去设计师窗格中,选择imageInputLayer(第一层)。这个网络有一个输入的大小227 - 227。

调整测试图像匹配网络输入的大小。

I = imresize(我,(227 227));

分类测试图像使用训练网络。

(YPred,聚合氯化铝)= (trainedNetwork_1, I)进行分类;imshow (I)标签= YPred;标题(string(标签)+”、“+ num2str(100 *马克斯(聚合氯化铝),3)+“%”);

这个例子显示了如何调整pretrained SqueezeNet卷积神经网络进行分类的新图片的集合。

SqueezeNet已经在超过一百万个图像和训练可以分类图像到1000年对象类别(如键盘、咖啡杯、铅笔,和许多动物)。网络已经学会丰富广泛的图像特征表示。网络需要一个图像作为输入和输出图像中对象的标签一起为每个对象的类别的概率。

在深度学习应用程序转移学习是常用的。pretrained网络,可以使用它作为一个起点,学习一个新任务。微调网络转移学习通常比训练一个网络快得多,也更容易与随机初始化权重从零开始。您可以快速学习功能转移到一个新的任务使用较少的训练图像。

加载数据

解压缩和加载新的图像作为图像数据存储。imageDatastore自动标签图像基于文件夹的名字和存储数据作为ImageDatastore对象。图像数据存储可以存储大量图像数据,包括数据,并不适合在内存中,有效地阅读批图像卷积神经网络在训练。

解压缩(“MerchData.zip”);imd = imageDatastore (“MerchData”,“IncludeSubfolders”,真的,“LabelSource”,“foldernames”);

将数据分为训练和验证数据集。使用70%的图片,培训为30%,验证。splitEachLabel分裂的图片数据存储到两个新的数据存储。

[imdsTrain, imdsValidation] = splitEachLabel (imd, 0.7,“随机”);

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

numTrainImages =元素个数(imdsTrain.Labels);idx = randperm (numTrainImages 16);我= imtile (imd,“帧”,idx);图imshow(我)

图包含一个坐标轴对象。坐标轴对象包含一个类型的对象的形象。

负载Pretrained网络

加载pretrained SqueezeNet神经网络。

网= squeezenet;

使用analyzeNetwork显示一个交互式可视化的网络体系结构和网络层的详细信息。

analyzeNetwork(净)

图像输入层,第一层要求输入的图像大小227 - 227 - 3,3是颜色通道的数量。

.InputSize inputSize = net.Layers (1)
inputSize =1×3227 227 3

取代最后一层

网络的卷积层提取图像特征,最后可学的一层一层和最后的分类使用对输入图像进行分类。这两个层,“conv10”“ClassificationLayer_predictions”SqueezeNet,包含的信息如何结合网络特性,提取类概率,损失价值,预测标签。再培训pretrained网络分类的新图像,用新的替换这两个层层适应新的数据集。

从训练网络提取层图。

lgraph = layerGraph(净);

发现两层的名称来代替。你可以手动或您可以使用支持功能万博1manbetxfindLayersToReplace自动发现这些层。

[learnableLayer, classLayer] = findLayersToReplace (lgraph);[learnableLayer, classLayer]
ans = 1 x2层与层:数组1 conv10卷积1000 1 x1x512旋转步[1]和填充[0 0 0 0]2“ClassificationLayer_predictions”分类输出crossentropyex“鲤鱼”和999其他的类

在大多数网络,可学的重量的最后一层是一个完全连接层。在一些网络,如SqueezeNet,最后可学的层是1×1卷积层。在这种情况下,将卷积层替换为一个新的卷积层过滤器的数量等于类的数量。更快地学习在新的层比传输层,增加WeightLearnRateFactorBiasLearnRateFactor的卷积值层。

numClasses =元素个数(类别(imdsTrain.Labels))
numClasses = 5
newConvLayer = convolution2dLayer (numClasses [1],“WeightLearnRateFactor”10“BiasLearnRateFactor”10“名称”,“new_conv”);lgraph = replaceLayer (lgraph,“conv10”,newConvLayer);

网络的分类层指定输出类。用一个新的替换分类层没有类标签。trainNetwork自动设置输出类层的训练时间。

newClassificatonLayer = classificationLayer (“名字”,“new_classoutput”);lgraph = replaceLayer (lgraph,“ClassificationLayer_predictions”,newClassificatonLayer);

列车网络的

网络需要输入的图像大小227 - 227 - 3,但图像的图像数据存储有不同的大小。使用一个增强图像数据存储图像自动调整训练。指定额外增加操作执行培训图片:随机翻转训练图像沿垂直轴,,随便翻译一下30像素水平和垂直。数据增加有助于防止网络过度拟合和记忆的训练图像的细节。

pixelRange = 30 [-30];imageAugmenter = imageDataAugmenter (“RandXReflection”,真的,“RandXTranslation”pixelRange,“RandYTranslation”,pixelRange);augimdsTrain = augmentedImageDatastore (inputSize (1:2), imdsTrain,“DataAugmentation”,imageAugmenter);

自动调整验证图像不执行进一步的数据,使用一个增强的图像数据存储不指定任何额外的预处理操作。

augimdsValidation = augmentedImageDatastore (inputSize (1:2), imdsValidation);

指定培训选项。转移学习,防止功能的早期层pretrained网络(传输层的重量)。放慢学习的传输层,设置初始学习速率小值。在前面的步骤中,您的学习速率因素增加卷积层加快学习在新的最后一层。这种组合的学习速率设置导致快速学习只有在新的层和慢学习其他层。当执行转移学习,你不需要训练尽可能多的时代。一个时代是一个完整的培训周期在整个训练数据集。指定mini-batch大小11,这样在每个时代你考虑所有的数据。软件验证网络的每一个ValidationFrequency迭代在训练。

选择= trainingOptions (“个”,“MiniBatchSize”11“MaxEpochs”7“InitialLearnRate”2的军医,“洗牌”,“every-epoch”,“ValidationData”augimdsValidation,“ValidationFrequency”3,“详细”假的,“阴谋”,“训练进步”);

训练网络,包括转移和新层。默认情况下,trainNetwork使用GPU如果一个是可用的。这需要并行计算工具箱™和支持GPU设备。万博1manbetx支持设备的信息,请参阅万博1manbetxGPU的万博1manbetx支持版本(并行计算工具箱)。否则,trainNetwork使用一个CPU。您还可以指定使用的执行环境“ExecutionEnvironment”名称-值对的观点trainingOptions

netTransfer = trainNetwork (augimdsTrain、lgraph选项);

图培训进展(26 - 2月- 2022 11:02:41)包含2轴uigridlayout类型的对象和另一个对象。坐标轴对象1包含14块类型的对象,文本行。坐标轴对象2包含14块类型的对象,文本行。

验证图像进行分类

使用调整网络验证图像进行分类。

[YPred,分数]= (netTransfer augimdsValidation)进行分类;

显示四个样本验证图像预测标签。

idx = randperm(元素个数(imdsValidation.Files), 4);图i = 1:4次要情节(2,2,我)我= readimage (imdsValidation idx (i));imshow(我)标签= YPred (idx (I));标题(字符串(标签));结束

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

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

YValidation = imdsValidation.Labels;精度=意味着(YPred = = YValidation)
精度= 1

在提高分类精度的建议,见深度学习技巧和窍门

读取、调整和使用SqueezeNet分类图像。

首先,加载一个pretrained SqueezeNet模型。

网= squeezenet;

读取图像使用imread

我= imread (“peppers.png”);图imshow(我)

图包含一个坐标轴对象。坐标轴对象包含一个类型的对象的形象。

pretrained模型要求图像大小相同的输入网络的大小。确定网络的输入大小使用InputSize网络的第一层的属性。

深圳= net.Layers (1) .InputSize
深圳=1×3227 227 3

调整图像的输入规模网络。

I = imresize(我,深圳(1:2));图imshow(我)

图包含一个坐标轴对象。坐标轴对象包含一个类型的对象的形象。

图像分类使用分类

标签=分类(净,我)
标签=分类甜椒

显示图像和分类结果。

图imshow(我)标题(标签)

图包含一个坐标轴对象。坐标轴对象与标题甜椒包含一个类型的对象的形象。

这个例子展示了如何提取图像特征认识从pretrained卷积神经网络训练图像分类器,并使用这些特性。

特征提取是最简单和最快的方式使用pretrained深层网络的表征能力。例如,您可以使用训练支持向量机(SVM)万博1manbetxfitcecoc(统计和机器学习的工具箱™)提取的特征。因为特征提取只需要一个通过数据,这是一个很好的起点,如果你没有一个GPU加速网络训练。

加载数据

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

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

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

numImagesTrain =元素个数(imdsTrain.Labels);idx = randperm (numImagesTrain 16);我= imtile (imd,“帧”,idx);图imshow(我)

负载Pretrained网络

加载一个pretrained SqueezeNet网络。SqueezeNet培训超过一百万张图片,可以分类图像到1000年对象类别,例如,键盘,鼠标,铅笔,和许多动物。结果,模型已经学会丰富广泛的图像特征表示。

网= squeezenet;

分析网络体系结构。

analyzeNetwork(净)

图像输入层,第一层要求输入的图像大小227 - 227 - 3,3是颜色通道的数量。

.InputSize inputSize = net.Layers (1)
inputSize =1×3227 227 3

提取图像特征

网络结构的层次化表示输入图像。深层包含更高层次特性,构造使用以前的低层次特征层。的训练和测试的特征表示图像,使用激活全球平均池层“pool10”。得到的低水平表示图像,使用早期层网络。

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

augimdsTrain = augmentedImageDatastore (inputSize (1:2), imdsTrain);augimdsTest = augmentedImageDatastore (inputSize (1:2), imdsTest);层=“pool10”;featuresTrain =激活(净、augimdsTrain层,OutputAs =“行”);featuresTest =激活(净、augimdsTest层,OutputAs =“行”);

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

TTrain = imdsTrain.Labels;tt = imdsTest.Labels;

适合图像分类器

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

mdl = fitcecoc (featuresTrain TTrain);

测试图像进行分类

使用训练SVM模型分类测试图像和测试图像的特征提取。

featuresTest YPred =预测(mdl);

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

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

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

精度=意味着(YPred = = tt)
精度= 0.9500

这SVM具有较高的精度。如果使用特征提取精度不够高,然后试着转移学习。

输出参数

全部折叠

Pretrained SqueezeNet卷积神经网络,作为一个返回DAGNetwork对象。

未经训练的SqueezeNet卷积神经网络架构,作为一个返回LayerGraph对象。

引用

[1]ImageNet。http://www.image-net.org

[2]Iandola,福勒斯特N。,Song Han, Matthew W. Moskewicz, Khalid Ashraf, William J. Dally, and Kurt Keutzer. "SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5 MB model size." Preprint, submitted November 4, 2016. https://arxiv.org/abs/1602.07360.

[3]Iandola,福勒斯特N。“SqueezeNet。”https://github.com/forresti/SqueezeNet。

扩展功能

版本历史

介绍了R2018a