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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/720891.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Windows系统下制作Windows 11系统U盘启动及安装指导

Windows系统下制作Windows 11系统U盘启动及安装指导 一、准备工作 U盘不得小于8G(推荐使用usb3.0接口);下载好对应的系统镜像;下载RUFUS或者软通碟U盘制作启动软件; 二、Windows操作系统下制作U盘启动(这里以使用RUFUS软件为例&…

Java对象头的组成

介绍对象头之前先说一下Java对象内部的组成结构&#xff1a; 1&#xff0c;成员变量&#xff08;Data1...DataN&#xff09; 2, 对象头 Java对象头的组成&#xff08;根据对象头分析对象状态借此优化代码&#xff09; <dependency> <groupId>org.openjdk.jol&l…

MB-iSTFT-VITS 模型论文思路与实验分享:基于VITS架构优化的轻量级文本转语音模型

参考文献&#xff1a; [1] Kawamura M, Shirahata Y, Yamamoto R, et al. Lightweight and high-fidelity end-to-end text-to-speech with multi-band generation and inverse short-time fourier transform[C]//ICASSP 2023-2023 IEEE International Conference on Acoustics…

【C#上位机应用开发实战】—机器视觉检测

#机器视觉 在现代工业生产中&#xff0c;机器视觉检测技术扮演着越来越重要的角色。它通过计算机视觉技术来实现对工件的自动化检测和判断&#xff0c;大大提高了生产效率和产品质量。而在机器视觉检测的应用中&#xff0c;C#作为一种简洁易用且功能强大的编程语言&#xff0c…

搭贝低代码开发平台:高效、灵活、经济的软件开发解决方案

在当今快速发展的数字化时代&#xff0c;企业对于快速、灵活且成本效益高的软件开发需求日益增长。搭贝低代码开发平台以其强大的功能和用户友好的体验&#xff0c;正在成为众多企业&#xff0c;特别是中小企业&#xff0c;软件开发的首选工具。 &#x1f4c8; 什么是低代码开发…

鸿蒙开发网络管理:【@ohos.net.socket (Socket连接)】

Socket连接 说明&#xff1a; 本模块首批接口从API version 7开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import socket from ohos.net.socket;socket.constructUDPSocketInstance constructUDPSocketInstance(): UDPSocket 创建…

061、Python 包:模块管理

包&#xff08;Package&#xff09;是一种用于组织模块的层次结构。包实际上就是一个包含了__init__.py文件的目录&#xff0c;该文件可以为空或包含包的初始化代码。通过使用包&#xff0c;可以更好地组织和管理大型项目中的模块&#xff0c;避免命名冲突&#xff0c;并提高代…

利用C#和Snap7工具模拟S7通信(包含DB地址讲解)

之前写过一篇用KepServerEx做模拟S7的通信数据&#xff0c;参考链接&#xff1a; 通过C#和KepServer完成模拟S7协议通信_c# 与kepserver-CSDN博客 但KepServerEx是收费的&#xff0c;而且模拟的DB块超过64就不行了&#xff0c;当然Snap7在本文中也是只能模拟DB1、DB2和DB3的数…

HTML 全局属性介绍及示例

HTML 全局属性是一组可以在任何HTML元素中使用的属性。这些属性提供了一种方式来定义元素的通用行为或外观。以下是一些常见的HTML全局属性及其示例。 id id 属性为元素提供了一个唯一的标识符。它不能在 <head>, <html>, <meta>, <script>, <sty…

数据压缩还能这么玩,国产数据库有救了!

页级压缩 opengauss数据库是以数据页面&#xff08;Page&#xff09;为单位进行压缩解压&#xff0c;本特性自openGauss 3.0.0版本开始引入&#xff0c;通过对数据页的透明页压缩和维护页面存储位置的方式&#xff0c;做到高压缩、高性能。提高数据库对磁盘的利用率。 页级压缩…

FL Studio没有声音怎么办 FL Studio声音卡顿怎么办

FL Studio是一款综合创作歌曲的宿主软件&#xff0c;这款软件的里面内置了很多效果器和插件&#xff0c;非常适合创作电子音乐&#xff0c;很多创作电子音乐的小伙伴都喜欢使用此款软件。不过有些刚接触FL Studio的小伙伴&#xff0c;在使用此软件的时候&#xff0c;会出现一些…

openh264 帧间预测编码原理:WelsMdP16x16函数

openh264 帧间预测编码 帧间预测编码是视频压缩技术中的关键方法之一&#xff0c;它主要用于减少视频序列中时间维度上的冗余。这种编码方式依赖于视频帧之间的空间相关性&#xff0c;通过预测和补偿来减少数据量&#xff0c;从而实现高效的视频压缩。帧间预测编码广泛应用于各…

短路是怎么形成的

1. 短路分为电源短路和用电器短路。 电源短路&#xff1a;电流不经过任何用电器&#xff0c;直接由正极经过导线流向负极&#xff0c;由于电源内阻很小&#xff0c;导致短路电流很大&#xff0c;特别容易烧坏电源。 用电器短路&#xff1a;也叫部分电路短路&#xff0c;即一根…

全国产城市轨道交通运营公安AI高清视频监控系统

方案简介 城市轨道交通运营公安高清视频监控系统解决方案针对运营部门和公安部门的安保需求&#xff0c;选用华维视讯的各类前端和视频编解码、控制产品&#xff0c;通过统一平台提供视频监控服务和智能应用&#xff0c;满足轨道交通运营业主客运组织和抢险指挥的需求&#xff…

【idea】解决springboot项目中遇到的问题

一、Maven报错Could not find artifact com.mysql:mysql-connector-j:pom:unknown in aliyunmaven解决及分析 报错 创建springboot项目&#xff0c;勾选数据库驱动&#xff0c;springboot版本为3&#xff0c;现在改成了2.7.2&#xff0c;Maven就发生了报错Could not find art…

从兼职到大神:新手必看的UE材质原理讲解

对于刚接触UE的同学来说&#xff0c;材质篇章往往是令人望而生畏的一大板块。但材质的一些基本原理其实并不难&#xff0c;只要稍作理解便可以轻松入门。接下来我们便分为材质类型和节点类型两个知识板块来介绍材质的相关内容。 材质类型 材质分类 金属&#xff1a;金属材质一…

【C语言】数组参数和指针参数详解

在写代码的时候难免要把【数组】或者【指针】传给函数&#xff0c;那函数的参数该如何设计呢&#xff1f; 1 一维数组传参 #include <stdio.h> void test(int arr[])//ok? {} void test(int arr[10])//ok? {} void test(int* arr)//ok? {} void test2(int* arr[20])…

单载波水声通信技术研究【附MATLAB代码】

文章来源&#xff1a;​微信公众号&#xff1a;EW Frontier 摘要 水下无线通信因其在海洋科研、国防、救援及资源开发等方面的关键作用而备受关注。声波作为水中信息传输的有效载体&#xff0c;推动了水声通信技术的发展&#xff0c;其中单载波调制技术由于其高频谱利用率、结…

Vue60-TodoList案例-全局事件总线

一、全局事件总线的适用场景 虽然全局事件总线使用于任意组件之间的通信&#xff0c;但是没有必要处处用它。 数据在哪里&#xff0c;操作数据的方法就在哪里&#xff01; 二、TodoList案例-全局事件总线 适用于全局总线的场景&#xff1a;Item和App&#xff08;爷孙关系&…

RFID期末复习 | 防碰撞算法 | 信源编码 | 差错控制 | 系统调制 | S50卡 | 无源标签 | 工作频率 | 自动识别

防碰撞算法 ALOHA算法 ALOHA算法是一种随机接入方法&#xff0c;其基本思想是采取标签先发言的方式&#xff0c;当标签进入读写器的识别区域内时就自动向读写器发送其自身的ID号&#xff0c;在标签发送数据的过程中&#xff0c;若有其他标签也在发送数据&#xff0c;将会发生…