为什么传统 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

相关文章

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

MySQL按时间维度对亿级数据表进行平滑分表

《MySQL按时间维度对亿级数据表进行平滑分表》本文将以一个真实的4亿数据表分表案例为基础,详细介绍如何在不影响线上业务的情况下,完成按时间维度分表的完整过程,感兴趣的小伙伴可以了解一下... 目录引言一、为什么我们需要分表1.1 单表数据量过大的问题1.2 分表方案选型二、分表前的准备工作2.1 数据评估

MySQL进行分片合并的实现步骤

《MySQL进行分片合并的实现步骤》分片合并是指在分布式数据库系统中,将不同分片上的查询结果进行整合,以获得完整的查询结果,下面就来具体介绍一下,感兴趣的可以了解一下... 目录环境准备项目依赖数据源配置分片上下文分片查询和合并代码实现1. 查询单条记录2. 跨分片查询和合并测试结论分片合并(Shardin

SpringBoot结合Knife4j进行API分组授权管理配置详解

《SpringBoot结合Knife4j进行API分组授权管理配置详解》在现代的微服务架构中,API文档和授权管理是不可或缺的一部分,本文将介绍如何在SpringBoot应用中集成Knife4j,并进... 目录环境准备配置 Swagger配置 Swagger OpenAPI自定义 Swagger UI 底

基于Python Playwright进行前端性能测试的脚本实现

《基于PythonPlaywright进行前端性能测试的脚本实现》在当今Web应用开发中,性能优化是提升用户体验的关键因素之一,本文将介绍如何使用Playwright构建一个自动化性能测试工具,希望... 目录引言工具概述整体架构核心实现解析1. 浏览器初始化2. 性能数据收集3. 资源分析4. 关键性能指

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON:

详解MySQL中JSON数据类型用法及与传统JSON字符串对比

《详解MySQL中JSON数据类型用法及与传统JSON字符串对比》MySQL从5.7版本开始引入了JSON数据类型,专门用于存储JSON格式的数据,本文将为大家简单介绍一下MySQL中JSON数据类型... 目录前言基本用法jsON数据类型 vs 传统JSON字符串1. 存储方式2. 查询方式对比3. 索引

一文解密Python进行监控进程的黑科技

《一文解密Python进行监控进程的黑科技》在计算机系统管理和应用性能优化中,监控进程的CPU、内存和IO使用率是非常重要的任务,下面我们就来讲讲如何Python写一个简单使用的监控进程的工具吧... 目录准备工作监控CPU使用率监控内存使用率监控IO使用率小工具代码整合在计算机系统管理和应用性能优化中,监