ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

小波变换+平行注意力:多源遥感分类融合新方案

小波变换+平行注意力:多源遥感分类融合新方案 简介这份资源对应北京航空航天大学学报2023年论文《基于小波变换与平行注意力的多源遥感图像分类》的开源代码面向遥感图像处理、机器学习及深度学习方向的研究者与工程师可用于土地利用分类、环境监测、灾害预警等场景。压缩包共56个文件、大小约2.97MB包含19个Python源码、31个编译后的pyc文件、2个YAML环境配置文件、1个PDF论文、1个LICENSE许可证及说明文档其中Python代码覆盖模型定义、数据集处理、训练测试、参数配置与可视化等模块多个环境配置文件便于快速复现实验。目前已有160人学习浏览。源码模块化程度较高并集成了小波变换与平行注意力机制既适合初学者参考多源遥感分类任务的完整实现流程也便于中高级研究者在此基础上扩展改进模型结构。1. 小波变换加平行注意力到底给多源遥感分类解决了什么做多源遥感图像分类的人十有八九都遇到过同一个问题单张光学影像里云遮住的地方、光谱特征接近的地物分类器一测一个错。于是大家开始往模型里塞多源数据——光学的、SAR的、高程的、夜光的指望信息来源多了分类就能稳。结果发现数据堆进去之后模型是能跑但分类精度并没有成比例往上走反而训练时间翻倍、显存爆炸、小目标直接消失。问题出在哪出在“怎么把多源特征真正融合起来”这件事上而不是“有没有把多源数据喂进去”。小波变换加平行注意力这个组合解决的正是这个融合问题。小波变换把每一路遥感影像分解成低频近似和高频细节低频保留整体地物轮廓高频留住边缘和纹理相当于在进网络之前先做了一次结构化分解平行注意力则把两路或多路特征并行推进每路各自做空间和通道上的重要度加权再用可学习的权重把多源特征重新组合。它和串行注意力机制最大的差别在于平行注意力不会让后一路特征被前一路“带偏”每一路都有独立的话语权这对SAR和光学这种差异极大的多源组合尤其关键。这套方案目前最合适的落地场景是土地利用分类、水体提取、城市不透水面识别这几类任务数据源常见搭配是光学影像加SAR、光学加高程或者光学加夜光遥感。适合的人群也明确已经会用PyTorch跑语义分割模型但多源融合一直做得比较粗糙的工程师和研究生以及做遥感产品生产的团队想在现有分类流程里加入可解释的融合结构而不是直接把多个波段拼成一个超长向量丢进网络。我下面要展开的这套设计是按“数据对齐 → 小波分解 → 平行注意力融合 → 分类输出”这条链路组织的每一步都有可以直接复制的实现和参数建议。先把多源对齐这个最容易翻车的地方讲清楚再给你看小波分解和平行注意力到底怎么落进网络里。2. 多源遥感数据对齐所有融合精度都建立在这一步2.1 为什么必须先做几何配准和重采样多源遥感图像的融合最容易被忽视但影响最大的是数据预处理。光学影像和SAR影像的几何形变机理不同光学是中心投影SAR是侧视成像同一个地面目标在两种影像上的位置可能相差几十个像素。如果不做配准后面小波分解出来的高频细节位置对不上平行注意力学出来的融合权重再准也没用——特征在空间上根本不重合。另一个问题是分辨率不一致。Sentinel-2光学影像常用10米波段Sentinel-1 SAR是10米或20米SRTM高程是30米Landsat是30米。直接把不同分辨率的影像叠在一起做分类模型会困惑同一个像素位置上到底是10米分辨率的光谱对应30米的高程还是反过来所以预处理阶段必须统一地理参考和分辨率这是后面所有步骤的地基。我一般会先把任务区域的范围和投影坐标系统一再用GDAL做最近邻或双线性重采样把低分辨率数据升到最高分辨率那一路。这里有个取舍升采样不会增加信息量但能保证像素级对齐降采样虽然省算力但会丢掉高频信息而高频信息恰好是小波分解要重点利用的部分所以能不降就不降。多源数据对齐的一个常见坑是坐标系不一致。国内很多地方用CGCS2000或高斯-克吕格投影而Sentinel系列公开数据默认是WGS84经纬度。如果不先统一到同一坐标系直接按行列号裁剪切片会出现边缘错位。做法是先用GDAL把每一路数据都转成同一投影和像元大小再做裁剪。2.2 用 GDAL 把三源数据切成同一像素网格以一个三源分类任务为例——光学影像4波段可见光加近红外、SAR后向散射VH和VV两个极化、SRTM高程目标是区分耕地、水体、建设用地、林地四类地物。下面这段脚本完成三件事统一投影、统一分辨率、裁剪到任务区的矢量范围。from osgeo import gdal, gdal_array, ogr import numpy as np def align_raster(src_path, ref_path, out_path, res10.0): # 打开参考影像以它的地理范围为目标 ref_ds gdal.Open(ref_path) ref_geo ref_ds.GetGeoTransform() ref_proj ref_ds.GetProjection() xmin, xmax, ymin, ymax ref_geo[0], ref_geo[0] ref_geo[1]*ref_ds.RasterXSize, \ ref_geo[3] ref_geo[5]*ref_ds.RasterYSize, ref_geo[3] # 用gdal.Warp一次性完成投影转换和重采样 warp_options gdal.WarpOptions( formatGTiff, dstSRSref_proj, # 投影坐标系统一到参考影像 xResres, yResres, # 统一像元大小 resampleAlgbilinear, # 连续数据用双线性SAR后向散射也适用 outputBounds(xmin, ymin, xmax, ymax), dstNodata-9999 ) gdal.Warp(out_path, src_path, optionswarp_options) # 光学影像自带地理信息直接作为参考 align_raster(sar_vh.tif, optical_10m.tif, sar_vh_aligned.tif) align_raster(srtm_dem.tif, optical_10m.tif, dem_aligned.tif)这段代码的核心是用gdal.Warp一次性完成投影转换、重采样和范围裁剪而不是先用gdal.Translate再做gdal.Warp。参数里dstSRS把待对齐数据投影到参考影像的坐标系xRes和yRes统一像元大小outputBounds把输出范围限定在任务区dstNodata设成 -9999是为了让配准后边缘的无效像素在后续处理里不会污染特征统计。这里需要注意一个细节数据源里有高程这种连续变量也有光学反射率这种接近连续的变量都用双线性没问题。但如果是土地利用类别图这种离散标签必须用最近邻重采样否则会在类别边界上插出不存在的类别号。SAR后向散射虽然是用分贝表示的连续值但因为噪声水平高用双线性后最好做一次3x3的均值滤波图上看会更干净。2.3 切片策略和训练集划分对齐完成后就是切片。遥感影像通常很大一景Sentinel-2就是10980 x 10980像素整图扔进网络不可能所以要切成小块。切片大小一般取256或512尽量和被分类地物的尺度匹配城市里建筑物尺度小256就够了如果是大范围的农田分类512更合适。切片时有两个参数直接影响模型效果重叠率和类别均衡。重叠率取25%能避免地物被切在切片边缘但训练和推理速度会变慢类别均衡要求每个切片的标签分布不能太偏比如全是水体的切片对模型学习“水体边界长什么样”帮助不大。我一般按“每类样本数不低于总数10%”的底线做筛选把类别严重失衡的切片丢弃而不是做昂贵的数据增广去硬补。多源数据在切片后还要做归一化。SAR的取值一般在-30到0分贝之间光学反射率在0到1之间高程在几十到几千之间三个量纲完全不同不进归一化直接拼特征注意力模块学出来的权重会偏向数值大的通道。做法是逐波段算均值和标准差做z-score归一化并且训练和推理用同一组统计量。3. 离散小波变换做多源特征分解两层DWT的具体配置3.1 为什么选小波变换而不是高通滤波或傅里叶变换多源遥感特征分解这件事傅里叶变换能做普通的高通滤波也能做为什么非要用小波变换关键在于时频局部化能力和多分辨率特性。傅里叶变换把信号整体变到频域空间位置信息完全丢失高通滤波只保留边缘把大尺度的区域纹理扔掉了。小波变换不一样它同时保留频率和位置信息分解出来的低频分量是原图的“去噪版”高频分量是三个方向水平、垂直、对角的细节图正好对应遥感地物的不同结构特征。具体到多源遥感分类场景小波分解的第一个实际收益是去噪与特征增强的天然结合。SAR影像的相干斑噪声在原始像素域很难直接滤除但经过一层小波分解后噪声能量主要落在高频子带里低频子带天然是降噪后的结果。把低频子带作为模型输入等于在数据进网络之前自动完成了一次保边去噪。第二个收益是边缘和纹理特征显式化。地物分类里边缘是最有判别力的信息之一但卷积网络需要很多层才能隐式提取边缘。小波分解把水平、垂直、对角三个方向的高频细节直接摆出来模型只需要学“哪个方向的边缘对哪类地物更重要”学起来轻松得多。这和人类判读遥感影像的方式一致——先看整体色调低频再看边界形状高频。离散小波变换DWT的开销也极其低。一层二维DWT对整张512x512影像做分解只需要几十毫秒而且可以离线预先算好存成npy文件训练时直接读不增加训练时间。相比在网络里加一层可学习的空域滤波DWT是确定性变换无参可学、无过拟合风险这对遥感这种样本量本来就不大的场景特别友好。3.2 Python PyWavelets 的离线分解流程在实际工程中我推荐把DWT作为离线预处理步骤而非网络层来用。原因有两个一是PyWavelets的CPU实现足够快离线做完只做一次二是遥感数据量大如果在线用小波变换层每个epoch都要重新算一遍所有样本纯属浪费算力。下面是用PyWavelets做两层分解的脚本。import pywt import numpy as np def two_level_dwt_decompose(img_array): 对单波段影像做两层离散小波分解 img_array: (H, W) 单波段float32数组已归一化 返回: 第一层和第二层所有子带 coeffs_1 pywt.dwt2(img_array, db2) # 第一层db2小波基 LL1, (LH1, HL1, HH1) coeffs_1 # 只对低频LL1做第二层分解高频子带不再往下拆 coeffs_2 pywt.dwt2(LL1, db2) LL2, (LH2, HL2, HH2) coeffs_2 return { LL1: LL1, LH1: LH1, HL1: HL1, HH1: HH1, LL2: LL2, LH2: LH2, HL2: HL2, HH2: HH2 } # 对光学、SAR、DEM每个波段分别做分解以光学第1波段为例 optical_b1 np.load(optical_b1_aligned.npy) # (H, W)已归一化 subbands two_level_dwt_decompose(optical_b1) np.savez(optical_b1_dwt.npz, **subbands) print(LL2 shape:, subbands[LL2].shape) print(LH1 shape:, subbands[LH1].shape)pywt.dwt2是二维单层离散小波变换返回(cA, (cH, cV, cD))四元组结构。db2是Daubechies-2小波基滤波器长度4时频定位比较均衡比db1即Haar光滑、比db4速度快。对遥感影像来说db2是经验上兼顾边缘保持和去噪效果的稳妥选择。两层分解的逻辑是第一层把原图分成一个低频和三个高频第二层只对低频继续分解得到的LL2是更大尺度上“更干净”的近似图。每一层的尺寸是上一层的一半所以LL2的尺寸是原图的1/4。这里有个实用的设计选择——高频子带只保留第一层就够了因为第二层高频的子带分辨率太低原图1/8对地物边缘的定位已经没有意义还会增加存储开销。3.3 子带重组合成三源特征怎么拼成张量分解出来的子带不能直接全部塞进分类网络因为分辨率不一致通道数也太多。常见的做法是把每一路的子带按“低频高频”组合成多通道张量。拿光学影像来说4个波段各自分解出LL1加LH1、HL1、HH1共4个子带组合起来就是16通道SAR两个极化波段就是8通道DEM单波段就是4通道。每一路数据都变成多通道特征图之后分辨率不一致的问题也来了。LL1和三个高频子带的尺寸都是原图的一半网络如果直接吃这些特征再恢复原图分辨率会损失定位精度。更可行的方案是只把第一层分解的全套子带作为网络的输入让子带特征在原始分辨率一半的情况下完成分类上采样到原图用最近邻插值即可因为遥感分类评估一般在像素级做亚像素误差影响不大。最终的张量组织是沿通道维度拼接。拿三源输入来说每个像元位置的特征向量包含光学16个DWT系数、SAR 8个DWT系数、DEM 4个DWT系数共28个通道。这个28通道的张量就是后面平行注意力模块的输入。这样做的好处是每个通道都有了明确语义——通道0是光学第1波段的LL1通道1是光学第1波段的LH1以此类推而不是直接把原始波段堆叠后进入一个黑匣子。DWT子带这种结构化的特征表示和平行注意力有天然的契合。注意力机制本质上是学“哪些特征通道对当前地物分类最重要”低频频段描述地物类型高频频段描述边界不同地物在两者上表现出不同的重要性分布。平行注意力的作用就是把这些通道按重要性重新加权组合强强联合。4. 平行注意力模块的完整实现两分支独立建模再融合4.1 串行注意力和平行注意力的本质差别多源遥感分类里最常见的融合做法是把多个源的特征沿通道维度拼起来然后接一个SENet式的通道注意力。这种做法的隐含假设是所有源的特征可以放在同一个注意力模型里统一学习权重。但在光学加SAR这种数据里这个假设往往是错的——光学特征和SAR特征对地物的响应机制完全不同统一学习的注意力权重会把两者拉扯到一个折中状态哪一路都没有发挥出应有的判别力。串行注意力先注意光学特征再注意SAR特征或者反过来也存在路径依赖问题。第一路注意力输出的特征会影响第二路注意力的计算第二路学到的权重其实是建立在第一路“过滤后”特征之上而不是原始特征。这意味着SAR特征被“光学视角”改造过了SAR自己的独特信息可能已经丢了。平行注意力则把每条源的特征独立送入一个注意力分支各分支并行计算权重最后再把加权后的特征拼接或求和。它的核心价值在于独立性——光学分支只关注光谱特征的判别力SAR分支只关注后向散射特征的判别力两路互不干扰最后用一个小网络学习两路特征的组合权重。这个“先独立再组合”的结构比“先拼接再统一注意力”多了一个自由度对差异大的多源数据提升最明显。4.2 PyTorch 实现通道注意力加空间注意力的平行分支平行注意力的每个分支我一般用“通道注意力空间注意力”的组合。通道注意力回答“哪些波段重要”空间注意力回答“哪些位置重要”。遥感分类任务里这两个维度都有意义——水体在近红外波段响应独特这靠通道注意力抓建筑物边缘集中在小块区域这靠空间注意力抓。import torch import torch.nn as nn class ParallelAttention(nn.Module): 平行注意力两路特征各自过通道空间注意力再融合 def __init__(self, in_ch_opt, in_ch_sar, reduction8): super().__init__() self.ch_att_opt ChannelAttention(in_ch_opt, reduction) self.sp_att_opt SpatialAttention() self.ch_att_sar ChannelAttention(in_ch_sar, reduction) self.sp_att_sar SpatialAttention() # 融合层两路加权特征拼接后压缩到原始总通道数 self.fusion nn.Conv2d(in_ch_opt in_ch_sar, in_ch_opt in_ch_sar, 1) def forward(self, feat_opt, feat_sar): # 光学分支独立做通道和空间注意力 w_opt self.ch_att_opt(feat_opt) feat_opt feat_opt * w_opt w_sp_opt self.sp_att_opt(feat_opt) feat_opt feat_opt * w_sp_opt # SAR分支独立做通道和空间注意力weights不和光学分支共享 w_sar self.ch_att_sar(feat_sar) feat_sar feat_sar * w_sar w_sp_sar self.sp_att_sar(feat_sar) feat_sar feat_sar * w_sp_sar # 融合拼接然后过1x1卷积 feat_fused torch.cat([feat_opt, feat_sar], dim1) feat_fused self.fusion(feat_fused) return feat_fused class ChannelAttention(nn.Module): def __init__(self, in_ch, reduction8): super().__init__() self.fc nn.Sequential( nn.AdaptiveAvgPool2d(1), # 全局平均池化 nn.Conv2d(in_ch, in_ch // reduction, 1, biasFalse), nn.ReLU(inplaceTrue), nn.Conv2d(in_ch // reduction, in_ch, 1, biasFalse), nn.Sigmoid() ) def forward(self, x): return self.fc(x) class SpatialAttention(nn.Module): def __init__(self): super().__init__() self.conv nn.Conv2d(2, 1, kernel_size7, padding3, biasFalse) self.sigmoid nn.Sigmoid() def forward(self, x): # 在通道维度上取平均和最大拼成两通道图 avg_out torch.mean(x, dim1, keepdimTrue) max_out, _ torch.max(x, dim1, keepdimTrue) x_cat torch.cat([avg_out, max_out], dim1) return self.sigmoid(self.conv(x_cat))这个实现里有几个关键设计。第一光学和SAR两个分支的通道注意力是完全独立的参数各自学会各自源的通道重要性这是平行注意力区别于拼接后统一SENet的核心。第二空间注意力用的是平均池化加最大池化拼接的结构平均池化捕捉整体重要性分布最大池化捕捉最显著的响应位置两者互补。第三融合层用的是1x1卷积而不是简单的拼接后分类1x1卷积能学出跨源特征的线性或非线性组合。reduction参数控制通道注意力的压缩比。经验值8到16之间reduction太小参数量大且容易过拟合太大则通道间的差异性会被压平。遥感多源特征通道数通常在32以上reduction取8就能把每个分支压到4个以上通道信息保留和参数压缩比较均衡。3x3卷积核的空间注意力和7x7的区别值得说明。3x3适合小地物建筑物、道路感受野小定位准7x7适合大范围地物农田、水体感受野大覆盖广。在遥感分类中我一般先用7x7因为影像经过对齐和切块后单块地物的空间尺度往往覆盖几十个像素7x7能更好地感知上下文。4.3 分类头和损失函数的选择平行注意力模块输出的融合特征还要过一个分类头才能得到最终的分类图。分类头通常是一个1x1卷积加softmax。1x1卷积把融合特征映射到类别数维度每个像素在所有类别上做一个概率分布。后面接交叉熵损失这是语义分割任务的标准配置。类别不均衡是遥感分类的常态——建设用地可能只占5%耕地占60%。直接交叉熵会让模型对少数类的召回率极低。常见的做法是加权交叉熵每类的权重设为样本占比的倒数让少数类在损失函数中获得更大的梯度。但要注意权重不能设得过大否则会出现“牺牲多数类精度来刷少数类”的假指标。import torch.nn.functional as F class FocalLoss(nn.Module): Focal loss处理遥感地物类别不平衡 def __init__(self, alpha0.25, gamma2.0): super().__init__() self.alpha alpha self.gamma gamma def forward(self, logits, targets): ce_loss F.cross_entropy(logits, targets, reductionnone) pt torch.exp(-ce_loss) # 当前样本的正确类概率 focal_weight (1 - pt) ** self.gamma # 难样本权重高 loss self.alpha * focal_weight * ce_loss return loss.mean() # 训练时用Focal Loss替代CrossEntropyLoss criterion FocalLoss(alpha0.25, gamma2.0)Focal loss的两个参数alpha和gamma平衡了多数类和难例的权重。alpha设为0.25意味着正样本少数类的损失被放大4倍gamma设为2.0则让已经分类正确的简单样本的损失进一步压制。这两个参数组合是比较通用的一组起点值。如果你发现模型对少数类依然不敏感可以调高alpha到0.5甚至0.75如果发现收敛慢或者多数类精度掉得厉害把gamma降到1.0。DWT子带特征进入平行注意力后还有个细节值得留个心眼高频子带的能量分布非常稀疏且集中在边缘线附近空间注意力容易把注意力集中在边缘上忽略了区域内部特征。一种补偿做法是把三个方向的高频子带先求绝对值再做一层全局平均池化加回低频特征里相当于给低频特征补充一个方向不敏感的纹理强度指示。5. 避坑指南多源遥感分类里我踩过的五个真实坑5.1 归一化统计量不一致训练和推理结果对不上现象模型在训练集上验证精度89%一到新区域的推理数据上掉到71%而且掉的全是水体类别。原因训练时用的归一化均值和标准差是从训练切片里统计的而推理时直接用了全图统计值两者的分布差异被模型当成了特征差异。尤其在SAR和DEM这两路数据上不同区域的后向散射强度和高程分布差异巨大用固定统计量归一化等于人为引入了域偏移。解决训练和推理必须共用同一个归一化配置文件不能各自统计。更稳的做法是把归一化参数存成json文件推理脚本加载这个文件后按相同公式标准化。5.2 小波分解选了Haar基边缘出现方块伪影现象分类结果的地物边界呈锯齿状特别像低分辨率游戏的像素边缘。原因Haar基db1的滤波器长度只有2时域分辨率极低重构后的高频子带会把单像素的边缘变成方块状。切片尺寸小、地物边缘密集时尤其明显。解决把pywt.dwt2里的wavelet参数从haar改成db2或db3。代价是计算量略增但边缘质量提升明显。如果追求更光滑的边缘可以用bior3.3双正交小波但复现性不如Daubechies系稳定。5.3 注意力分支的解耦不彻底平行退化成串联现象平行注意力模型的精度和直接拼接后加统一SENet没有明显区别说明“平行”并没有起作用。原因检查代码发现两个分支虽然计算了各自的注意力权重但在反向传播时共享了底层的特征提取骨干网络。这意味着光学和SAR特征在进入平行注意力之前就已经被同一个backbone耦合过一轮“平行”的程度打了折扣。解决要么把两路数据的backbone完全分开每路独立特征提取要么把其中一路的高频子带直接以数字特征形式拼到融合层之后绕开backbone的耦合。最常见的是后者——DWT高频子带不进backbone直接拼到融合特征上等于保留了多源数据在全流程中的独立性。5.4 Focal loss的alpha调太高多数类精度雪崩现象有次把alpha调到0.5试图拯救不透水面占比仅4%结果耕地精度从92%掉到71%总体精度还不如不调。原因alpha0.5意味着多数类样本的损失权重被压到0.5倍而少数类被放大到2倍损失函数里多数类的贡献不足模型优化方向被少数类的梯度主导导致多数类上出现系统性误判。解决alpha的调试要看着“总体精度-少数类精度”的权衡曲线来选。经验值0.25做起如果总体精度下降超过3个百分点就不要再加了。gamma2.0对难样本的压制力已经足够非必要不动。5.5 切片重叠率太高推理速度被拖垮现象设置了50%重叠率做推理结果一景影像跑了43分钟完全无法用于业务生产。原因重叠率50%意味着每个像素被推理了4次推理耗时是零重叠的4倍还没算拼接和投票的时间开销。训练时25%重叠是合理的推理时根本不需要重叠。解决训练切片重叠25%推理切片重叠设为0边界处的分类不确定性用平滑后处理解决见第6章。如果确实需要重叠投票把投票代价控制在重叠率低于12.5%。6. 模型验证的正确打开方式消融实验和推理后处理6.1 消融实验怎么做才有说服力平行注意力和DWT分解这两个模块到底各自贡献了多少精度需要通过消融实验来回答。我建议做四组对比完整模型DWT平行注意力、去掉DWT只保留平行注意力输入改为原始波段、去掉平行注意力只保留DWT融合改为直接拼接、以及基线模型原始波段直接拼接分类。这样每一组实验的精度差都归因于一个模块的增减逻辑清晰。评估指标除了总体精度和Kappa系数还必须看每类的F1分数。总体精度会被多数类主导比如耕地占60%时总体精度91%可能只是因为耕地分得准水体可能只有55%的F1。正确做法是分别计算四类的F1然后取宏平均F1宏平均F1对类别不均衡不敏感是判断融合结构是否有价值的核心指标。四组实验的对比规律通常是完整模型宏平均F1最高去掉DWT后边缘类道路、小型建筑F1明显下降去掉平行注意力后类别间混淆增多——SAR高亮区域和光学阴影区域被归为同一类。这些结果符合预期DWT贡献的是边缘结构信息平行注意力贡献的是跨源判别力。如果某组实验出现了违反这个规律的结果优先怀疑代码实现有问题而不是理论有问题。6.2 推理后的马尔可夫随机场平滑分类网络输出的结果通常是逐像素独立预测没有考虑空间邻域的一致性。这在遥感分类里的典型表现是“椒盐噪声”——单像素的小块地物被误分类视觉上看起来特别脏。马尔可夫随机场MRF后处理是经典的解决手段利用相邻像素的标签耦合关系把孤立的小块错误标签修正为邻域主要标签。MRF平滑的代价是处理一张512x512切片的分类结果大约需要0.4秒全图范围内可以接受。之前还见过用条件随机场CRF做后处理的方案效果确实更好但CRF的迭代推理非常慢一景全图可能要跑十几分钟生产场景不太推荐。MRF在速度和平滑效果之间更平衡。6.3 我自己的模型迭代习惯做多源遥感分类这一年多我养成的一个习惯是每次改动模型结构之后第一件事不是看精度而是把分类结果图叠加到光学影像上做目视检查。一张分类图上是否存在规则排列的误分类块是否在河流弯道处出现了断裂这些问题从数字上不一定看得出来但目视检查一眼就能发现。如果分类图上的误分类现象主要是零散的椒盐点那是后处理不足如果是成片的系统性误分类比如某个区域全部被分成林地那大概率是训练数据里该区域的样本分布有问题回头补样本比调模型参数更值得。这个习惯帮我省掉了好多次盲目调参。模型调参是有边际效应的数据质量和预处理往往才是决定精度的那根木桩。整个方案从数据对齐到小波分解、平行注意力、训练调参、验证评估链路比单纯的“拼接多源波段进网络”长出一大截但每一环都是可解释、可定位的。DWT让特征结构化平行注意力让多源融合真正独立又互补这两个设计带来的精度提升是实打实的不是玄学。希望这套实现和踩坑思路对你有所帮助做的时候少走几步弯路。本文还有配套的精品资源点击获取
返回列表