纹理分析与深度学习的融合,在机器视觉领域已成为重要的突破方向。此前我们探讨了纹理的基础概念、不同类型及其在真实计算机视觉任务中的适用性,并介绍了主流纹理提取技术及如何将这类技术与深度学习相结合。今天,我们将进一步深入一个关键问题:为何传统CNN模型在纹理分类任务中表现欠佳,以及哪些常用数据集常被用于评估此类模型的性能。
纹理分类与常用纹理数据集
纹理分析与分类在众多场景中不可或缺——如地形识别、自动医疗诊断、显微图像分析、自动驾驶、爆炸危险检测等。作为人类,我们能够凭直觉轻松分辨粗糙、光滑、条纹、颗粒等纹理,但对AI而言却颇具挑战。如果模型能够学会“看懂”纹理,其在图像分类方面的能力将显著提升。
目前业内常用的纹理基准数据集包括DTD、FMD和KTH。模型在这些数据集上的准确率,可作为预测其泛化性能的重要参考指标。以下逐一介绍。
DTD(描述纹理数据集)
DTD是一个包含5640张图像的数据集,依据人类感知的纹理类别划分为47类,每类包含120张图片。

图1,DTD中每个类别的示例图
KTH(KTH-TIPS)
KTH-TIPS(不同光照、姿态和尺度下的纹理)数据库在CUReT基础上进行了扩展,涵盖了尺度、姿态和光照的变化。总计包含11个类别,样本量为3195。

图2,KTH-TIPS数据集中11个类别,每个类别展示4张图
FMD(常见材料数据集)
FMD专门用于捕捉现实世界中常见材料(如玻璃、塑料等)的外观。共包含10个类别,每类100张图片,全部从Flickr上人工筛选,确保覆盖不同的光照、组合、颜色、纹理和材料子类型。

图3,FMD数据集中每个类别的几张示例图
传统CNN图像分类
在正式讨论之前,先简要梳理预训练模型的概念及其应用方式。目前主流的CNN模型大多由不同研究团队针对图像分类任务提出,并可作为其他任务的预训练骨干网络。图5展示了一个典型的传统CNN架构:它由预训练层(B块)、可训练的CNN块(C块)、全连接层(D块)和输入层(A块)组成。
在纹理分类任务中,我们可以将预训练模型的知识迁移过来,使其适配纹理数据集。由于这些模型最初是在ImageNet等大型数据集上为通用图像分类而设计的,因此被称为预训练模型。下面介绍几个核心概念。
什么是预训练模型?
简而言之,预训练模型就是他人已经训练好的神经网络,开源供大家使用。这些模型通常在大数据集上完成了复杂任务,并贡献出来,开发人员可借助它们解决自身的相似问题。图4展示了这一迁移过程:源任务的模型(预训练模型)的权重被迁移到目标任务上,经过微调以获得更精准的预测。

图4,使用预训练模型的方法
从头构建神经网络需要巨大的算力、时间和人力成本,因此借助预训练模型已成为计算机视觉和NLP领域的常规做法。本文聚焦于如何将图像分类预训练模型用于纹理分类任务。
常用的预训练模型
以下是在图像分类领域经常使用的几个预训练模型:
VGG-16:2015年发布,16层可调,在ImageNet的100万张图像上训练,能够分类1000类物体。
Inception v3(GoogLeNet):由谷歌开发,深度50层,在2014年ImageNet竞赛中夺冠。参数量仅有700万,错误率低,是其核心亮点。
ResNet50:微软于2015年推出的残差网络,深度50层,同样在ImageNet上训练。相比VGG16,复杂度更低、效果更优,且解决了梯度消失问题。
EfficientNet:谷歌在2019年发布的最先进CNN。它采用一种称为复合缩放的方法,同时缩放深度、宽度和分辨率,用户可自行决定缩放系数。EfficientNet包含B0到B7共8个版本。
为我们的用例利用和调整预训练模型的方法
由于我们使用的纹理数据集与预训练模型原先训练的数据集不同,必须对模型权重进行微调,使其适应新领域。常用的方法有三种:
特征提取:移除预训练模型的输出层,将整个网络作为固定特征提取器,提取新数据集的特征。
部分训练、部分冻结:保持底层权重不变,只重新训练高层权重。具体冻结多少层可通过实验确定。
使用预训练模型的架构:完全不使用原权重,仅借用模型的架构,随机初始化参数后,使用我们的数据从头训练。
微调预训练模型是处理图像分类任务时明智的选择,传统CNN通常也能取得不错的效果。但在纹理数据集上,它们暴露出了明显的短板。
为什么传统的CNN架构在基于纹理的数据集的分类任务中表现不佳?

图5,传统CNN结构的4个主要部分
传统CNN架构通常包含输入层、预训练层、可训练的CNN块和全连接层。传递给全连接层的输入通常是全局特征,而非局部特征。这种设计适用于大多数需要图像全局特征的分类任务,但对于纹理分类而言,在需要全局特征与局部特征共同参与判断的场景中,它就显得力不从心了。
随着网络加深,CNN模型变得越来越复杂,最后一层倾向于捕捉高级复杂特征,例如物体的整体形状。这些用于描述形状的空间布局信息对纹理分析帮助不大。纹理本质上是基于局部重复的低复杂度模式,需要丰富的局部特征提取,而传统CNN的深层更关注领域特定的抽象信息,对于纹理分类来说,可能并非最优选择。
此外,全连接层要求固定尺寸的输入,这也增加了预处理成本。总结起来,传统预训练CNN在纹理分类上面临三个主要问题:
- 全连接层接收的是卷积层输出的空间布局特征,这对形状识别有用,但对纹理价值不大。
- 需要固定大小的输入,增加了预处理开销。
- 预训练CNN的更深层可能过于领域特定,对纹理并不友好。
纹理由局部结构和像素分布定义,分析纹理必须依赖基于局部的特征,并将其送入全连接层。但传统CNN的最后一个卷积层提取的是全局复杂特征,而非局部模式。这就是它在纹理数据集上表现不佳的根本原因。
将纹理提取技术融入CNN,可以显著提升纹理分类的效果。表1对比了传统CNN方法与使用ResNet-50骨干加特征提取技术的方法。

表1,传统CNN模型和使用特征提取技术的Resnet-50在基准数据集上的结果比较
把纹理特征提取策略与深度学习结合,往往能超越纯深度学习方法。传统CNN擅长捕捉目标检测所需的复杂特征,而纹理依赖局部重复模式。因此,我们可以设计自定义深度卷积网络,在卷积层之后引入纹理提取层。但需要指出的是,这种混合模型在灵活性上不如单独使用预训练模型或纯粹的统计纹理特征提取器。关于纹理特征提取与预训练模型的具体结合方式,我们将在后续文章中展开讨论。
