为什么传统 CNN 可能无法进行基于纹理的分类?

2024-06-18 22:52

本文主要是介绍为什么传统 CNN 可能无法进行基于纹理的分类?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者:Mayank Gubba、Mohammed Faisal、Trapti Kalra、Vijay Pandey

纹理分析深度学习结合使用对于在机器视觉任务中取得更好的结果起着重要作用。在第一篇博客中,我们讨论了“纹理”的基础知识、不同类型的纹理以及纹理分析在解决实际计算机视觉任务中的适用性。我们还解释了一些最常用和最值得注意的纹理提取技术,此外,我们还演示了如何将这些纹理提取技术与深度学习结合起来。

深度学习由各种可用于图像分类任务的架构组成。基于深度学习的模型经常用于图像分类任务,并且在许多不同的用例中都表现出了出色的效果,从而展现了其有效性。几年前,迁移学习的概念应运而生,它建议使用用大型数据集训练的模型作为特定用例的主干,其中,使用特定于案例的数据集对预训练的主干模型进行微调,以调整权重来解决特定任务。经过图像分类训练的预训练模型也可用于纹理分类任务。为了检查现有的传统基于 CNN 的纹理分类模型的效率,一些公共的基于纹理的数据集被用来对其性能进行基准测试。据观察,传统的 CNN 架构(如图 5 所示)很难产生理想的结果,并且在应用于纹理分类任务时效果不佳。

目录

1.纹理分类和流行的基于纹理的数据集
2.用于图像分类的传统 CNN
3.什么是预训练模型?
4.流行的预训练模型概述
5.利用和微调预训练模型来满足我们的用例的方法
6.为什么传统的 CNN 架构在基于纹理的数据集的分类任务中表现不佳?
7.参考

一、纹理分类和流行的基于纹理的数据集

在进行地形识别、自动医疗诊断、显微图像分析、自动驾驶汽车和爆炸物危险检测等工作时,纹理分析和分类是一项至关重要的任务。在执行基于分类的任务时,纹理是一个非常重要的属性。我们可以像人类一样直观地看到、理解和区分纹理,但对于基于人工智能的机器来说却并非如此。如果人工智能模型能够识别纹理,那么在应用于分类任务时,它将是一个额外的优势。根据视觉效果理解和分类对象使人工智能模型更加高效和可靠。

因此,我们为纹理分类任务建立了模型,并为了检查其有效性,在基于纹理的基准数据集(如 DTDFMDKTH )上对它们进行了测试。根据任何模型在这些数据集上的准确性,我们可以了解并在一定程度上预测其在其他类似数据集上的表现。下面我们将提供有关上述数据集的详细信息。

  • 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)。

五、利用和微调预训练模型来满足我们的用例的方法

由于我们处理的数据与预训练模型所用的数据不同,因此需要根据我们的数据更新模型的权重,以学习特定领域的信息。因此,我们需要针对我们的数据对模型进行微调。

下面我们将讨论一些针对特定用例使用预训练模型的机制。

  1. 特征提取——使用预训练模型作为特征提取机制。我们可以删除输出层(给出属于 1000 个类别的概率的层),然后将整个网络用作新数据集的固定特征提取器。
  2. 训练某些层,同时冻结其他层——预训练模型可用于部分训练我们的模型,其中我们保持初始层的权重冻结,并重新训练更高层的权重。根据一些实验,我们可以看到有多少层需要冻结,有多少层需要训练。
  3. 使用预训练模型的架构——我们可以借助模型的架构,并使用它来随机初始化模型的权重。然后,我们可以根据我们的数据集和任务训练模型,这样我们就有了一个良好的架构,经过训练后,我们可以为我们的任务带来良好的结果。
    在处理任何类型的图像分类问题时,微调和使用预训练模型都是明智的解决方案。此外,这些传统/预训练的 CNN 模型也能产生良好的结果,然而,这些架构在对基于纹理的数据集进行分类时表现不佳。

六、为什么传统的 CNN 架构在基于纹理的数据集的分类任务中表现不佳?

在这里插入图片描述

图 5. 传统 CNN 架构包含四个主要组件

传统的CNN架构通常包括预训练层,并在其上添加一些可训练的CNN层块,然后将其输出传递到完全连接的层进行类别预测。如图5所示,可以看出传统的 CNN 架构主要有四个主要组件,使用 4 个块来表示,分别是A、B、C和D。第一个组件是输入层(表示为块A),第二个组件是预训练层/权重(表示为块B),第三个组件是可训练的 CNN 块(表示为块C),其输出传递到完全连接的层,即第四个组件(表示为块D)。传递到完全连接的层的输入通常包括全局特征而不是局部特征。这种常见的架构适用于大多数主要需要图像的全局特征来对图像进行分类的任务。然而,这些类型的架构无法预测全局特征和局部特征都参与类别预测的类别。

CNN 模型的复杂性随着网络深度的增加而增加,最后一层通常倾向于捕捉图像的复杂特征 [11]。从卷积层捕获的特征被发送到全连接层,以获取有关图像中存在的对象形状的信息并预测其类别。这种有关整体形状和高度复杂特征的信息不适合纹理分析,因为纹理基于复杂度较低的重复局部模式,这需要丰富的局部特征提取。

为了使用为图像分类而开发的基于 CNN 的模型进行纹理分类,域迁移是通过使用从网络 CNN 层输出中提取的特征来完成的。在使用预训练的 CNN 进行基于纹理的分类时,我们面临以下三个主要缺点。

  1. 卷积层后的全连接层捕获图像的空间布局,这对于表示物体的形状很有用,但对于表示纹理则不那么有用。

  2. 需要将固定大小的输入发送到 CNN,以便它与全连接层兼容。这通常是一项昂贵的任务。

  3. 预先训练的 CNN 的深层可能非常特定于领域,并且可能对纹理分类没有太大用处 [9, 11]。

众所周知,任何图像的纹理都是通过其局部结构和局部像素分布来定义的。要分析任何图像的纹理特征,必须研究其基于局部的特征并将其传递给全连接层。然而,传统的 CNN 无法将基于局部的特征传递给全连接层,因为传统 CNN 架构的最后几层使用复杂特征捕捉物体的整体形状并提取全局特征(参见图 5),而不是捕捉局部特征的模式。这就是传统 CNN 架构在基于纹理的数据集上表现不佳的原因。

当纹理提取特征技术与现有的CNN一起添加时,可以改善纹理分类任务的结果。表 1比较了传统的 CNN 方法与使用 Resnet-50 主干以及一些特征提取技术的方法。

在这里插入图片描述

表 1. 传统 CNN 模型与采用特征提取技术的 Resnet-50 在基准数据集上的结果比较 [5][6][7][8]。
使用纹理特征提取策略和深度学习的模型往往比传统的深度学习方法产生更好的结果。这是因为传统的 CNN 模型会捕捉通常用于物体检测的复杂特征,而纹理是使用局部重复模式/特征来识别的。

可以通过使用自定义深度卷积网络来改进 CNN,在卷积层之后与 CNN 一起引入各种纹理提取技术。

定制设计的深度卷积网络结合纹理提取层和预训练层不如单独使用预训练模型或统计上使用纹理特征提取器那么灵活。我们将在第三篇博文“如何在深度学习架构中利用纹理特征”中讨论纹理特征提取以及预训练模型。

七、参考

  1. https://www.robots.ox.ac.uk/~vgg/data/dtd/
  2. https://www.csc.kth.se/cvap/databases/kth-tips/download.html
  3. https://people.csail.mit.edu/lavanya/fmd.html
  4. https://towardsdatascience.com/4-pre-trained-cnn-models-to-use-for-computer-vision-with-transfer-learning-885cb1b2dfc
  5. https://arxiv.org/abs/1801.10324
  6. Deep TEN: Texture Encoding Network
  7. Deep Texture Recognition via Exploiting Cross-Layer Statistical Self-Similarity
  8. Encoding Spatial Distribution of Convolutional Features for Texture Representation
  9. Deep filter banks for texture recognition and segmentation.
  10. Using filter banks in convolutional neural networks for texture classification.
  11. From BoW to CNN: Two Decades of Texture Representation for Texture Classification

以上内容整理来自作者 Trapti Kalra的medium页《Why Traditional CNNs may Fail for Texture-based Classification ?》

这篇关于为什么传统 CNN 可能无法进行基于纹理的分类?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1073290

相关文章

vcpkg安装opencv中的特殊问题记录(无法找到opencv_corexd.dll)

我是按照网上的vcpkg安装opencv方法进行的(比如这篇:从0开始在visual studio上安装opencv(超详细,针对小白)),但是中间出现了一些别人没有遇到的问题,虽然原因没有找到,但是本人给出一些暂时的解决办法: 问题1: 我在安装库命令行使用的是 .\vcpkg.exe install opencv 我的电脑是x64,vcpkg在这条命令后默认下载的也是opencv2:x6

大语言模型(LLMs)能够进行推理和规划吗?

大语言模型(LLMs),基本上是经过强化训练的 n-gram 模型,它们在网络规模的语言语料库(实际上,可以说是我们文明的知识库)上进行了训练,展现出了一种超乎预期的语言行为,引发了我们的广泛关注。从训练和操作的角度来看,LLMs 可以被认为是一种巨大的、非真实的记忆库,相当于为我们所有人提供了一个外部的系统 1(见图 1)。然而,它们表面上的多功能性让许多研究者好奇,这些模型是否也能在通常需要系

vue同页面多路由懒加载-及可能存在问题的解决方式

先上图,再解释 图一是多路由页面,图二是路由文件。从图一可以看出每个router-view对应的name都不一样。从图二可以看出层路由对应的组件加载方式要跟图一中的name相对应,并且图二的路由层在跟图一对应的页面中要加上components层,多一个s结尾,里面的的方法名就是图一路由的name值,里面还可以照样用懒加载的方式。 页面上其他的路由在路由文件中也跟图二是一样的写法。 附送可能存在

雨量传感器的分类和选型建议

物理原理分类 机械降雨量计(雨量桶):最早使用的降雨量传感器,通过漏斗收集雨水并记录。主要用于长期降雨统计,故障率较低。电容式降雨量传感器:基于两个电极之间的电容变化来计算降雨量。当降雨时,水滴堵住电极空间,改变电容值,从而计算降雨量。超声波式降雨量传感器:利用超声波的反射来计算降雨量。适用于大降雨量的场合。激光雷达式降雨量传感器:利用激光技术测量雨滴的速度、大小和形状等参数,并计算降雨量。主

Python应用开发——30天学习Streamlit Python包进行APP的构建(9)

st.area_chart 显示区域图。 这是围绕 st.altair_chart 的语法糖。主要区别在于该命令使用数据自身的列和指数来计算图表的 Altair 规格。因此,在许多 "只需绘制此图 "的情况下,该命令更易于使用,但可定制性较差。 如果 st.area_chart 无法正确猜测数据规格,请尝试使用 st.altair_chart 指定所需的图表。 Function signa

气象站的种类和应用范围可以根据不同的分类标准进行详细的划分和描述

气象站的种类和应用范围可以根据不同的分类标准进行详细的划分和描述。以下是从不同角度对气象站的种类和应用范围的介绍: 一、气象站的种类 根据用途和安装环境分类: 农业气象站:专为农业生产服务,监测土壤温度、湿度等参数,为农业生产提供科学依据。交通气象站:用于公路、铁路、机场等交通场所的气象监测,提供实时气象数据以支持交通运营和调度。林业气象站:监测林区风速、湿度、温度等气象要素,为林区保护和

企业如何进行员工的网络安全意识培训?

企业网络安全意识培训的重要性         企业网络安全意识培训是提升员工网络安全素质的关键环节。随着网络技术的快速发展,企业面临的网络安全威胁日益增多,员工的网络安全意识和技能水平直接关系到企业的信息安全和业务连续性。因此,企业需要通过系统的网络安全意识培训,提高员工对网络安全的认识和防范能力,从而降低企业在面对潜在安全风险时的损失和影响。 企业网络安全意识培训的方法         企

Pycharm配置conda环境(解决新版本无法识别可执行文件问题)

引言: 很多小伙伴在下载最新版本的pycharm或者更新到最新版本后为项目配置conda环境的时候,发现文件夹目录中无法显示可执行文件(一般为python.exe),以下就是本人遇到该问题后试验和解决该问题的一些方法和思路。 一般遇到该问题的人群有两种,一种是刚入门对pycharm进行conda环境配置的小白(例如我),不熟悉相关环境配置的操作和过程,还有一种是入坑pycharm有段时间的老手

青龙面板之Ninja无法安装无法拉库问题解决

因为之前的Ninja库已经不能用了,甚至新找到的库也不能用了,好尴尬,这里使用线下版本进行安装。 ninja安装新方法,其是方法还是原来的,只不过Ninja的库原作者删了,没法直接git了,但是我找到了源码包,我们可以直接通过宝塔面板拖进去。 源码包地址: https://download.csdn.net/download/u012134073/24813485 备用地址: 链接: h

使用JWT进行安全通信

在现代Web应用中,安全通信是至关重要的。JSON Web Token(JWT)是一种流行的安全通信方式,它允许用户和服务器之间安全地传输信息。JWT是一种紧凑的、URL安全的表示方法,用于在两方之间传输信息。本文将详细介绍JWT的工作原理,并提供代码示例帮助新人理解和实现JWT。 什么是JWT? JWT是一种开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间以JSO