<用于医学成像的深度学习:…<前一 回顾2019年>下一个> 基于深度学习的场景分类 发布的Johanna Pingel,2019年11月25日 82次(过去30天 0喜欢| 0评论 这是来自总局品牌博士也是FAU的工程与计算机科学教授,当然MathWorks的博客也因他的文章而闻名图像增强.他回来谈论场景分类,有很棒的代码供你尝试。你也可以在Twitter上关注他(@ProfessorOge) 自动场景分类(有时称为场景 识别,或场景 分析)是计算机视觉中一个长期存在的研究问题,它包括根据图像的整体内容,为输入的图像分配一个标签,如“海滩”、“卧室”或简单地“室内”或“室外”。在这篇博文中,我将向你展示如何设计和实现一个计算机视觉解决方案,它可以将一个场景的图像分类成它的图像类别(浴室,厨房,阁楼,或卧室室内;种秣草地,海滩,操场上,或森林(图1)使用深度神经网络。 森林 卧室 厨房 种秣草地 阁楼 海滩 操场上 浴室 图1:来自MIT Places数据集[1]及其对应类别的图像示例。首先,让我来指导你通过人类的场景识别的基础知识和使用计算机视觉的场景识别的历史。 人类场景识别为了便于讨论,让我们使用a的有效定义场景作为“一种观点”真实的环境包含多个表面和物体,在一个组织有意义的方式。"[2]人类能够在十分之一秒或更短的时间内识别和分类场景,这多亏了我们捕捉场景的能力要点尽管这通常意味着错过了许多细节[3].例如,我们可以分辨出a的像浴室从一个卧室很快,但如果被问到场景的具体细节(例如,你看到了多少床头柜/水槽?) 计算机视觉中的场景识别,在深度学习前后在深度学习之前,早期的工作包括设计和实现基于非常低维的场景表示的整体场景识别计算模型,称为其空间信封 [3].这也使我们能够访问重要的数据集(例如Places365 [1]),是深度学习在场景识别研究中取得成功的关键。的训练集Places365-Standard拥有来自365个场景类别的约180万张图片,每个类别多达5000张图片。深度学习,特别是卷积神经网络(CNNs)在场景分类中的应用受到了计算机视觉界的广泛关注[4].几个基线cnn预先训练Places365-Standard数据集可在https://github.com/CSAILVision/places365. 在MATLAB中使用深度学习进行场景识别接下来,我想展示如何使用MIT Places数据集的子集实现场景分类解决方案[1]和一个预先训练过的模型,Places365GoogLeNet(5、6).为了最大化学习经验,我们将建立、培训和评估不同的cnn,并比较结果。在“第一部分”中,我们将从头开始构建一个简单的CNN,训练它,并评估它。在“第二部分”,我们将使用一个预先训练的模型,Places365GoogLeNet,“as is”。在“第三部分”中,我们跟随a转移学习该方法演示了使用MATLAB中的迁移学习进行图像分类的一些最新特性和最佳实践。最后,在“第4部分”中,我们将使用图像数据增强技术来看看它们是否会导致改进的结果。 数据准备 我们建立一个ImageDatastore包含8个文件夹(对应于8个类别:“阁楼”,“浴室”,“海滩”,“卧室”,“森林”,“牧场”,“厨房”和“操场”),每个文件夹有1000张图片。 我们将数据分成训练集(70%)和验证集(30%)。 我们创建一个augmentedImageDatastore为了处理图像的大小调整,指定训练图像和输出图像的大小,这些大小必须与神经网络的输入层所期望的大小一致。这比运行批处理图像调整(并将调整后的图像保存回磁盘)更加优雅和高效。 创建图像数据存储imd = imageDatastore (fullfile(“MITPlaces”),…IncludeSubfolders,没错,‘FileExtensions’,‘jpg’,‘LabelSource’,‘foldernames’);计算每个标签的图像数量,并保存类的数量labelCount = countEachLabel (imd);numClasses =身高(labelCount);创建培训和验证集[imdfiltering, imdsValidation] = splitachlabel (imds, 0.7); / /显示当前信息使用图像数据增强处理调整大小的原始图像是256 × 256。本例中使用的cnn的输入层期望它们是224 × 224。inputSize = (224224 3);augimdsTraining = augmentedImageDatastore (inputSize (1:2), imdsTraining);augimdsValidation = augmentedImageDatastore (inputSize (1:2), imdsValidation); 模型开发-第1部分(从头开始构建和培训CNN)我们从头开始构建一个简单的CNN(图3),指定它的训练选项,训练它,并评估它。定义层层= [imageInputLayer ([224 224 3]) convolution2dLayer(3 16“填充”,1)batchNormalizationLayer reluLayer maxPooling2dLayer(2“大步”2)convolution2dLayer(3, 32岁的“填充”,1)batchNormalizationLayer reluLayer maxPooling2dLayer(2“大步”2)convolution2dLayer(64,“填充”,1)batchNormalizationLayer reluLayer fullyConnectedLayer (8)softmaxLayer classificationLayer];指定培训选项选择= trainingOptions(“个”,…“MaxEpochs”,30岁的……ValidationData, augimdsValidation,……“ValidationFrequency”,50岁,…“InitialLearnRate”,0.0003,…“详细”,假的,…“阴谋”,“训练进步”);列车网络的baselineCNN = trainNetwork (augimdsTraining层,选项);分类和计算精度predictedLabels =分类(baselineCNN augimdsValidation);valLabels = imdsValidation.Labels;baselineCNNAccuracy = sum(predictedLabels == valLabels)/numel(valLabels); 图3:在“第一部分”中使用的CNN基线。 图4:基线CNN学习曲线。注意过拟合的迹象:训练数据的准确性和损失在不断提高,但验证数据集的准确性和损失已经持平。不出所料,网络的精度适中(~60%),并且存在过拟合问题(图4)。 模型开发-第2部分(使用预先训练的模型,Places365GoogLeNet,“as is”)我们使用预先训练过的模型,Places365GoogLeNet“是”。由于该模型已被训练为365类分类器,其性能将是次优的(验证精度~53%),部分原因是在某些情况下,该模型预测相关/更具体的类别,比本练习中选择的8个类别中的任何一个更有信心(图5)。加载预先训练的Places365GoogLeNet,下载并安装用于GoogLeNet网络支持包的深度学习工具箱模型。金宝app看到//www.tatmou.com/help/deeplearning/ref/googlenet.html的指令。places365Net = googlenet(“权重”,“places365”);分类和计算精度YPred =分类(places365Net augimdsValidation);YValidation = imdsValidation.Labels;places365NetAccuracy = sum(YPred == YValidation)/numel(YValidation); / /指定正确位置 图5:使用预先训练的CNN“按原样”:由于预测类似(或更具体)的类而导致的分类错误示例。 模型开发-第3部分(迁移学习)我们现在要遵循一个原则转移学习的方法。我们首先定位最后的可学习层和分类层使用layerGraph和findLayersToReplace. lgraph = layerGraph (places365Net);[learnableLayer, classLayer] = findLayersToReplace (lgraph);[learnableLayer, classLayer]接下来,我们用适当的等效层替换它们(参见[7]),用两次调用来替换layer来更新网络的图,同时使用freezeWeights冻结初始层(即,设置这些层的学习速率为零):冻结初始层的权重可以显著加快网络训练,并且,由于我们的新数据集很小,也可以防止那些层与新数据集过度拟合。[7] newLayer = fulllyconnectedlayer (numClasses,…“名称”、“new_fc’,……“WeightLearnRateFactor”10…“BiasLearnRateFactor”,10);lgraph = replaceLayer (lgraph learnableLayer.Name newLayer);newClassLayer = classificationLayer(“名字”,“new_classoutput”);lgraph = replaceLayer (lgraph classLayer.Name newClassLayer);冻结初始层层= lgraph.Layers;连接= lgraph.Connections;层(1:10)= freezeWeights(层(1:10));lgraph = createLgraphUsingConnections(层,连接);然后我们训练网络并在验证集上评估分类准确率:~95%。由此产生的混淆矩阵(图6)让我们进一步了解了模型更频繁地错误分类的类别——在本例中,浴室场景被分类为厨房(18例),卧室场景被标记为阁楼(12例)。图6:使用预先训练的模型Places365GoogLeNet的场景分类解决方案的混淆矩阵,以及迁移学习的最佳实践。在检查一些错误分类的图像时,你会发现它们是由错误的标签、模糊的场景和“非标志性”图像组合而成的[8](图7)。 图7:重新训练的Places365GoogLeNet分类错误的例子,原因(从左到右):错误的标签,模糊的场景(阁楼的卧室),和“非标志性”的图像。 模型开发-第4部分(数据扩展)我们使用数据增强(详细介绍)在我之前的文章中 [9])指定另一个 augmentedImageDatastore(它使用可能通过左右翻转、翻译和缩放随机处理的图像)作为数据源trainNetwork函数。由此产生的分类准确率和混淆矩阵与未经数据增广的结果几乎相同,这并不令人惊讶,因为我们对分类错误(如图7所示)的分析表明,我们的模型预测偶尔不正确(错误的标签、场景中的歧义和“非标志性”图像)的原因并没有通过提供额外的变化(缩放、翻转、在训练过程中,将每个图像转换为模型。这加强了Andrew Ng的建议,即在决定最佳改进方法之前,先花时间进行人为错误分析,并列出机器学习解决方案中错误背后的原因[10].完整的代码和图像可在MATLAB文件交换[11].您可以对其进行调整,以使用不同的预训练cnn、数据集和/或模型参数和超参数。如果你做了,在评论部分给我们留言,告诉我们你做了什么以及它的效果如何。总之,这篇博客文章展示了如何使用MATLAB和深度神经网络对公开数据集的图像进行场景分类。下面的参考资料提供了链接,以了解更多细节。 参考文献 B. Zhou, A. Lapedriza, A. Khosla, A. Oliva, A. Torralba,“地点:用于场景识别的1000万图像数据库”,IEEE模式分析与机器智能学报,2017。http://places2.csail.mit.edu/ [2] A. Oliva,《视觉场景感知》,http://olivalab.mit.edu/Papers/VisualScenePerception-EncycloPerception-Sage-Oliva2009.pdf [3] A. Oliva和A. Torralba(2001)。“场景形状的建模:空间包络的整体表示”,《计算机视觉国际期刊》,第42卷(3):145-175。论文,数据集和MATLAB代码可在:http://people.csail.mit.edu/torralba/code/spatialenvelope/ B. Zhou, A. Lapedriza, J. Xiao, A. Torralba, and A. Oliva, "Learning Deep feature for Scene Recognition using Places Database," NIPS 2014 [5] MathWorks。googlenet:预训练的googlenet卷积神经网络。//www.tatmou.com/help/deeplearning/ref/googlenet.html [6] MathWorks。Pretrained Places365GoogLeNet卷积神经网络(代码)//www.tatmou.com/matlabcentral/fileexchange/70987-deep-learning-toolboxtm-model-for-places365-googlenet-network [7] MathWorks。“训练深度学习网络分类新图像”。//www.tatmou.com/help/deeplearning/examples/train-deep-learning-network-to-classify-new-images.html 林宗毅,等。“Microsoft COCO:环境中的常见对象。”计算机视觉欧洲会议。施普林格可汗,2014。 [9] O. Marques,“基于深度学习的图像分类应用数据增强”,https://blogs.mathworks.com/deep-learning/2019/08/22/data-augmentation-for-image-classification-applications-using-deep-learning/ [10] A. Ng,《机器学习的渴望》https://www.deeplearning.ai/machine-learning-yearning/ [11] Oge Marques(2019)。基于深度学习的场景分类(//www.tatmou.com/matlabcentral/fileexchange/73333-scene-classification-using-deep-learning), MATLAB中央文件交换。 | 你现在正在关注这篇博文 您将在您的活动提要. 你可能会收到电子邮件,这取决于你的通知偏好. 类别: 深度学习 <用于医学成像的深度学习:…<前一 回顾2019年>下一个> 另请参阅 图像分类的深度学习 博客 深度学习网络分析仪 博客 基于深度学习的语义分割 博客 使用预训练网络进行迁移学习 用于Places365-GoogLeNet网络的深度学习工具箱模型 训练深度学习网络对新图像进行分类 评论 要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。