☰
高光谱图像分类:融合费马距离与主动拉普拉斯学习
2026/10/24 16:53:32 网站建设 项目流程

高光谱图像分类是遥感领域最常见的任务之一。每一个像素并不只是 RGB 三通道的颜色值,而是一条跨越几十到几百个连续光谱波段的曲线。地物类别,比如农田里的玉米、大豆、树林和建筑物,往往需要根据整条曲线的形状才能区分。这类数据的现实问题是标注成本非常高:高光谱影像通常需要专家结合地面调查才能在图像上逐像素确认地物类型,某些场景还要实地采样。如果训练分类器时只有少量带标签像素,普通监督模型很容易过拟合。

半监督学习和主动学习就是为了缓解这个问题出现的。半监督学习把大量未标注像素也放进训练过程,用数据本身的分布和流形结构辅助分类;主动学习则反过来从候选像素中挑选最值得让专家标注的样本,让每一次人工标注都花在刀刃上。Fermat Active Laplace Learning for Semi-Supervised Hyperspectral Image Classification 这类方法,正是把两条路线结合起来的一种思路。这篇内容会先把三个基础组件拆开讲清楚,再说明如何用费马距离构造图拉普拉斯,如何把标签从少量标注像素传播到全部像素,以及如何用主动学习策略决定下一批标注样本。读者理解后,可以在公开高光谱数据集上复现一个基础实验,也可以把其中图构建和样本选择模块迁移到自己的遥感分类任务里。

1. 高光谱图像分类为什么需要半监督和主动学习结合

1.1 高光谱像素的“图谱合一”特性与标记瓶颈

高光谱图像最典型的特征是“图谱合一”。图像在空间上有长、宽两个维度,同时每个空间位置还有一个几十到几百维的光谱维度。一个像素本质上是这条光谱曲线,而相邻像素之间往往存在强烈的空间相关性:同一块农田内部的光谱曲线相近,同一片建筑屋顶材料的光谱曲线也相近。这种结构让高光谱数据天然适合图模型来表达,因为图节点可以表示像素,图边可以表示像素之间的光谱相似度或空间邻接关系。

但监督分类在高光谱场景里会遇到一个很直接的瓶颈:标注成本高。高光谱图像的标注不是普通图像打一个框或者标一个类别名,而是逐像素判断地物类型。一张 Indian Pines 场景里包含农田、草地、树林等多种类别,需要专家结合光谱曲线特征和地面真实调查才能确认。如果只标几十个像素,类别多、类内变化大的时候,监督模型很难学到稳定的边界。而整幅图像中未标注像素可能达到上万甚至几十万。怎么利用这些未标注像素,是半监督学习和主动学习共同解决的问题。

这里有一个容易被忽视的前提:高光谱数据虽然是高维的,但它并不是均匀地填满整个特征空间。不同地物类别在光谱特征空间里往往分布在不同的低维流形附近。噪声、光照变化、大气校正误差会让一些像素偏离类别中心。因此,判断两个像素是否属于同一类,不能只看欧氏距离是否接近,还要看它们在数据流形上是否处于合理路径之内。这也是为什么引入新的距离度量,比如费马距离,会比纯欧氏距离更有潜力。

1.2 半监督解决标注样本少,主动学习解决标注价值不均衡

半监督学习的核心观点是:未标注数据也携带信息。即使不知道一个像素的类别,它的光谱特征仍然可以帮助我们理解类别的整体分布、类的边界以及类与类之间的过渡区域。在图拉普拉斯半监督方法中,未标注像素通过图上的平滑约束参与计算,让相邻或相似的像素倾向拥有相同类别。这种机制特别适合像高光谱这样类别呈块状分布的数据。

主动学习解决的是另一个问题:当标注预算有限时,应该请专家标注哪些样本。如果随机从农田区域抽选像素,可能抽到很多已经很容易分类的样本,它们对模型提升有限。主动学习会计算每个候选样本的“不确定性”或“信息量”,优先选择模型当前最没把握的像素。把这个策略放到高光谱场景中,意味着每次迭代只挑选最有价值的少量像素送给专家,而不是一次性标注整张图。

两种策略天然互补:半监督学习让模型在标注很少时也能给出一个相对平滑的预测分布,主动学习则用这个预测分布去判断哪些像素最值得额外标注。Fermat Active Laplace Learning 的逻辑就是在这个互补关系上建立的:先用费马距离构造更贴合流形结构的图,再用拉普拉斯学习传播标签,最后用主动学习策略从传播结果里挑选下一轮标注样本。

1.3 技术主线:费马距离与主动拉普拉斯学习如何串联

从方法名称看,Fermat Active Laplace Learning 可以拆成三个关键词:Fermat、Active、Laplace Learning。Laplace Learning 负责半监督标签传播,Active 负责主动样本选择,Fermat 是构造图和边权时的关键距离度量。三者不是独立拼接,而是形成一条循环链路:

  1. 用费马距离计算像素之间的相似度,构建稀疏图;
  2. 在图对应的拉普拉斯矩阵上求解标签传播;
  3. 通过传播结果计算未标注像素的不确定性;
  4. 选择不确定性最高且具有代表性的样本,申请人工标注;
  5. 把新标注加入已知标签集合,重新构图或重新传播,直到预算用完。

这个链路的关键在于,图的质量直接影响拉普拉斯传播的效果,而传播效果又决定主动学习选择样本的质量。如果图连接错误,比如把两个不同类别的像素连在一起,标签传播会把错误信息扩散;如果主动学习只关注不确定性,可能反复挑到同一大片区域里的相似样本,造成预算浪费。所以后面每个模块都不能单独调优,必须放到整条链路上看。

2. 先理解三个基础组件:图半监督、费马距离、主动学习

2.1 图拉普拉斯半监督分类的基本流程

图拉普拉斯半监督分类的前提是构建一个无向图。设整幅高光谱图像有 N 个像素,每个像素是图中的一个节点。节点之间的边权重表示两个像素的相似程度,常见做法先用 KNN 找到每个像素的 k 个近邻,再按照高斯核计算权重:

$$W_{ij} = \begin{cases}\exp\left(-\frac{|x_i - x_j|^2}{\sigma^2}\right), & j \in \mathcal{N}_k(i) \ 0, & \text{otherwise}\end{cases}$$

其中x_i是第 i 个像素的特征向量,可能是归一化后的光谱向量,也可能是降维后的特征。构建 W 后,计算度矩阵 D,D 的对角元素是 W 每行权重的和。拉普拉斯矩阵通常有三种形式:未归一化 L = D - W,对称归一化 L_sym = I - D^{-1/2} W D^{-1/2},随机游走归一化 L_rw = I - D^{-1} W。高光谱像素数量大、类别区域块状明显,归一化拉普拉斯通常更稳定。

有了图矩阵,半监督分类的目标可以写成:

$$\min_F \sum_{i \in L} |F_i - Y_i|^2 + \lambda \sum_{i,j} W_{ij} |F_i - F_j|^2$$

第一项要求已知标注像素的预测 F_i 接近真实标签 Y_i,第二项要求图上有边相连的像素预测尽量平滑。lambda控制平滑强度。求解这个目标可以直接解线性系统,也可以使用迭代扩散方法。对每个像素得到的是各类别置信度向量,再取最大值的类别作为最终标签。

这里要注意,半监督图方法的效果高度依赖于图的连通性。如果某些小类别像素在特征空间中离其他像素都很远,KNN 可能把跨类别像素错误连接,导致类别边界被抹平。高光谱数据中类内方差大、类间方差小的类别最容易出问题。

2.2 从欧氏距离到费马距离:为什么流形结构更可信

欧氏距离在高光谱像素上最直观,它直接衡量两条光谱曲线之间的平均差异。但欧氏距离假设特征空间是均匀的,两点之间最短的直线就代表相似度。真实高光谱数据里,同一类别像素可能因为光照、角度、物候条件变化产生连续漂移,两个同类像素之间的欧氏距离甚至可能大于不同类像素之间的距离。仅靠欧氏距离构建图,会把不相似但处于类别内部变化路径上的像素错误连接。

费马距离是一种基于路径的距离度量,它的中心思想是:两点之间的有效距离,不能只看直接连线,而要沿着数据分布形成的“路径”累积成本。在点云密度较高的区域,路径成本低;在密度很低的区域,路径成本高。一个常见的定义是:

$$d_F(x_i, x_j) = \min_{\gamma} \int_{\gamma} w(x)^{-\beta} ds$$

其中gamma是连接两个点的路径,w(x)是对局部密度的估计,beta控制密度惩罚的强度。beta越大,路径越倾向于绕过密度低的地方。直观地说,费马距离认为两个像素即使光谱直线上很远,只要它们之间有很多中间样本逐步过渡,仍然可能在同一个类别流形上,因此距离会相对较短。

实际实现时,不需要对连续路径做积分。可以先用全体像素特征估计每个节点附近的密度,然后为每对节点定义基础边权,例如反密度权重,再在图上运行 Dijkstra 最短路径算法,得到任意两点之间的费马距离近似值。这种方法比欧氏距离更耗时,但对类别连续变化的农田、山坡区域会有明显帮助。

要注意“费马”这个名字在这里指距离度量,和费马大定理没有直接关系,也不必强行寻找某个“费马点”。在 Fermat Active Laplace Learning 中,它的角色是替换图构建阶段使用的距离函数。

2.3 主动学习选样策略:不确定性、代表性和信息量

主动学习面临的问题是:有一个可以咨询的专家,但每问一次都要消耗预算。选择什么样本最合理?常见策略有三类。

不确定性采样是最常用的方法。对未标注像素 x_i,取分类器给出的类别概率向量 p_i,计算预测熵:

$$H(p_i) = -\sum_{c=1}^{C} p_{ic} \log p_{ic}$$

熵越大,说明模型对这个像素的类别越没有把握。也可以用边际差值,即最大概率和第二大概率之间的差,差值越小表示越不确定。

不确定性采样的问题是容易造成局部聚集。如果图中有一大片边界区域,模型对其中所有边界像素都没有把握,连续几轮选择可能把预算全部花在同一个区域。为了缓解这个问题,可以加入多样性约束:选了一批候选后,要求它们在特征空间或空间坐标上尽量分散。常见做法是先用聚类对未标注像素分簇,再从不同簇里挑选熵最高样本;或者在每一轮选择时,限制已经选中的样本彼此之间距离太近。

还有一类基于影响/信息量的策略,目标不是找最不确定样本,而是找“标注后对全图预测影响最大”的样本。这类策略在拉普拉斯框架下可以近似计算闭环实验设计或方差减少,但计算量更大。Fermat Active Laplace Learning 的主动学习模块通常建立在拉普拉斯传播结果之上,因此可以组合不确定性采样和图上的邻域代表性:既看当前置信度是否低,也看该像素在图上的度数是否高,因为高度数节点更新标签后更容易影响周围邻居。

3. Fermat Active Laplace Learning 方法拆解

3.1 整体框架:从输入数据到逐轮标注决策

Fermat Active Laplace Learning 的完整流程可以抽象为下面几步。输入是一幅高光谱图像的特征矩阵 X、初始的少量标注集合labeled_idx及标签y_labeled、未标注集合unlabeled_idx、主动学习预算budget和几个关键参数。

第一个阶段是图构建。用费马距离计算像素之间的相似度,构建稀疏 KNN 图并得到拉普拉斯矩阵 L。这个图一旦构建完成,原则上可以固定复用,标签传播阶段只需要修改标签项。

第二个阶段是标签传播。在拉普拉斯平滑约束下计算每个像素的概率分布。对已标注像素,预测结果要贴近真实标签;对未标注像素,预测结果要和邻居保持一致。

第三个阶段是主动选择。基于传播得到的置信度,计算每个未标注像素的不确定性,同时考虑空间或特征空间上的多样性,选出batch_size个样本。

第四个阶段是人工标注和更新。把选出的样本交给专家标注,更新已知标签集合,回到标签传播阶段。随着标注数量增加,预测置信度会越来越可靠,主动选择也会从“挑边界样本”慢慢变成“挑剩余少数难类样本”。

用伪代码描述如下:

def fermat_active_laplace_learning(X, labeled_idx, y_labeled, unlabeled_idx, budget, k=10, beta=1.0, lamb=0.1, batch_size=20, max_rounds=10): # 1. 使用费马距离构建图 W = build_fermat_weight_matrix(X, k=k, beta=beta) L = normalized_laplacian(W) # 2. 循环主动学习 for round_id in range(max_rounds): # 标签传播 prob = laplace_propagate(L, labeled_idx, y_labeled, unlabeled_idx, lamb) # 根据传播结果计算不确定性 uncertainty = compute_entropy(prob[unlabeled_idx]) # 多样性约束下选择本轮标注样本 selected = select_batch(unlabeled_idx, uncertainty, X, batch_size, diversity=True) # 询问专家,模拟时用真实标签替代 y_new = query_oracle(selected) labeled_idx = labeled_idx + selected y_labeled = y_labeled + y_new unlabeled_idx = list(set(unlabeled_idx) - set(selected)) # 预算判断 if len(selected) == 0 or len(labeled_idx) >= budget: break return prob, labeled_idx

这个伪代码展示了方法的技术骨架,实际工程实现时还需要处理数据结构、稀疏矩阵存储、预计算缓存和异常分支。

3.2 用费马距离构造加权图的具体实现

构造费马距离图的第一步是估计每个节点附近的密度图。对于高光谱数据,可以将节点用 KNN 邻域半径或核密度方式估计密度rho_i。密度越高,说明该像素处于越密集的数据区域,跨越该区域的路径成本越低。

第二步是定义基础路径成本。可以采用:

$$c_{ij} = \rho_{ij}^{-\beta}$$

其中rho_{ij}可以是rho_i和rho_j的均值或最大值。为了让计算可行,通常先按欧氏距离找较近的邻域候选,只在候选边上做密度加权,而不是维护完整稠密图。

第三步是运行最短路径算法。对每个像素,以它为源点运行 Dijkstra 算法,计算到其他候选像素的费马距离。完整的全源 Dijkstra 计算量很大,常见做法是先做稀疏化:只保留每个像素的 k 个最近费马距离邻居,或者只对锚点计算费马距离,再传递给普通节点。

第四步是把费马距离转成边权重,例如:

$$W_{ij} = \exp\left(-\frac{d_F(x_i, x_j)^2}{\sigma_F^2}\right)$$

sigma_F可以用费马距离分布的某个分位数估计。权重越大,表示两个像素在流形上越接近。

这个实现中最大的坑是计算复杂度。N 个像素、N=10000 以上的图像,完整 Dijkstra 每次都要扫图,整体代价很高。一般先使用空间分块或超像素分割把候选集合缩小,再用费马距离在块内精细构图,这样能在保持流形结构的同时减少计算时间。

3.3 拉普拉斯标签传播:从少数标注到全图预测

构建好归一化拉普拉斯矩阵 L 后,标签传播可以简化为求解:

$$F = \arg\min_{Z} \sum_{i \in L} |Z_i - Y_i|^2 + \lambda \sum_{i,j} W_{ij} |Z_i - Z_j|^2$$

写成矩阵形式后,可以得到线性系统:

$$(L + \lambda I) F = \lambda Y$$

其中 Y 是已知标签矩阵,已标注像素行是 one-hot 向量,未标注像素行可以置零。lambda需要调参,它控制标签项和平滑项的平衡。lambda太大,标签只能保持在原始标注像素上,无法充分传到远处;lambda太小,标签信息会过度扩散,把不同类别区域都抹平成相似概率。

如果使用对称归一化拉普拉斯 L_sym,线性系统仍然可解。对于高光谱图像,直接求逆不适合大 N,通常用共轭梯度法或迭代扩散求解。迭代传播的过程中,每一轮更新可以看作让每个节点吸收邻居标签信息,再叠加自身原始标签约束。

完成求解后,F 的每一行就是像素的类别置信度。对主动学习来说,这个置信度比单纯类别标签更有价值,因为不确定性可以由置信度的熵计算出来。这也是为什么把 Laplace Learning 和 Active Learning 放在一起,而不是先用某个分类器再用主动学习。拉普拉斯方法不仅给出预测,还给出天然与图结构一致的置信度。

3.4 主动选择策略:哪些像素最值得申请标签

在拉普拉斯传播得到置信度后,可以用三种信号组合打分:

第一是熵。熵越高越值得标注,这条规则解决“模型不确定”的问题。

第二是图度数。如果一个未标注像素在图上有很高权重连接大量邻居,标注它能直接影响更多样本的传播路径。可以定义:

$$score_i = H(p_i) \cdot \log(\deg_i + 1)$$

其中deg_i是节点权重度。用乘积的形式,让高不确定性且高影响力的节点优先被选中。

第三是空间分散度。为了避免批量选择时重复,可以在一次选 batch 时依次加入样本,并惩罚与已经选中样本距离太近的候选:

$$score_i' = score_i - \alpha \min_{j \in S} d(x_i, x_j)$$

S是当前 batch 中已经选出的样本集合,alpha是惩罚系数。这个策略不需要额外训练,实现简单,对高光谱这样空间连续的数据很有效。

完整的概率计算到样本选择,建议写成可复用函数,方便替换成其他主动学习规则。例如后续要对比随机选样、Marginal Sampling、QBC 等方法时,只需要替换select_batch内部逻辑。

4. 实验设计与验证方案

4.1 常用数据集与评价指标

高光谱分类研究中常用 Indian Pines、Pavia University、Salinas 等公开数据。Indian Pines 包含 145x145 像素、200 个左右有效波段,类别数量多且类别间样本数很不均衡;Pavia University 场景空间范围更大,城市地物类型丰富;Salinas 主要覆盖农业区域。使用这些数据集做实验时,不要只看一个数据集的指标,因为不同场景的类别分布、空间块状程度和噪声水平差异很大。

评价指标一般用总体精度 Overall Accuracy,即正确分类像素数占总测试像素数的比例;平均精度 Average Accuracy,即每个类别的分类精度先算一遍再取平均,避免大类主导;Kappa 系数,用于衡量分类结果相对于随机分类的改善程度。在主动学习实验里,最核心的不是最终某一次精度,而是“标注预算-精度曲线”。横轴是标注样本总数,纵轴是测试精度,曲线上升越快、最终越高,说明主动学习策略越有效。

4.2 可复现的实验流程

以 Indian Pines 为例,可以按下面的流程搭建实验。

数据预处理阶段:先去除吸水带和噪声带,然后做归一化。光谱波段之间数值范围差异很大,常用最小最大归一化或标准化。如果像素数量太大,可以先做主成分分析 PCA 降维,保留 30 到 50 个主成分,这样能缩短图构建时间,也减少噪声影响。

样本划分阶段:从每个类别里抽取很少的标注样本作为初始集合,例如每类 5 个像素,其余作为测试集。这里要注意,测试集不能和主动学习“查询”出的样本重叠,否则会把人工标注信息泄漏到评估里。更严谨的做法是保留一个完全独立的测试集,主动学习过程中查询到的样本只是补充到训练集,不参与最终精度统计。

实验对照阶段:至少需要四条基线:

  • 随机选样 + 图拉普拉斯传播,用来验证主动学习是否比随机选样有效;
  • 欧氏距离图 + 主动拉普拉斯传播,用来验证费马距离构造的图是否有增益;
  • 不使用主动学习,只随机增加标注样本的监督分类器;
  • 使用未标注像素的方式完全不同的半监督基线,例如标签传播的经典实现或基于密度峰值聚类的方法。

主实验阶段:设置初始标注数、每轮选择数、最大轮数,运行 Fermat Active Laplace Learning,记录每轮结束后的测试精度、每类精度、Kappa 和选中的像素空间位置。

4.3 结果分析该关注哪些维度

不要只看总体精度上升就认为方法有效。真正有价值的结果分析要落回图结构。

第一,观察主动学习选中的像素分布是否偏向少数难类。如果连续几轮都选择同一类别的边界区域,说明多样性约束没有起作用。可以统计每轮选中像素的类别占比,理想状态是主动学习早期偏难分类的类别,后期逐渐覆盖所有类别。

第二,关注单个类别的精度变化。在 Indian Pines 里有些类别本身样本很少,图拉普拉斯路径难以跨越。加入费马距离后,如果这些类别的召回率提升,说明图构建质量确实改善了。

第三,对比欧氏距离图和费马距离图的边连接。可以随机抽取几个类别中心像素,观察它们在图上的最近邻居是否来自同类。如果欧氏距离图连接了较多跨类像素,而费马距离图减少了这种连接,那么后续精度提升就有了解释力。

第四,要记录运行时间。半监督图方法虽然不训练深度模型,但在大图上构建 KNN、运行 Dijkstra、求解线性系统都可能很慢,工程上可复现性同样重要。

4.4 消融实验设计

消融实验可以按模块拆分:

  • A 组:欧氏距离图 + 随机选样,作为最弱基线;
  • B 组:欧氏距离图 + 熵不确定性主动学习,验证主动学习模块;
  • C 组:费马距离图 + 随机选样,验证费马距离图模块;
  • D 组:费马距离图 + 熵不确定性主动学习,验证两个模块组合;
  • E 组:费马距离图 + 熵 + 多样性约束,对应完整方法。

对比 E 组和 D 组,能看到多样性约束的作用;对比 C 组和 A 组,能看到费马距离在相同选样策略下的作用;对比 D 组和 E 组,能看到引入图度数、空间惩罚后是否进一步避免重复选择。每次实验固定随机种子,主动学习的选择会直接影响后续序列,所以随机种子不同可能导致精度波动较大,建议至少跑 5 次取均值并记录标准差。

5. 参数说明与调参建议

5.1 关键参数速查表

Fermat Active Laplace Learning 的参数可以分成图构建、标签传播、主动选择三组。下面是常见参数和注意事项。

参数所属模块含义常见取值调大影响调小影响
k图构建每个像素的 KNN 邻居数量5 到 30图更稠密,连通性更好,但错误边增加,计算量变大图更稀疏,容易断成孤立小图
beta图构建费马距离中的密度惩罚指数0.5 到 2.0路径更倾向绕开稀疏区域,流形保持更强,但计算更敏感接近欧氏距离,密度影响减弱
sigma_F图构建高斯核带宽费马距离的 50% 到 90% 分位数权重变化平缓,拉普拉斯平滑更强权重容易趋向 0,图失去梯度信息
lambda标签传播平滑惩罚强度0.01 到 1.0标签传播更平滑,适合噪声数据更贴合已知标签,但传播范围变小
batch_size主动选择每轮申请标注数5 到 50预算消耗快,选择更全局迭代慢,选择更精细
alpha主动选择空间多样性惩罚系数0.1 到 1.0选中样本空间更分散集中在高不确定性区域

实际项目中不要直接照搬这些取值范围。高光谱数据波段数、类别数、图像大小不同,最佳参数分布会跟着变。建议把参数搜索放在验证集上进行,观察标注预算-精度曲线,而不是只调最终一两个指标。

5.2 邻域数量 k:图连通性和错误边之间的权衡

k 是最直观也最容易出问题的参数。k 太小,很多像素可能没有有效邻居,标签传播无法从标注像素扩展到较远区域;k 太大,距离较远的跨类像素会被强行连起来,拉普拉斯平滑会把类别边界模糊掉。

高光谱场景里,推荐从 k=10 开始。如果图像类别块状明显,比如 Pavia University 的城市屋顶和草地边界清楚,可以适当减小 k;如果类别是连续渐变,比如农作物生长阶段导致的类内变化,需要适当增大 k。构建图时可以统计每个连通分量的节点数,如果出现了多个只包含几个节点的孤立分量,说明 k 太小。

5.3 费马距离参数 beta:流形保持力度的调节钮

beta 控制费马距离对密度的敏感程度。beta 趋近于 0 时,w(x)^(-beta)接近常数,费马距离基本退化成最短路径长度,主要由图结构决定;beta 增大后,低密度区域路径成本显著提高,路径会被迫绕行,这样能减少跨类别跳跃连接。

但 beta 不是越大越好。beta 过大会导致最短路径变得非常绕,很多本应相近的像素被拉开,图边权重迅速衰减,甚至出现大量接近 0 的边,拉普拉斯矩阵数值不稳定。调 beta 时,可以直接观察随机选出的像素对在费马距离下的排序是否符合直觉。例如选择同类别中心像素对时,距离应显著小于跨类别像素对。

5.4 主动学习批次大小与预算分配

主动学习的预算是先定的,例如总共只能申请 200 个标注。每一轮选 20 个,那就跑 10 轮;如果选 5 个,则要跑 40 轮。批次大小影响的是标签传播和主动选择的更新频率。批次越小,每一轮更新越频繁,选择更精细,但总运行时间更长;批次越大,一轮传播后模型变化明显,但可能错过更细的选择顺序。

在高光谱图上,图构建和拉普拉斯求解是主要耗时部分。如果图是固定的,每一轮传播代价不算太高。此时批次可以设小一点,比如 10 到 20。如果每轮都要重新构造图,批次就要大一些,否则大量时间花在重复构图。生产环境里通常只在第一轮构建费马图,后续轮次固定图结构,只更新标签项,这样能大幅提速。

6. 常见问题与排查链路

6.1 拉普拉斯矩阵数值不稳定

现象是求解线性系统时出现 NaN、Inf,或者输出的概率分布几乎全等,完全没有区分度。

可能原因有三个:一是邻接矩阵 W 中有 NaN,通常是距离计算时sigma_F为 0 或距离为负;二是 W 中存在大量极小的权重,归一化后度矩阵 D 的对角元素接近 0,导致 D^{-1/2} 爆炸;三是程序直接对稠密矩阵求逆,内存溢出后结果被污染。

排查时先打印 W 的统计量,包括最小非零权、最大权重、度矩阵的最小对角值。如果发现度接近 0,需要提高 epsilon 平滑项,或构建图时给 W 加上一个很小的单位矩阵扰动。求解线性系统时使用稀疏矩阵格式和共轭梯度法,避免显式求逆。

6.2 主动学习选到大量同类样本

现象是每轮选出的 20 个像素中 18 个来自同一个类别,其他类别几乎不被选中。

原因往往是熵不确定性在没有多样性约束时天然偏爱模型最不清晰的边界区域,而高光谱图像中个别大类别边界面积很大,连续多轮都会占满预算。也可能是图没有传递到某些小类别区域,导致小类别像素的预测概率非常“确定”,熵很低,永远不会被选中。

检查方式是统计每轮选中样本的真实类别分布,打印样本在图像中的坐标。处理方案是加入空间惩罚系数 alpha,或在选择前对未标注像素做聚类,每簇保留排名最高的候选。更彻底的做法是加入类别平衡约束:根据当前已知标签的类别频率,给样本少的类别乘一个权重。

6.3 费马距离图构建太慢

高光谱图像像素数量很大时,欧氏距离 KNN 本身已经耗时,费马距离还要执行最短路径算法。如果实现把所有像素两两距离全部算出来,内存和耗时都会不可接受。

排查步骤是先统计像素总数、特征维度、KNN 阶段的耗时和最短路径阶段耗时。如果是 KNN 阶段慢,改用近似最近邻库或先做 PCA 降维;如果是 Dijkstra 阶段慢,采用只选择锚点像素计算费马距离,再通过锚点距离插值普通像素的方案。最简单的工程化策略是先对图像做超像素分割,得到几百到几千个区域中心,只在中心点上运行费马距离构图,然后给区域内部像素分配锚点对应的图结构。

6.4 类别不平衡导致标签传播偏向多数类

在 Indian Pines 中,某些类别只有几十个样本,而大类有上千个样本。初始标注按每类 5 个抽样时,小类在图中占比极低。拉普拉斯平滑天然会把小类别概率扩散到大类区域,使小类召回率很低。

检查方式看每类混淆矩阵,重点关注小类是否被预测为大类。处理方式有三种:一是初始标注时保证每类至少 5 到 10 个样本;二是在平滑损失里给标签项加类权重,小类样本的标签约束更强;三是主动学习选择时按类别分层配额,每轮选样本前先按类别比例划分候选名额。第三种方法在标注预算有限时最有效,因为能强迫模型覆盖小类区域。

下面把常见问题整理成速查表:

问题现象可能原因检查方式处理建议
拉普拉斯求解结果全是 NaNW 含非数值或度矩阵接近 0打印 W、D 统计量修正距离计算,加单位矩阵扰动
精度在主动学习几轮后不再上升选到的样本高度重复,缺少多样性打印每轮选中样本坐标和类别分布加空间惩罚,或分簇选择
费马距离构图时间太长全源 Dijkstra 或稠密距离矩阵分别统计 KNN 和最短路耗时超像素降规模,锚点计算
小类别始终预测错误图不连通或标签平滑过度看混淆矩阵小类召回率增加小类标签权重,主动分层配额
不同随机种子下精度波动极大初始标注太稀少,传播不稳定多次运行并记录标准差每类保证初始样本数,固定图结构

7. 最佳实践与扩展方向

7.1 可复用清单:从数据到评估

在动手实现前,按下面的清单检查,可以避免大部分返工。

  • 数据检查:确认像素是否包含背景类,背景像素是否应该从图中剔除;确认波段是否已经去噪和归一化;确认标注像素的类别分布。
  • 划分检查:测试集与主动学习查询集严格分开,评估时不使用任何主动查询样本。
  • 图构建检查:KNN 是否出现孤立分量;边权是否出现 NaN 或全部为 0;费马距离计算是否只基于特征,而不是测试标签。
  • 传播检查:拉普拉斯矩阵是否对称;lambda是否在合理范围;求解是否收敛。
  • 主动学习检查:是否对选择结果做了类别和空间分布统计;是否添加了多样性约束。
  • 评估检查:同时记录 OA、AA、Kappa、每类召回率和运行时间。
  • 稳定性检查:至少多次运行,记录平均值和标准差,确保不是随机种子带来虚假优势。

7.2 与深度模型结合的扩展方向

图拉普拉斯方法在特征维度低时可解释性好,但当像素光谱特征复杂时,手工特征往往不够。实际项目中可以先让预训练的 1D-CNN 或光谱 Transformer 提取高光谱像素的高级特征,再用这些特征构建费马距离图。这样图节点仍代表像素,边权重反映的是深层特征空间中的流形关系,比原始光谱直接构图更稳定。

另一种结合方式是把费马距离当作正则项融入深度训练。例如在深度分类器的损失函数里加一项图平滑损失,让相邻像素的预测概率尽量接近。这样深度模型既受益于大量未标注像素的分布信息,又能通过费马图避免在大梯度过渡区域误分类。训练时要注意批量大小和图节点的对齐,不能随机构建 batch,否则图结构断裂。

深度方法的最大问题是计算资源。高光谱图像像素多,如果把每个像素都当独立样本做 Transformer,显存很难承受。常见方案是先做超像素聚合,把几千个超像素作为 token,图拉普拉斯则构建在超像素图上。这样不仅能跑动,还能让标签传播在更粗粒度上更快稳定。

7.3 弱监督、噪声标签与跨域扩展

半监督高光谱分类在实际生产里还会遇到标注不准确的情况。地面真值图中可能存在少量错误标签,如果拉普拉斯学习把错误标签沿图传播,影响会被放大。此时可以在标签项中使用鲁棒损失,比如对置信度低的已标注像素降低约束权重,或者引入标签噪声估计模块。

跨域场景中,模型在一幅图上训练,再换到另一幅光照条件不同的图,代价通常是精度下降。费马图可以帮助缓解一部分域差异,因为图结构依赖的是数据流形而不是绝对光谱幅值。不过更完整的解决思路是把图方法用作后处理:先用域适应模型得到初始概率,再在新图上做拉普拉斯平滑。这样不需要重新训练,也保留了流形约束的好处。

如果读者想在论文或项目中持续改进这个方法,最有价值的切入点是从主动学习策略入手。当前多数图主动学习只使用单轮不确定性,而拉普拉斯传播的闭环结构允许我们模拟“选择样本 -> 加入标签 -> 重新传播 -> 观测不确定性下降”的完整过程。设计一个能提前估计全图不确定性下降幅度的选择策略,通常比单纯提高熵计算复杂度更有理论价值,也更能在高光谱细分类任务中拉开差距。

回到 Fermat Active Laplace Learning 本身,它的价值不在于某一个单独模块有多深,而在于把距离度量、半监督传播和主动选择三个环节串成了一个闭环。实际动手时建议先在小规模子图上跑通,确认图构建、传播、选择、评估每一步输出都符合预期,再逐步扩展到整幅图像。对做高光谱遥感应用的人来说,掌握这种框架比记住某个数据集上的精度数字更重要,因为不同场景下,真正决定分类效果上限的往往不是分类器本身,而是样本之间相似度的定义方式。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询