作者:Mayank Gubba、Mohammed Faisal、Trapti Kalra、Vijay Pandey
将纹理分析与深度学习结合使用对于在机器视觉任务中取得更好的结果起着重要作用。在第一篇博客中,我们讨论了“纹理”的基础知识、不同类型的纹理以及纹理分析在解决实际计算机视觉任务中的适用性。我们还解释了一些最常用和最值得注意的纹理提取技术,此外,我们还演示了如何将这些纹理提取技术与深度学习结合起来。
深度学习由各种可用于图像分类任务的架构组成。基于深度学习的模型经常用于图像分类任务,并且在许多不同的用例中都表现出了出色的效果,从而展现了其有效性。几年前,迁移学习的概念应运而生,它建议使用用大型数据集训练的模型作为特定用例的主干,其中,使用特定于案例的数据集对预训练的主干模型进行微调,以调整权重来解决特定任务。经过图像分类训练的预训练模型也可用于纹理分类任务。为了检查现有的传统基于 CNN 的纹理分类模型的效率,一些公共的基于纹理的数据集被用来对其性能进行基准测试。据观察,传统的 CNN 架构(如图 5 所示)很难产生理想的结果,并且在应用于纹理分类任务时效果不佳。
目录
1.纹理分类和流行的基于纹理的数据集
2.用于图像分类的传统 CNN
3.什么是预训练模型?
4.流行的预训练模型概述
5.利用和微调预训练模型来满足我们的用例的方法
6.为什么传统的 CNN 架构在基于纹理的数据集的分类任务中表现不佳?
7.参考
一、纹理分类和流行的基于纹理的数据集
在进行地形识别、自动医疗诊断、显微图像分析、自动驾驶汽车和爆炸物危险检测等工作时,纹理分析和分类是一项至关重要的任务。在执行基于分类的任务时,纹理是一个非常重要的属性。我们可以像人类一样直观地看到、理解和区分纹理,但对于基于人工智能的机器来说却并非如此。如果人工智能模型能够识别纹理,那么在应用于分类任务时,它将是一个额外的优势。根据视觉效果理解和分类对象使人工智能模型更加高效和可靠。
因此,我们为纹理分类任务建立了模型,并为了检查其有效性,在基于纹理的基准数据集(如 DTD 、FMD和KTH )上对它们进行了测试。根据任何模型在这些数据集上的准确性,我们可以了解并在一定程度上预测其在其他类似数据集上的表现。下面我们将提供有关上述数据集的详细信息。
- DTD:这是一个基于纹理的图像数据集,包含5640 张图像,根据受人类感知启发的47 个术语(类别)列表进行组织。每个类别有120 幅图像。数据集可在此链接[1]中找到 。
图 1. 来自每个 DTD 类的图像
- KTH:KTH 图像数据库通常被称为 KTH-TIPS(不同光照、姿势和尺度下的纹理),它是为了在两个方向上扩展CUReT 数据库而创建的,通过提供尺度以及姿势和光照的变化,以及通过在不同设置下对其材料子集的其他样本进行成像。总样本量为3195 ,分为11 个类别。数据集可在此链接 [2]中找到。
图 2. KTH-TIPS 数据集的 11 个类别中每个类别的 4 个图像样本
- FMD:该数据库的构建目的在于捕捉各种常见材料(例如玻璃、塑料等)在现实世界中的外观。该数据库中的每幅图像(共10 个类别,每个类别100 幅图像)都是从Flickr.com (根据 Creative Commons 许可)手动选择的,以确保各种照明条件、构图、颜色、纹理和材料子类型。数据集可在此链接 [3]中找到。
图 3. FMD 数据集中每个类别的少量样本
二、用于图像分类的传统 CNN
就现有的传统 CNN 而言,这些大多属于预训练模型本身或使用这些预训练层/权重的模型。在我们的博客中,我们将首先简要概述什么是预训练模型以及如何在图像分类任务中应用它们。
目前,已有多种 CNN 模型被不同的研究人员提出用于图像分类任务,这些模型也可用作许多其他图像分类相关任务的预训练模型。在图 5 中,我们可以看到如何将预训练层整合到传统的基于 CNN 的架构中。
在纹理分类任务中,这些预训练模型也可以通过迁移知识并将其用于基于纹理的数据集来使用。由于这些模型是为某些特定数据集上的图像分类任务而构建的,但我们将它们用于一些不同的数据集进行纹理分类,因此我们将它们称为预训练模型。以下进一步描述了用于图像分类的预训练模型的一些关键思想:
三、什么是预训练模型?
为了简单地定义预训练模型,我们可以称之为由其他人训练并提供给其他开发人员用于特定用例的神经网络模型。
流行的预训练模型通常使用庞大的数据集来训练以解决复杂任务。这些模型随后以开源形式贡献,从而可供其他开发人员进一步构建或在工作中使用。通常,使用预训练模型来解决与其开发预训练模型的目的类似的问题是一个好主意。在图 4中,模型针对源任务进行训练,并且该已经训练过的源模型(预训练模型)的权重用于目标任务。从预训练模型转移权重后,对新开发的模型进行了一些更改,以做出更好、更精确的预测。
图 4.使用预先训练的模型[4]。
使用预训练模型作为计算机视觉和自然语言处理中各种问题的起点非常常见。从头开始构建神经网络需要大量的计算能力、时间和熟练的劳动力。
在这篇博客中,我们将重点介绍预训练模型(针对图像分类任务进行训练)的应用来解决纹理分类任务。
四、流行的预训练模型概述
以下是许多图像分类相关任务中经常使用的预训练模型的简要概述。
-
VGG-16:2015 年发布的最流行的预训练图像分类模型之一。VGG-16 是一个深度为 16 个可调层的神经网络,已在ImageNet 数据库中的 100 万张图像上进行了训练。它能够对 1000 个对象进行分类。
-
Inception v3 :谷歌在同一个ImageNet数据库上开发的预训练模型 。它也被称为GoogLeNet。Inception v3 是一个深度为 50 层的神经网络。2014 年,在ImageNet竞赛中,InceptionV3 赢得了冠军,而 VGG-16 在同一竞赛中获得亚军。它只有 700 万个参数,比以前的模型小得多,除此之外,它的错误率很低,这是该模型的一大成就。
-
ResNet50:原始模型称为残差网络或ResNet;它由微软于 2015 年开发。ResNet 是一个深度为 50 层的神经网络。ResNet50 还对来自ImageNet 数据库的 100 万张图像进行了训练。与 VGG16 相比,ResNet 的复杂度较低,并且在结果方面优于 VGG16。ResNet50 旨在解决梯度消失问题。
-
EfficientNet :这是谷歌于 2019 年训练并向公众发布的最先进的卷积神经网络。在 EfficientNet 中,作者使用了一种称为复合缩放的新缩放方法,其中我们同时将尺寸缩放固定量,并且我们统一执行。通过这样做,我们实现了更好的性能,并且缩放系数可以由用户自己决定。EfficientNet 有 8 种实现(B0 到 B7)。
五、利用和微调预训练模型来满足我们的用例的方法
由于我们处理的数据与预训练模型所用的数据不同,因此需要根据我们的数据更新模型的权重,以学习特定领域的信息。因此,我们需要针对我们的数据对模型进行微调。
下面我们将讨论一些针对特定用例使用预训练模型的机制。
- 特征提取——使用预训练模型作为特征提取机制。我们可以删除输出层(给出属于 1000 个类别的概率的层),然后将整个网络用作新数据集的固定特征提取器。
- 训练某些层,同时冻结其他层——预训练模型可用于部分训练我们的模型,其中我们保持初始层的权重冻结,并重新训练更高层的权重。根据一些实验,我们可以看到有多少层需要冻结,有多少层需要训练。
- 使用预训练模型的架构——我们可以借助模型的架构,并使用它来随机初始化模型的权重。然后,我们可以根据我们的数据集和任务训练模型,这样我们就有了一个良好的架构,经过训练后,我们可以为我们的任务带来良好的结果。
在处理任何类型的图像分类问题时,微调和使用预训练模型都是明智的解决方案。此外,这些传统/预训练的 CNN 模型也能产生良好的结果,然而,这些架构在对基于纹理的数据集进行分类时表现不佳。
六、为什么传统的 CNN 架构在基于纹理的数据集的分类任务中表现不佳?
图 5. 传统 CNN 架构包含四个主要组件
传统的CNN架构通常包括预训练层,并在其上添加一些可训练的CNN层块,然后将其输出传递到完全连接的层进行类别预测。如图5所示,可以看出传统的 CNN 架构主要有四个主要组件,使用 4 个块来表示,分别是A、B、C和D。第一个组件是输入层(表示为块A),第二个组件是预训练层/权重(表示为块B),第三个组件是可训练的 CNN 块(表示为块C),其输出传递到完全连接的层,即第四个组件(表示为块D)。传递到完全连接的层的输入通常包括全局特征而不是局部特征。这种常见的架构适用于大多数主要需要图像的全局特征来对图像进行分类的任务。然而,这些类型的架构无法预测全局特征和局部特征都参与类别预测的类别。
CNN 模型的复杂性随着网络深度的增加而增加,最后一层通常倾向于捕捉图像的复杂特征 [11]。从卷积层捕获的特征被发送到全连接层,以获取有关图像中存在的对象形状的信息并预测其类别。这种有关整体形状和高度复杂特征的信息不适合纹理分析,因为纹理基于复杂度较低的重复局部模式,这需要丰富的局部特征提取。
为了使用为图像分类而开发的基于 CNN 的模型进行纹理分类,域迁移是通过使用从网络 CNN 层输出中提取的特征来完成的。在使用预训练的 CNN 进行基于纹理的分类时,我们面临以下三个主要缺点。
-
卷积层后的全连接层捕获图像的空间布局,这对于表示物体的形状很有用,但对于表示纹理则不那么有用。
-
需要将固定大小的输入发送到 CNN,以便它与全连接层兼容。这通常是一项昂贵的任务。
-
预先训练的 CNN 的深层可能非常特定于领域,并且可能对纹理分类没有太大用处 [9, 11]。
众所周知,任何图像的纹理都是通过其局部结构和局部像素分布来定义的。要分析任何图像的纹理特征,必须研究其基于局部的特征并将其传递给全连接层。然而,传统的 CNN 无法将基于局部的特征传递给全连接层,因为传统 CNN 架构的最后几层使用复杂特征捕捉物体的整体形状并提取全局特征(参见图 5),而不是捕捉局部特征的模式。这就是传统 CNN 架构在基于纹理的数据集上表现不佳的原因。
当纹理提取特征技术与现有的CNN一起添加时,可以改善纹理分类任务的结果。表 1比较了传统的 CNN 方法与使用 Resnet-50 主干以及一些特征提取技术的方法。
表 1. 传统 CNN 模型与采用特征提取技术的 Resnet-50 在基准数据集上的结果比较 [5][6][7][8]。
使用纹理特征提取策略和深度学习的模型往往比传统的深度学习方法产生更好的结果。这是因为传统的 CNN 模型会捕捉通常用于物体检测的复杂特征,而纹理是使用局部重复模式/特征来识别的。
可以通过使用自定义深度卷积网络来改进 CNN,在卷积层之后与 CNN 一起引入各种纹理提取技术。
定制设计的深度卷积网络结合纹理提取层和预训练层不如单独使用预训练模型或统计上使用纹理特征提取器那么灵活。我们将在第三篇博文“如何在深度学习架构中利用纹理特征”中讨论纹理特征提取以及预训练模型。
七、参考
- https://www.robots.ox.ac.uk/~vgg/data/dtd/
- https://www.csc.kth.se/cvap/databases/kth-tips/download.html
- https://people.csail.mit.edu/lavanya/fmd.html
- https://towardsdatascience.com/4-pre-trained-cnn-models-to-use-for-computer-vision-with-transfer-learning-885cb1b2dfc
- https://arxiv.org/abs/1801.10324
- Deep TEN: Texture Encoding Network
- Deep Texture Recognition via Exploiting Cross-Layer Statistical Self-Similarity
- Encoding Spatial Distribution of Convolutional Features for Texture Representation
- Deep filter banks for texture recognition and segmentation.
- Using filter banks in convolutional neural networks for texture classification.
- From BoW to CNN: Two Decades of Texture Representation for Texture Classification
以上内容整理来自作者 Trapti Kalra的medium页《Why Traditional CNNs may Fail for Texture-based Classification ?》