Deep Few-Shot Learning for Hyperspectral Image Classification

摘要--针对HSI分类任务样本不足的问题,提出了一种deep few-shot小样本学习方法。该算法有三种新的策略:

  1. 利用深度残差三维卷积神经网络提取光谱-空间特征,降低标记的不确定性。
  2. 网络通过情景训练来学习一个度量空间,其中来自同一个类的样本比较接近,而来自不同类的样本比较远。
  3. 利用在度量空间中学习到的最近邻分类器对测试样本进行分类。

该想法的关键是:设计了网络在训练集上学习了度量空间。此外,这种度量空间可以推广到测试集的类中。实验结果表明,该方法与传统的半监督方法相比,在只有少量标记样本的情况下,可以获得更好的分类精度。

01. Introduction

在HSIs中,收集有标记的样品通常是费时费力的。相比之下,未标记的样本更容易获得。这一事实促进了半监督学习的概念,它可以联合利用标记和未标记的样本来处理维数灾难的问题。

本文受few-shot learning的启发,具体来说,CNN模型被用来训练学习一个度量空间。换句话说,在数量充足、与目标数据集(我的理解是测试集)不同的具有标签的数据集上,训练一个CNN模型来提取泛化的特征。一旦训练完成,模型可以从较小的标记目标数据集(测试集)中提取特征。

本文提出一种 deep few-shot learning(DFSL)来对标注较少的HSI数据进行分类(每个类只有五个标记样本),该方法可以分为三个部分:

  1. 从训练集中训练学习一个度量空间(metric space),然后采用欧氏距离在度量空间中去分离不同的类。
    由于深度CNN模型具有很强的非线性表达能力,可以以端到端的方式进行训练,所以用深度三维CNN (D - 3D CNN)对度量空间进行参数化。优化损失函数的目的是使网络学习一个度量空间,在这个度量空间中的样本特征具有较小的类内间距和较大的类间间距。为了更好地训练D - 3D CNN,还引入了残差学习。因此,最后用深度残差三维CNN (d - res - 3d CNN)对度量空间进行参数化。一旦学习了网络,就可以把它看作是一个嵌入函数
  2. 利用预先训练好的D - 3D CNN提取测试数据集中所有样本的特征
  3. 使用简单的最近邻算法(nearest neighbor)对测试样本进行分类

本文的主要贡献如下:

  1. 提出了一种DFSL方法,通过训练网络学习一个度量空间,使同一类的样本彼此接近。重要的是,这种度量空间将对训练中没有出现的类执行相同的操作。因此,利用神经网络分类器可以完成对测试数据集的分类。
  2. 使用深度三维CNN对度量空间进行参数化。此外,为了更好地训练网络,引入了残差学习。这种深度残差的三维CNN不需要任何预处理就可以直接从数据集中提取光谱空间特征。
  3. 在4个著名的HSI数据集上进行了实验,实验结果表明,该方法可以在只有少量标记样本的情况下优于传统的半监督方法。

02. 方法理论介绍

一般来说,由于参数空间和少量的标记样本之间的不平衡,仅仅使用少量的样本来训练一个深度神经网络是很有挑战的一项任务。使用标准的优化技术很大可能会导致过拟合现象的发生。从人的角度考虑一个问题:人可以从很少的样本中学习到知识来解决现实中遇到的问题。从中受到启发,我们可以先为网络制造一些先验知识,也就是本文讲的度量空间

2.1 深度少样本学习与训练策略

为了学习到的度量空间适合于少样本分类任务,本论文使用被称为eposodes的小样本取样来模拟少样本学习任务。度量空间可以看作是一个用深度神经网络参数化的嵌入函数。换句话说,使用深度神经网络通过一个具有可学习参数的嵌入函数 来计算每个类的表示,其中D表示网络输入的维数,M表示网络输出的维数。

随机选择来自训练集中每一类的子集当作episode来计算梯度和更新网络。如图所示,选择每个类内的子集当作support set,将选剩下的样本当作query set。在本文中,每个类选择一个样本当作support set来模拟在测试集中小样本分类的情况。support set和query set当作网络的输入来提取嵌入特征(embedding feature)。query set中的样本x属于哪一类是softmax函数根据x在嵌入空间(度量空间)对于support set中样本的距离来计算的:

其中表示support set中第类的嵌入特征,表示query set中样本的嵌入特征,y是的标签,是欧几里德距离函数。损失函数定义为真实类k的负对数概率,使用随机梯度下降(SGD)的方法
\begin{aligned} J(\phi)=-\log p_{\phi}(y=k | \mathbf{x}) &=d\left(f_{\phi}(\mathbf{x}), \mathbf{c}_{k}\right) +\log \sum_{k=1}^{N_{C}} \exp \left(-d\left(f_{\phi}(\mathbf{x}), \mathbf{c}_{k}\right)\right) \end{aligned}

2.2 Deep 3-D CNN

2.2.1 3-D 卷积

https://www.jianshu.com/p/1247ff367586

2.2.2Residual Learning(残差学习)

参考
https://www.imooc.com/article/44047
https://www.cnblogs.com/alanma/p/6877166.html
https://www.jianshu.com/p/09643588f373

研究直接表明训练深度神经网络失败的原因并不是梯度消失,而是权重矩阵的退化,当网络层数达到一定的数目以后,网络的性能就会饱和,再增加网络的性能就会开始退化,但是这种退化并不是由过拟合引起的,因为我们发现训练精度和测试精度都在下降,这说明当网络变得很深以后,深度网络就变得难以训练了。

ResNet的出现其实就是为了解决网络深度变深以后的性能退化问题。

深度残差网络。如果深层网络的后面那些层是恒等映射,那么模型就退化为一个浅层网络。那现在要解决的就是学习恒等映射函数了。 但是直接让一些层去拟合一个潜在的恒等映射函数H(x) = x,比较困难,这可能就是深层网络难以训练的原因。但是,如果把网络设计为H(x) = F(x) + x,如上图,我们可以转换为学习一个残差函数F(x) = H(x) - x. 只要F(x)=0,就构成了一个恒等映射H(x) = x。
(不是很理解这段话)

而且shortcut连接相当于简单执行了同等映射,不会产生额外的参数,也不会增加计算复杂度。 而且,整个网络可以依旧通过端到端的反向传播训练。训练过程中的潜在误差可以通过快捷方式传递到上层,从而缓解了层数过多导致梯度消失/爆炸的问题,简化了深度网络的训练

2.2.3 网络架构

网络架构图

如上图所示,设计了一个深度三维CNN作为嵌入函数,其中包含两个残差块,两个池化层,一个卷积层作。Conv表示具有3×3×3内核的三维卷积层。池化表示步长为2×2×4的3D最大-池化函数,采用ReLU作为激活函数。

在上图中,虚线框是一个残差块。池化层将导致shotcut和主路径的维度不同。因此,在残差块中不使用池化层。而且,每个残差块都与一个3D最大-池化层连接,以减少计算、聚合特性。由于输入立方体的高光谱维数,将其沿光谱维数的步长设为4,沿空间维数的步长设为2。最后,将特征映射平铺成一维向量。设计的深三维CNN采用算法1所示的策略进行训练。以这种方式,所设计的网络可以学习度量空间,其中具有相同类的样本彼此接近。

2.3 使用最近邻算法进行分类

测试数据集的分类主要包括三个步骤:

  1. 通过预训练的深度残差3-D CNN提取嵌入特征;
  2. 计算标记样本与待分类样本之间的欧式距离;
  3. 通过最近邻NN分类器确定最终标签。

实际上,所设计的深度残差三维CNN可以看作是经过训练后的一种嵌入函数。在测试数据集的分类过程中,所有样本都通过预先训练好的深度残差3d CNN进行输入,提取特征。然后随机选取几个有标记的样本作为监督样本。经过训练的网络使得相似的样本在嵌入空间中彼此接近。因此,通过简单的神经网络分析,可以对测试样本进行分类,如图6所示。需要注意的是,培训数据集和测试数据集是相互独立的。最后,将测试样本标签生成的分类图与groundtruth图进行匹配,对不同的分类方法进行评估。

03. 实验分析

你可能感兴趣的:(Deep Few-Shot Learning for Hyperspectral Image Classification)