火车深入学习网络对新图像进行分类
这个例子展示了如何使用转移学习再教育卷积神经网络对一组新的图像进行分类。
Pretrained图像分类网络一直在训练图像和可以分类图像到1000年超过一百万对象类别,如键盘、咖啡杯、铅笔,和许多动物。网络学到丰富的特性表现为广泛的图像。网络需要一个图像作为输入,然后输出图像中对象的标签一起为每个对象的类别的概率。
在深度学习应用程序转移学习是常用的。pretrained网络,可以使用它作为一个起点,学习一个新任务。微调网络转移学习通常是快得多,也更容易比从头开始训练一个网络随机初始化权重。您可以快速学习功能转移到一个新的任务使用较少的训练图像。
加载数据
解压缩和加载新的图像作为图像数据存储。这个非常小的数据集只包含75张图片。将数据分为训练和验证数据集。使用70%的图片,培训为30%,验证。
解压缩(“MerchData.zip”);imd = imageDatastore (“MerchData”,…“IncludeSubfolders”,真的,…“LabelSource”,“foldernames”);[imdsTrain, imdsValidation] = splitEachLabel (imd, 0.7);
负载Pretrained网络
加载一个pretrained GoogLeNet网络。如果深度学习工具箱™模型GoogLeNet网络万博1manbetx支持包没有安装,那么软件提供一个下载链接。
尝试不同的pretrained网络,打开这个例子在MATLAB®和选择一个不同的网络。例如,您可以试一试squeezenet
一个网络,甚至超过googlenet
。你可以运行这个例子与其他pretrained网络。所有可用网络列表,请参阅负载Pretrained网络。
网=googlenet;
使用analyzeNetwork
显示一个交互式可视化的网络体系结构和网络层的详细信息。
analyzeNetwork(净)
的第一个元素层
网络的属性是图像输入层。GoogLeNet网络,这一层需要输入的图像大小224 - 224 - 3,3是颜色通道的数量。其他网络需要输入具有不同大小的图像。例如,Xception网络需要的图片大小299 - 299 - 3。
net.Layers (1)
ans = ImageInputLayer属性:名称:“数据”InputSize: [224 224 3] Hyperparameters DataAugmentation:“没有”正常化:“zerocenter”NormalizationDimension:“汽车”的意思是:(224×224×3个)
inputSize = net.Layers (1) .InputSize;
取代最后一层
网络的卷积层提取图像特征,最后可学的一层一层和最后的分类使用对输入图像进行分类。这两个层,“loss3-classifier”
和“输出”
GoogLeNet,包含的信息如何结合网络特性,提取类概率,损失价值,预测标签。再培训pretrained网络分类的新图像,用新的替换这两个层层适应新的数据集。
训练网络转换成一层图。
lgraph = layerGraph(净);
发现两层的名称来代替。你可以手动或您可以使用支持功能万博1manbetxfindLayersToReplace自动发现这些层。
[learnableLayer, classLayer] = findLayersToReplace (lgraph);[learnableLayer, classLayer]
ans = 1×2层阵列层:1000“loss3-classifier”完全连接完全连接层2“输出”分类输出crossentropyex“鲤鱼”和999其他的类
在大多数网络,可学的重量的最后一层是一个完全连接层。用一个新的替换这个完全连接层完全连接层与输出的数量等于新数据集类的数量(在本例中)。在一些网络,如SqueezeNet,最后可学的层是1×1卷积层。在这种情况下,将卷积层替换为一个新的卷积层过滤器的数量等于类的数量。更快地学习新层的传输层,提高学习速率的因素层。
numClasses =元素个数(类别(imdsTrain.Labels));如果isa (learnableLayer“nnet.cnn.layer.FullyConnectedLayer”)newLearnableLayer = fullyConnectedLayer (numClasses,…“名字”,“new_fc”,…“WeightLearnRateFactor”10…“BiasLearnRateFactor”10);elseifisa (learnableLayer“nnet.cnn.layer.Convolution2DLayer”)newLearnableLayer = convolution2dLayer (1 numClasses…“名字”,“new_conv”,…“WeightLearnRateFactor”10…“BiasLearnRateFactor”10);结束lgraph = replaceLayer (lgraph learnableLayer.Name newLearnableLayer);
网络的分类层指定输出类。用一个新的替换分类层没有类标签。trainNetwork
自动设置输出类层的训练时间。
newClassLayer = classificationLayer (“名字”,“new_classoutput”);lgraph = replaceLayer (lgraph classLayer.Name newClassLayer);
检查新层连接正确,情节新图层图表和放大的最后一层网络。
图(“单位”,“归一化”,“位置”(0.3 - 0.3 0.4 - 0.4));情节(lgraph) ylim ([0, 10])
冻结初始层
网络现在已经准备好被重新训练的新图像。可选地,您可以“冻结”早些时候层网络的权重通过设置在这些层学习率为零。在培训期间,trainNetwork
不会更新冻层的参数。因为冰冻的梯度层不需要计算,冻结许多初始层的权重可以显著加快网络训练。如果新数据集很小,然后冻结之前网络层可以防止这些层过度拟合到新的数据集。
提取层和连接层的图形和选择层冻结。在GoogLeNet,第十层网络的初始“茎”。使用支持函数万博1manbetxfreezeWeights设置学习利率为零在第十层。使用支持函数万博1manbetxcreateLgraphUsingConnections重新连接所有层的原始订单。新图层图表包含相同的层,但在学习的早期层设置为0。
层= lgraph.Layers;连接= lgraph.Connections;层(1:10)= freezeWeights(层(1:10));lgraph = createLgraphUsingConnections(层,连接);
列车网络的
网络需要输入的图像大小224 - 224 - 3,但图像的图像数据存储有不同的大小。使用一个增强图像数据存储图像自动调整训练。指定额外增加操作执行培训图片:随机翻转训练图像沿垂直轴和随机翻译他们30像素和规模高达10%的水平和垂直。数据增加有助于防止网络过度拟合和记忆的训练图像的细节。
pixelRange = 30 [-30];scaleRange = (0.9 - 1.1);imageAugmenter = imageDataAugmenter (…“RandXReflection”,真的,…“RandXTranslation”pixelRange,…“RandYTranslation”pixelRange,…“RandXScale”scaleRange,…“RandYScale”,scaleRange);augimdsTrain = augmentedImageDatastore (inputSize (1:2), imdsTrain,…“DataAugmentation”,imageAugmenter);
自动调整验证图像不执行进一步的数据,使用一个增强的图像数据存储不指定任何额外的预处理操作。
augimdsValidation = augmentedImageDatastore (inputSize (1:2), imdsValidation);
指定培训选项。集InitialLearnRate
小价值放慢学习的传输层没有冻结。在前面的步骤中,您过去可学的学习速率因子层增加加速学习在新的最后一层。这种组合的学习速率设置新层,导致快速学习慢学习在中间层,也没有学习在前面,冻层。
指定数量的时代列车。当执行转移学习,你不需要训练尽可能多的时代。一个时代是一个完整的培训周期在整个训练数据集。指定mini-batch大小和验证数据。计算每个时代精度验证一次。
miniBatchSize = 10;valFrequency =地板(元素个数(augimdsTrain.Files) / miniBatchSize);选择= trainingOptions (“个”,…“MiniBatchSize”miniBatchSize,…“MaxEpochs”6…“InitialLearnRate”3的军医,…“洗牌”,“every-epoch”,…“ValidationData”augimdsValidation,…“ValidationFrequency”valFrequency,…“详细”假的,…“阴谋”,“训练进步”);
使用训练数据训练网络。默认情况下,trainNetwork
使用GPU如果一个是可用的。这需要并行计算工具箱™和支持GPU设备。万博1manbetx支持设备的信息,请参阅万博1manbetxGPU计算的需求(并行计算工具箱)。否则,trainNetwork
使用一个CPU。您还可以指定使用的执行环境“ExecutionEnvironment”
名称-值对的观点trainingOptions
。因为数据集是如此之小,训练是快。
网= trainNetwork (augimdsTrain、lgraph选项);
验证图像进行分类
使用调整网络验证图像进行分类,并计算出分类精度。
(YPred,聚合氯化铝)=(网络,augimdsValidation)进行分类;精度=意味着(YPred = = imdsValidation.Labels)
精度= 0.9000
显示四个样本验证图像标签和图像的预测概率预测这些标签。
idx = randperm(元素个数(imdsValidation.Files), 4);图为i = 1:4次要情节(2,2,我)我= readimage (imdsValidation idx (i));imshow(我)标签= YPred (idx (I));标题(string(标签)+”、“+ num2str(100 *马克斯(聚合氯化铝(idx(我),:)),3)+“%”);结束
引用
[1]Szegedy,基督徒,魏Liu Yangqing贾,皮埃尔•Sermanet斯科特•里德Dragomir Anguelov, Dumitru Erhan,文森特Vanhoucke和安德鲁·拉比诺维奇。“更深的曲线玲珑。”在《IEEE计算机视觉与模式识别会议1 - 9页。2015年。
[2]BVLC GoogLeNet模型。https://github.com/BVLC/caffe/tree/master/models/bvlc_googlenet
另请参阅
vgg16
|vgg19
|alexnet
|importCaffeNetwork
|importCaffeLayers
|trainNetwork
|layerGraph
|DAGNetwork
|googlenet
|analyzeNetwork