<医学影像学深度学习:。。。<前一 回顾2019年>下一个> 基于深度学习的场景分类 邮寄人Johanna Pingel,2019年11月25日 84个视图(过去30天)| 0喜欢| 0评论 这是一篇来自Oge Marques博士也是FAU的工程与计算机科学教授,当然MathWorks的博客也因他的文章而闻名图像增强.他回来谈论场景分类,有很棒的代码供你尝试。你也可以在Twitter上关注他(@ProfessorOge) 自动场景分类(有时称为场景 认出或场景 分析)是计算机视觉中一个长期存在的研究问题,它包括根据图像的整体内容为作为输入显示的图像指定一个标签,如“海滩”、“卧室”或简单的“室内”或“室外”。在这篇博文中,我将向您展示如何设计和实现一个计算机视觉解决方案,该解决方案可以将场景的图像分类为不同的类别类别(浴室,厨房,阁楼或卧室室内用;种秣草地,海滩,游戏场或森林(图1)使用深度神经网络。 森林 卧室 厨房 种秣草地 阁楼 海滩 游戏场 浴室 图1:MIT Places数据集[1]及其相应类别的图像示例。首先,让我来指导你通过人类的场景识别的基础知识和使用计算机视觉的场景识别的历史。 场景识别为了便于讨论,让我们使用a的有效定义场景作为“一种观点”真实的环境包含多个曲面和对象,在一个组织有意义的方式。"[2]人类能够在十分之一秒或更短的时间内识别和分类场景,这要归功于我们捕捉场景的能力主旨尽管这通常意味着错过了许多细节[3].例如,我们可以分辨出a的像浴室从一个卧室很快,但如果被问及(在图像不再可见后)场景的细节(例如,你看到了多少床头柜/水槽?),你会目瞪口呆 计算机视觉中的场景识别,在深度学习前后在深度学习之前,早期的工作包括设计和实现基于非常低维的场景表示的整体场景识别计算模型,称为其空间包络 [3]. 这也让我们能够访问重要的数据集(例如Places365 [1]),是深度学习在场景识别研究中取得成功的关键。的训练集地点365标准拥有来自365个场景类别的约180万张图片,每个类别多达5000张图片。深度学习,特别是卷积神经网络(CNNs)在场景分类中的应用受到了计算机视觉界的广泛关注[4].几个基线cnn预先训练地点365标准数据集可在https://github.com/CSAILVision/places365. 基于MATLAB的深度学习场景识别接下来,我想展示如何使用MIT Places数据集的子集实现场景分类解决方案[1]还有一个训练前的模型,Places365GoogLeNet(5、6).为了最大化学习经验,我们将建立、培训和评估不同的cnn,并比较结果。在“第一部分”中,我们将从头开始构建一个简单的CNN,训练它,并评估它。在“第二部分”,我们将使用一个预先训练的模型,Places365GoogLeNet,“as is”。在“第三部分”中,我们跟随a转移学习该方法演示了在MATLAB中使用转移学习进行图像分类的一些最新特性和最佳实践。最后,在“第4部分”中,我们使用图像数据增强技术来查看它们是否会导致改进的结果。 数据准备 我们建立了一个ImageDatastore由八个文件夹组成(对应于八个类别:“阁楼”、“浴室”、“海滩”、“卧室”、“森林”、“干草场”、“厨房”和“操场”),每个文件夹有1000张图像。 我们将数据分成训练集(70%)和验证集(30%)。 我们创建一个增强图像数据存储为了处理图像的大小调整,指定训练图像和输出图像的大小,这些大小必须与神经网络的输入层所期望的大小一致。这比运行批处理图像调整(并将调整后的图像保存回磁盘)更加优雅和高效。 创建图像数据存储imds=imageDatastore(fullfile('MITPlaces'),…'IncludeSubfolders',true,'FileExtensions','.jpg','LabelSource','foldernames');计算每个标签的图像数并保存类别数labelCount=计数每个标签(imds);numClasses=高度(标签计数);创建培训和验证集[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),指定它的训练选项,训练它,并评估它。定义图层layers=[imageInputLayer([224224 224 3])卷积2层(3,16,'Padding',1)批次规格化层reluLayer MaxPoolig2层(2,'Stride',2)卷积2层(3,32,'Padding',1)批次规格化层reluLayer MaxPoolig2层(2,'Stride',2)卷积2层(3,64,'Padding',1)批次规格化层reluLayer fullyConnectedLayer(8)softmaxLayer分类层];指定培训选项选项=培训选项('sgdm','MaxEpochs',30,'ValidationData',augimdsValidation,'ValidationFrequency',50,'InitialLearnRate',0.0003,'Verbose',false,'Plots','training-progress');列车网络的基线CNN=列车网络(AUGIMDSTRAIN、图层、选项);分类和计算精度predictedLabels =分类(baselineCNN augimdsValidation);valLabels = imdsValidation.Labels;baselineCNNAccuracy = sum(predictedLabels == valLabels)/numel(valLabels); 图3:在“第一部分”中使用的CNN基线。 图4:基线CNN的学习曲线。请注意过度拟合的迹象:训练数据的准确性和丢失率不断提高,但验证数据集的准确性和丢失率已经降低。不出所料,网络的精度适中(~60%),并且存在过拟合问题(图4)。 模型开发-第2部分(使用预先训练的模型,Places365GoogLeNet,“as is”)我们使用预训练模型,地点365Googlenet“原样”。由于该模型已被训练为365类分类器,其性能将处于次优状态(验证准确度~53%),部分原因是该模型预测相关/更具体类别的置信度高于为本练习选择的8个类别中的任何一个(图5)。加载预先训练的Places365GoogLeNet,下载并安装用于GoogLeNet网络支持包的深度学习工具箱模型。万博1manbetx看到//www.tianjin-qmedu.com/help/deeplearning/ref/googlenet.html的指令。places365Net=googlenet('Weights','places365');分类和计算精度YPred=分类(places365Net,augimdsvalization);YValidation=imdsValidation.Labels;places365NetAccuracy=sum(YPred==YValidation)/numel(YValidation); 图5:使用预先训练的CNN“按原样”:由于预测类似(或更具体)的类而导致的分类错误示例。 模型开发-第3部分(迁移学习)我们现在要遵循一个原则转移学习我们首先使用分层图和FindlayerStore酒店. LGRAPHE=层图(places365Net);[learnableLayer,classLayer]=FindLayerStore(lgraph);[可学习层,类层]接下来,我们用适当的等效层替换它们(参见[7]),通过对replaceLayer的两次调用更新网络图,同时使用冻结权重冻结初始层(即,将这些层中的学习率设置为零):冻结初始层的权重可以显著加快网络训练,并且,由于我们的新数据集很小,还可以防止这些图层过度拟合到新数据集。[7] newLayer=fullyConnectedLayer(numclass、'Name'、'new_fc'、…'WeightLearnRateFactor',10、'BiasLearnRateFactor',10);lgraph=replaceLayer(lgraph,learnableLayer.Name,newLayer);newClassLayer=classificationLayer('Name','new_classoutput');lgraph=replaceLayer(lgraph,classLayer.Name,newClassLayer);冻结初始层layers=lgraph.layers;connections=lgraph.connections;layers(1:10)=冻结权重(layers(1:10));lgraph=createLgraphUsingConnections(layers,connections);然后,我们训练网络,并在验证集上评估分类精度:~95%。由此产生的混淆矩阵(图6)为我们提供了关于模型更频繁地错误分类哪些类别的额外见解——在本例中,浴室场景被分类为厨房(18个实例)和卧室场景被标记为阁楼(12个实例)。图6:使用预先训练的模型Places365GoogLeNet的场景分类解决方案的混淆矩阵,以及迁移学习的最佳实践。在检查一些错误分类的图像后,您可以看到它们是由不正确的标签、模糊的场景和“非标志性”图像组合而成的[8](图7)。 图7:重新训练的Places365GoogLeNet分类错误的例子,原因(从左到右):错误的标签,模糊的场景(阁楼的卧室),和“非标志性”的图像。 模型开发–第4部分(数据扩充)我们采用数据扩充(详细介绍在我之前的文章中 [9])指定另一个 增强图像数据存储(它使用可能通过左右翻转、翻译和缩放随机处理的图像)作为数据源列车网络函数。由此产生的分类准确率和混淆矩阵与未经数据增广的结果几乎相同,这并不令人惊讶,因为我们对分类错误(如图7所示)的分析表明,我们的模型预测偶尔不正确(错误的标签、场景中的歧义和“非标志性”图像)的原因并没有通过提供额外的变化(缩放、翻转、在训练过程中,将每个图像转换为模型。这加强了Andrew Ng的建议,即在决定最佳改进方法之前,先花时间进行人为错误分析,并列出机器学习解决方案中错误背后的原因[10].完整的代码和图像可在MATLAB文件交换中获得[11]. 您可以调整它以使用不同的预训练CNN、数据集和/或模型参数和超参数。如果您这样做了,请在评论部分给我们留言,告诉我们您做了什么以及它的工作效果如何。总而言之,这篇博文展示了如何使用MATLAB和深度神经网络对来自公开数据集的图像执行场景分类。下面的参考资料提供了有关材料的链接,以了解更多详细信息。 参考文献 [1] 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/ [4] B.Zhou,A.Lapedriza,J.Xiao,A.Torralba和A.Oliva,“使用位置数据库学习场景识别的深层特征”,NIPS 2014 [5] MathWorks。googlenet:预训练的googlenet卷积神经网络。//www.tianjin-qmedu.com/help/deeplearning/ref/googlenet.html [6] MathWorks。Pretrained Places365GoogLeNet卷积神经网络(代码)//www.tianjin-qmedu.com/matlabcentral/fileexchange/70987-deep-learning-toolboxtm-model-for-places365-googlenet-network [7] MathWorks。“训练深度学习网络分类新图像”。//www.tianjin-qmedu.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.tianjin-qmedu.com/matlabcentral/fileexchange/73333-scene-classification-using-deep-learning), MATLAB中央文件交换。 | 您现在正在关注这篇博文 您将在中看到更新活动提要. 你可能会收到电子邮件,这取决于你的通知偏好. 类别: 深度学习 <医学影像学深度学习:。。。<前一 回顾2019年>下一个> 另请参阅 图像分类的深度学习 博客 深度学习网络分析仪 博客 基于深度学习的语义分割 博客 基于预训练网络的迁移学习 基于深度学习的场景分类 训练深度学习网络对新图像进行分类 评论 如需留言,请点击在这里登录到您的MathWorks帐户或创建新帐户。