Progressive Spatial Information-Guided Deep Aggregation Convolutional Network for Hyperspectral Spectral Super-Resolution
用于高光谱超分辨率的渐进式空间信息引导深度聚合卷积网络
(三部分:研究方向:Hyperspectral Spectral Super-Resolution。研究方法:Deep Aggregation Convolutional Network。研究变量:Progressive Spatial Information-Guided)
期刊:IEEE Transactions on Neural Networks and Learning Systems神经网络和学习系统TNNLS IF:10.2
时间:2025年1月8日
作者 : 学生:硕士导:李娇娇 西安电子科技
代码地址:https://github.com/dusongcheng/SIGnet-master
0. Abstract:
研究方向的提出:
基于融合的光谱超分辨率旨在通过将可用的高分辨率多光谱图像(HR-MSI)与相应的低分辨率高光谱图像(LR-HSI)集成,产生高分辨率高光谱图(HR-HSI)。
随着深度卷积神经网络的繁荣,丰富的融合方法在重建性能提升方面取得了突破。
研究不足的提出:
Nevertheless,由于对跨模态信息的利用不足和不当,目前最先进的基于SOTA融合的方法无法产生非常令人满意的恢复质量,只能以较小的上采样规模产生所需的结果,从而影响了实际应用。
提出研究方法和研究变量:
在这篇文章中,我们提出了一种新的渐进式空间信息引导的深度聚合卷积神经网络(SIGnet),用于提高高光谱图像(HSI)光谱超分辨率(SSR)的性能,该网络通过几个密集的残差信道亲和学习(DRCA)块与空间引导传播(SGP)模块配合作为骨干进行装饰。具体来说,DRCA块由编码部分和解码部分组成,它们通过信道亲和性传播(CAP)模块和几个跨层跳过连接连接在一起。详细地说,CAP模块是通过利用信道亲和矩阵来建模特征图的信道之间的相关性来定制的,用于聚合中间层的信道相关性,从而进一步提高重建精度。此外,为了有效地利用两种跨模态信息,我们开发了一种创新的SGP模块,该模块配备了退化部分的模拟和可变形的自适应融合部分,能够逐步细化像素级的粗略HSI特征图。
结果:大量的实验结果表明,我们提出的SIGnet优于几种基于SOTA融合的算法。
两个个模块:
DRCA:CAP+跨层连接
SGP:配备了退化部分的模拟和可变形的自适应融合部分
1. INTRODUCTION(摘要的扩写)
HSI对比MSI和RGB图像提供了了更高的光谱分辨率,在目标检测、分类、和变化检测等[分别引入几篇文章1-5]
但是硬件上的限制,空间分辨率和光谱分辨率的权衡难统一
现有的研究:
1、提高RGB图像的光谱分辨率;缺点:RGB图像自身没有额外的光谱信息,很难获得优异的重建效果;
2、LR—HSI的高空间分辨率图像;缺点:当放大因子较大时,纹理或光谱会变形
**衔接到:**利用先验信息进入融合
高空间分辨率MSI与相应的高光谱分辨率HSI融合(MSI+HSI)+有论文验证可行性[分别引入几篇文章6-10]
用一个段的讲述融合
传统的方法:
基于矩阵分解的方法、基于稀疏表示的方法和基于贝叶斯的方法,
缺点:几乎依赖于利用特定的先验知识,泛化能力不足,不适合复杂场景[分别引入几篇文章11-12]
CNN方法融合:
缺点:交叉模态信息的利用不足和不当,如最新的SOTA方法。[分别引入几篇文章13-15]
PS:这篇文章一直拿(SOTA)基于融合的方法进行对比;
进一步延伸方法:
低空间分辨率LR-HSI上采样+相同空间分辨率的多光谱MSI进行融合[分别引入几篇文章16-18]
优点:MSI中空间信息丰富,
但是CNN过程中有效的融合MSI中的纹理信息生成更精确的HSI,这个问题未被解决(文章中的创新点)
使用一个图进一步说明问题:
在使用低分辨率的LR-HSI上采样时,空间结构被破坏,边界位置的像素明显移位,导致MSI和HSI在空间上无法对齐,反而导致引入噪声,导致信息的丢失。
同时现在的CNN算法都是直接映射,缺乏对中间层中丰富的上下文-光谱信息和相互依赖关系的探索,从而阻碍了cnn的表征能力。[分别引入几篇文章13,19-20]
为了应对上述这些瓶颈,提出一个框架,两个具体的模型
框架:残差+DRCA(密集剩余通道亲和学习块)+SGP(空间引导传播模块)
DRCA:
其中:DRCA模块使用的时U型结构,通过跨层跳跃连接+信道亲和传播模块(CAP)。利用学习到的亲和矩阵更新输入特征映射, 进一步提高网络的重建精度。
SGP:
解决LR-HSI上采样阶段边界位置像素偏移的问题。
原理来源:假设HR-HSI和LR-HSI之间的退化关系类似于HR-MSI和LR-MSI之间的关系.那么考虑HR-MSI和LR-MSI的差异性
具体来说,通过模拟退化部分,从MSI中提取 上采样HSI缺乏的有效空间结构信息,然后利用可变形自适应融合部分自适应恢复更准确的HS特征边界信息。
最后提出贡献:
1)提出了一种基于cnn的SSR网络SIGnet。利用由多个 DRCA块组成的主干与SGP模块配合,逐步生成由粗 到精的HSI图像。在多个数据集上的实验结果表明, 我们的SIGnet具有优异的性能。 (框架)
2)为了聚合中间层的通道相互依赖关系,嵌入在每个 DRCA块中的CAP模块首先利用来自亲和学习网络的亲和矩阵,然后更新输入特征以进行更强大的特征相关学习。 (DRCA中学习强特征——纹理信息)
3)为了很好地解决LR-HSI直接上采样后的结果与HR MSI在空间上不能完全对齐的问题,开发了由模拟退化部分和可变形自适应融合部分组成的SGP模块。(SGP解决融合过程中空间无法对齐的问题)
2.RELATED WORKS
传统方法:
HR-MSIs+LR-HSIs的高光谱超分
1)基于矩阵分解的方法
通过纯光谱特征矩阵及其对应的系数矩阵来线性估计。详细举例:
①[引入Kawakami et al.[11]]利用一种解混技术从高光谱 输入中估计基反射光谱,然后进行从RGB图像中提取的 系数,以基于稀疏先验产生期望的结果。
②再基于解混先验, Yokoya等人提出了一种基于线性光谱混合模型的耦合负矩阵分解算法。
③然后[Lanaras et al.[21]]联合①和②的这两种类型的输入图像解混 为观测的纯光谱和相应的混合系数,其中还考虑了一些 与基本物理性质相关的有用约束。
2)基于稀疏表示的方法
设计字典:从低分辨率HSI中学习一个过完备的字典,进一步利用它来学习高分辨率MSI的稀疏表示。
①[引入Huang[22]]通过K-SVD学习了一个包含纯标签的光谱字典,然后使用上述学习的字典可以预测所需的HSI和输入图像。缺点是未考虑空间相似性
②[引入Akhtar[23]]提出了一种广义的同时正交匹配追踪( SOMP)方法,从HSI中提取反射光谱,然后利用空间结构、信号稀疏性和非负性来解释同一场景的MSI。
③[引入,Fang[24]]提出一种基于超像素的稀疏表示模型,将MSI聚类为每个超像素块内具有较强相似性的超像素,然后在MSI对应的变换字典上同时进行分解,生成相应的大量分数系数矩阵。
3)基于贝叶斯的方法
依赖于输入LR-HSI 和HR-MSI的适当分布来解决融合问题。
①[引入Mian[25]]提出一种基于非参数贝叶斯稀疏表示的光谱超分辨率(SSR)方法,该方法推断出材料反射光谱的概率分布及其比例,然后利用分布估计出所需高分辨率图像的稀疏编码。
②[引入Akhtar[26]],提出了一个全贝叶斯模型来推断合适的高斯过程, 然后恢复光谱细节。
③[引入Wei[27]]提出了一种基于贝叶斯推理 的快速多波段图像融合方法。结合乘法器的块坐标下降 法和交替方向法,该算法可以推广到求解融合问题的贝叶斯估计量
缺点:基于HSI的一些先验知识构建的,例如稀疏先验、低秩先验和全局相似先验,很大程度上依赖于预定义的约束,限制了它们在复杂现实场景中的适用性。
深度学习的方法
深度学习进行融合效果很好[28-32],方法分为有监督和无监督的方法
1)基于监督的深度学习方法
①[引入33-34]利用单幅图像超分辨率算法,用内部图像对LR图像进行上采样,以增强LR HS图像立方体,然后他们通过HCM算法将HR彩色 图像与增强的HS图像融合。
②[引入[35]]假设LR-MSI与LR-HSI之间的映射函数类似于 LR-MSI(从HR-MSI下采样)与LR-HSI之间的映射函数。然后使用深度网络SSRN来探索LR-MSI和LR-HSI之间的频谱映射,然后使用自监督微调策略将学习到的映射转移到估计期望的HR-HSI。
③[引入[36]]使用交叉模态消息插入模块来生成初步融合数据,然后进一步提出了空间重建网络 和光谱重建网络来恢复丢失的空间和光谱信息;
2)基于无监督深度学习的方法:
强调如何有效利 用输入HR-MSI和LR-HSI中光谱和空间成分的先验知识来实现SSR
①[引入37]首先提出 了一种无监督编码器-解码器架构稀疏Dirichlet- net或 USDN,该架构促进了两种模态表示之间的稀疏Dirichlet分布
②[引入[38]]考虑了相机光谱响应曲线,首先提出了一 种简单但有效的网络,以无监督的方式融合两种类型的数 据。然后,将CSR优化层附加到网络中,在一定的物理约束下直接生成最优CSR,或者从给定的CSR数据集中自动选择最佳CSR。
③[引入[39-40]]受经典耦合光谱解混理论的启发,提出了一种基于CNN的双流自编码器框架CUCaNet, 将hsi和msi共同分解为端元矩阵和数度图。然后,在合理的一致性约束下,该网络能够重建潜在HSI。与直接对复杂图像先验建模不同,Zheng等人提出了一种两阶段无监 督自适应学习(UAL)网络,该网络配备了两个连续的模块, 以粗到精的方式重建HSI
缺点:交叉模态信息的探索不足和利用不当
3.OUR METHOD
a.问题描述
设高光谱分辨率HSIs和高空间分辨率MSIs
设HR-HSI为 X ∈ R B × H W X∈R^{B×HW} X∈RB×HW,LR-HSI为 Y ∈ R B × h w Y∈R^{B×hw} Y∈RB×hw,HR-MSI为 Z ∈ R b × H W Z∈R^{b×HW} Z∈Rb×HW。其中HR-MSI和LR-HSI可以通过HR-HSI得到沿着光谱维数和空间维数降解得到
其中 E ∈ R H W × H W E∈R^{HW×HW} E∈RHW×HW是空间模糊矩阵, D ∈ R H W × h w D∈R^{HW×hw} D∈RHW×hw为空间下采样矩阵. N y ∈ R B × h w 表示 Y 中的噪声 ( 同理 Z ) , R ∈ R b × B B 为光谱响应曲线 N_y∈R^{B×hw}表示Y中的噪声(同理Z),R∈R^{b× B} B为光谱响应曲线 Ny∈RB×hw表示Y中的噪声(同理Z),R∈Rb×BB为光谱响应曲线
融合中一般通过LR-HSI中的高光谱信息+HR-MSI中的空间信息来映射构建HR-HSI
映射公式为:
b.网络结构:
第一个部分:浅特征提取+融合
第二部分:增强纹理等细节能力
代码中使用了4个DRCA+1个SGP
DRCA模块:探索深度的空间-频谱相互作用,增强网络的学习和表达能力
CAP模块:对通道间映射相关性进行加强
问题1:什么是GM?(参考了“Squeeze-and-excitation networks,“)
class GMLayer(nn.Module):
def __init__(self, channel=256, reduction=16):
super(GMLayer, self).__init__()
self.avg_pool = nn.AdaptiveAvgPool2d(1)# 使用全局平均池化将输入特征图压缩为通道维度的向量。
self.gm1 = nn.Sequential(
nn.Linear(channel, reduction), # 通过四个独立的全连接层生成四个不同的通道权重向量。
nn.ReLU(inplace=True),
nn.Linear(reduction, channel),
nn.Sigmoid()
)
self.gm2 = nn.Sequential(
nn.Linear(channel, reduction),
nn.ReLU(inplace=True),
nn.Linear(reduction, channel),
nn.Sigmoid()
)
self.gm3 = nn.Sequential(
nn.Linear(channel, reduction),
nn.ReLU(inplace=True),
nn.Linear(reduction, channel),
nn.Sigmoid()
)
self.gm4 = nn.Sequential(
nn.Linear(channel, reduction),
nn.ReLU(inplace=True),
nn.Linear(reduction, channel),
nn.Sigmoid()
)
def forward(self, x):
b, c, _, _ = x.size()
y = self.avg_pool(x).view(b, c)
g1 = self.gm1(y).view(b, c, 1)
g2 = self.gm2(y).view(b, c, 1)
g3 = self.gm3(y).view(b, c, 1)
g4 = self.gm4(y).view(b, c, 1)
channel_guidance = torch.cat((g1, g2, g3, g4), -1) # 将这些权重向量拼接,形成通道引导特征。
return channel_guidance
问题2:为什么这样使用得到了好的光谱和空间相互作用的信息?
生成channel affinity matrix(通道适应性矩阵),即d ∈ {−(p − 1)/2, . . . , 0, . . . , (p − 1)/2},p一般取奇数,使得上下的通道是对称的。(这里取p=5,这样d∈{-2,-1,0,1,2}),这样更新值时,会沿着上下,及相邻4个通道进行更新。
这样的并行方案,所有的值都可以在局部接受场内同时更新,并且随着网络的迭代, 可以发现更大范围的通道之间的相关性。
最后为了网络的稳定性和收敛,需要归一化,然后再沿着C通道更新特征
class Affinity_Propagate_Channel(nn.Module):
def __init__(self, prop_time=4, prop_kernel=5, norm_type='4sum'):
super(Affinity_Propagate_Channel, self).__init__()
self.prop_time = prop_time
self.prop_kernel = prop_kernel
assert prop_kernel == 5, 'this version only support 4 (5 - 1) neighborhood'
self.norm_type = norm_type
assert norm_type == '4sum'
self.in_feature = 1
self.out_feature = 1
def forward(self, guidance, blur_depth):
gate_wb, gate_sum = self.affinity_normalization(guidance) # b*c*4*1*1, b*c*1*1
# pad input and convert to 8 channel 3D features
raw_depth_input = blur_depth
result_depth = blur_depth
for i in range(self.prop_time):
# one propagation
# spn_kernel = self.prop_kernel
result_depth = self.pad_blur_depth(result_depth) # b*c*2*h*w
neigbor_weighted_sum = torch.sum(gate_wb * result_depth, 2, keepdim=False)
result_depth = neigbor_weighted_sum
if '4sum' in self.norm_type:
result_depth = (1.0 - gate_sum) * raw_depth_input + result_depth
else:
raise ValueError('unknown norm %s' % self.norm_type)
return result_depth
def affinity_normalization(self, guidance):
gate1_wb_cmb = guidance.narrow(-1, 0 , self.out_feature).unsqueeze(1) # b*c*1
gate2_wb_cmb = guidance.narrow(-1, 1 * self.out_feature, self.out_feature).unsqueeze(1)
gate3_wb_cmb = guidance.narrow(-1, 2 * self.out_feature, self.out_feature).unsqueeze(1)
gate4_wb_cmb = guidance.narrow(-1, 3 * self.out_feature, self.out_feature).unsqueeze(1)
# gate1:before_top, gate2:before_second, gate3:behind_second, gate4:behind_top
before_top_pad = nn.ZeroPad2d((0, 0, 0, 2))
gate1_wb_cmb = before_top_pad(gate1_wb_cmb).squeeze(1)
gate1_wb_cmb = gate1_wb_cmb[:, 2:, :]
before_second_pad = nn.ZeroPad2d((0, 0, 0, 1))
gate2_wb_cmb = before_second_pad(gate2_wb_cmb).squeeze(1)
gate2_wb_cmb = gate2_wb_cmb[:, 1:, :]
behind_second_pad = nn.ZeroPad2d((0, 0, 1, 0))
gate3_wb_cmb = behind_second_pad(gate3_wb_cmb).squeeze(1)
gate3_wb_cmb = gate3_wb_cmb[:, :-1, :]
behind_top_pad = nn.ZeroPad2d((0, 0, 2, 0))
gate4_wb_cmb = behind_top_pad(gate4_wb_cmb).squeeze(1)
gate4_wb_cmb = gate4_wb_cmb[:, :-2, :]
gate_wb = torch.cat((gate1_wb_cmb, gate2_wb_cmb, gate3_wb_cmb, gate4_wb_cmb), -1)
# normalize affinity using their abs sum
gate_wb_abs = torch.abs(gate_wb)
abs_weight = torch.sum(gate_wb_abs, -1, keepdim=True)
gate_wb = torch.div(gate_wb, abs_weight)
gate_sum = torch.sum(gate_wb, -1, keepdim=True)
gate_wb = gate_wb.unsqueeze(-1).unsqueeze(-1)
gate_sum = gate_sum.unsqueeze(-1)
return gate_wb, gate_sum
def pad_blur_depth(self, blur_depth):
b, c, h, w = blur_depth.size()
blur_depth = blur_depth.view(b, c, h*w).unsqueeze(1)
before_top_pad = nn.ZeroPad2d((0, 0, 0, 2))
blur_depth_1 = before_top_pad(blur_depth).squeeze(1)
blur_depth_1 = blur_depth_1[:, 2:, :].view(b, c, 1, h, w)
before_second_pad = nn.ZeroPad2d((0, 0, 0, 1))
blur_depth_2 = before_second_pad(blur_depth).squeeze(1)
blur_depth_2 = blur_depth_2[:, 1:, :].view(b, c, 1, h, w)
behind_second_pad = nn.ZeroPad2d((0, 0, 1, 0))
blur_depth_3 = behind_second_pad(blur_depth).squeeze(1)
blur_depth_3 = blur_depth_3[:, :-1, :].view(b, c, 1, h, w)
behind_top_pad = nn.ZeroPad2d((0, 0, 2, 0))
blur_depth_4 = behind_top_pad(blur_depth).squeeze(1)
blur_depth_4 = blur_depth_4[:, :-2, :].view(b, c, 1, h, w)
result_depth = torch.cat((blur_depth_1, blur_depth_2, blur_depth_3, blur_depth_4), 2)
return result_depth
第三部分:SGP模块:通过LR-MSI和LR-HSI之间的映射函数,自监督的调整合适的空间结构的映射
通过假设LR-MSI与LR-HSI之间的映射函数类似于 LR-MSI(从HR-MSI下采样)与LR-HSI之间的映射函数。然后使用深度网络SSRN来探索LR-MSI和LR-HSI之间的频谱映射,然后使用自监督微调策略将学习到的映射转移到估计期望的HR-HSI。
过程1(退化部分): M s p a ( H R − M S I )先下采样在上采样, M s p a − M s p a ↓ ↑ = 空间结构信息 M c o n M_{spa}(HR-MSI)先下采样在上采样,M_{spa}-M_{spa}↓↑=空间结构信息M_{con} Mspa(HR−MSI)先下采样在上采样,Mspa−Mspa↓↑=空间结构信息Mcon
然后 Sigmoid(·)将残差特征归一化到(0,1)范围
最后得到的M_con,其中高对比度的像素块被认为属于需要调整的区域。该对比度特征来重新加权Mspa ,并获得注意力图Matt ,该Matt突出显示了由于上采样操作而导致像素块移位的一些区域, 同时抑制了不应进行调整的区域。
问题1:上述过程,为什么可以这样认为?
LR-MSI是空间信息丰富,LR-HSI是高光谱信息丰富。而LR-HSI上采样之后会导致空间结构丢失和LR-MSI↓↑丢失的信息结构大致相同。然后M_spa-M_sap↓↑,两者矩阵分数的差值就是空间上的结构信息。
而且
过程2:可变形自适应融合部分
LR-HSI上采样会导致像素偏移,但是正常卷积都是暴力映射,导致出现噪声等问题。这里使用自适应的可变形卷积,来实现自适应的改变偏移量
参考了17年ICCV+20年TGRS的高光谱遥感图像的分类
from mmcv.ops.deform_conv import DeformConv2d# 这个库自带可变形卷积
class DeformableConvBlock(nn.Module):
def __init__(self, input_channels):
super(DeformableConvBlock, self).__init__()
'''
输入通道数为input_channels*2,是lr和hr拼接的
输出是1(可变形卷积核)*2二维偏移量(x 和 y 方向)*9 3x3 卷积核中的采样点数量(共 9 个点)
'''
self.offset_conv = nn.Conv2d(in_channels=input_channels * 2, out_channels=1 * 2 * 9, kernel_size=3, padding=1,
bias=True)
# 可变形卷积,通过offerset来动态调整位置
self.deformconv = DeformConv2d(in_channels=input_channels, out_channels=input_channels, kernel_size=3,
padding=1)
def forward(self, lr_features, hr_features):
input_offset = torch.cat((lr_features, hr_features), dim=1)
estimated_offset = self.offset_conv(input_offset)# 输出B*(1*2*9)*H*W
output = self.deformconv(x=hr_features, offset=estimated_offset)# 输出维度不变
return output# )# 输出B*(1*2*9)*H*W
框架调用的主函数
import torch
import torch.nn as nn
import torch.nn.functional as F
from network_module import *
# ----------------------------------------
# Initialize the networks
# ----------------------------------------
def weights_init(net, init_type = 'normal', init_gain = 0.02):
"""Initialize network weights.
Parameters:
net (network) -- network to be initialized
init_type (str) -- the name of an initialization method: normal | xavier | kaiming | orthogonal
init_gain (float) -- scaling factor for normal, xavier and orthogonal
In our paper, we choose the default setting: zero mean Gaussian distribution with a standard deviation of 0.02
"""
def init_func(m):
classname = m.__class__.__name__
if hasattr(m, 'weight') and classname.find('Conv') != -1:
if init_type == 'normal':
torch.nn.init.normal_(m.weight.data, 0.0, init_gain)
elif init_type == 'xavier':
torch.nn.init.xavier_normal_(m.weight.data, gain = init_gain)
elif init_type == 'kaiming':
torch.nn.init.kaiming_normal_(m.weight.data, a = 0, mode = 'fan_in')
elif init_type == 'orthogonal':
torch.nn.init.orthogonal_(m.weight.data, gain = init_gain)
else:
raise NotImplementedError('initialization method [%s] is not implemented' % init_type)
elif classname.find('BatchNorm2d') != -1:
torch.nn.init.normal_(m.weight.data, 1.0, 0.02)
torch.nn.init.constant_(m.bias.data, 0.0)
# apply the initialization function <init_func>
print('initialize network with %s type' % init_type)
net.apply(init_func)
# ----------------------------------------
# Generator
# ----------------------------------------
class SGN(nn.Module):
def __init__(self, opt):
super(SGN, self).__init__()
self.bot1 = Conv2dLayer(3, opt.start_channels, 1, 1, 0, 1, pad_type = opt.pad, activation = opt.activ, norm = opt.norm)
self.bot31 = ResidualDenseBlock_1(opt.in_channels, opt.start_channels)
self.main1 = Conv2dLayer(opt.in_channels, opt.start_channels, 3, 1, 1, pad_type = opt.pad, activation = opt.activ, norm = opt.norm)
self.main31 = ResidualDenseBlock_5C(opt.start_channels, opt.start_channels)
self.main32 = ResidualDenseBlock_5C(opt.start_channels, opt.start_channels)
self.main33 = ResidualDenseBlock_5C(opt.start_channels, opt.start_channels)
self.main34 = ResidualDenseBlock_5C(opt.start_channels, opt.start_channels)
self.main4 = Conv2dLayer(opt.start_channels, opt.out_channels, 3, 1, 1, pad_type = opt.pad, activation = opt.activ, norm = opt.norm)
self.defconv = DeformableConvBlock(opt.start_channels)
# x为HR-MSI,x-hyper为LR-HSI
def forward(self, x, x_hyper):
# 双三次插值上采样,倍数为8
x_hyper = torch.nn.functional.interpolate(x_hyper, scale_factor=(8,8), mode='bilinear')
residule = x_hyper# 保存残差
x_hyper = self.main1(x_hyper) # 卷积进行浅特征提取 # out: batch * 32 * 256 * 256
x = self.bot1(x) # 卷积进行浅特征提取 # out: batch * 64 * 128 * 128
spatial_feture = self.bot31(x) #空间特征的保存 # out: batch * 64 * 128 * 128
x_hyper = x_hyper+x #concat
# 四个密集的残差模块+可变形卷积
# 1
x_hyper = self.main31(x_hyper) # out: batch * 32 * 256 * 256
x_hyper = self.defconv(spatial_feture, x_hyper)
# 2
x_hyper = self.main32(x_hyper) # out: batch * 32 * 256 * 256
x_hyper = self.defconv(spatial_feture, x_hyper)
# 3
x_hyper = self.main33(x_hyper) # out: batch * 32 * 256 * 256
x_hyper = self.defconv(spatial_feture, x_hyper)
#4
x_hyper = self.main34(x_hyper) # out: batch * 32 * 256 * 256
x_hyper = self.defconv(spatial_feture, x_hyper)
# 3×3的Conv
x_hyper = self.main4(x_hyper) # out: batch * 3 * 256 * 256
x_hyper = x_hyper+residule
return x_hyper
4.EXPERIMENTS:
占7/15
使用三个典型的合成高光谱数据集:CAVE dataset, the Harvard dataset, NTIRE2018
细节:
实验1:消融实验去考虑CAP模块的上下文适用性,SGP模块退化部分和可变型自适应部分
实验2:定量指标PSNR、MSSIM、SAM、ERGAS、参数量、FLOPs
实验3:适用性。对比上采样8,32倍数的指标
实验4:参数量和计算量的对比
5.结论:
在本文中,对于HSI/MSI的融合任务,我们构建了 一种新颖的渐进SIGnet。在SIGnet中,几个DRCA学习块 与一个SGP模块合作,形成主干。为了聚合通道相互依 赖关系并提高重建结果的质量,我们研究了嵌入在每个 DRCA块中的CAP模块。此外,为了更有效、合理地利 用两个交叉模态信息,我们开发了一种创新的SGP模块, 可以更好地解决上采样阶段边界位置偏移的问题。在合 成数据集和真实数据集上的大量实验结果和消融研究表 明了我们所提出的SIGnet的优越性和鲁棒性。
未来研究的期望:
目前为止,基于融合的大部分工作是使用配对的 MSI和HSI数据来生成高质量的HSI。但是,当我们有一 批MSI数据和一批未配准的HSI数据时,能否通过数据特征融合实现光谱超分辨率仍然是一个未探索的问题