本项目面向高光谱图像去噪增强任务,基于 ICVL 31 波段高光谱
.mat数据和 HSTNet 模型,完成数据读取、噪声合成、模型训练、测试评估、单图推理和 PyQt6 桌面端可视化展示。
目录
-
数据集
-
模型架构
-
训练过程
-
训练参数
-
训练指标
-
可视化图说明
-
系统功能
-
技术栈
-
项目结构
-
启动教程
-
作者信息
一、数据集
本项目使用 ICVL 高光谱图像数据集的 .mat 版本数据。ICVL 数据集由 Ben-Gurion University 的 ICVL 实验室采集,常用于高光谱图像重建、去噪、增强和光谱分析等任务。
项目中的高光谱图像增强任务不依赖人工标注框或分类标签,而是以干净高光谱图像作为监督目标,通过代码动态添加高斯噪声,构造"噪声高光谱图像 -> 干净高光谱图像"的监督学习样本。
| 统计项 | 数值 |
|---|---|
当前本地 .mat 文件数 |
10 个 |
| 训练集 | 8 个 |
| 验证集 | 1 个 |
| 测试集 | 1 个 |
| 单个样本维度 | [31, 1392, 1300] |
| 光谱波段数 | 31 个 |
| 光谱范围 | 400nm-700nm |
| 波段间隔 | 10nm |
| 默认数据目录 | data/icvl_mat/ |
数据读取后统一转换为:
[31, H, W]
其中 31 表示从 400nm 到 700nm 的 31 个光谱波段,H 和 W 表示图像高度和宽度。程序会自动识别 .mat 文件中的 cube、rad、img、data 等常见字段,并将数据归一化到 [0, 1]。
数据处理流程如下:
扫描 data/icvl_mat/
↓
按文件名稳定排序
↓
80% / 10% / 10% 划分训练、验证、测试数据
↓
读取 .mat 并统一为 [31,H,W]
↓
训练阶段随机裁剪 64×64 patch
↓
动态添加高斯噪声
↓
构造 noisy -> clean 训练样本
二、模型架构
项目使用 HSTNet 完成高光谱图像去噪增强。模型输入为噪声高光谱图像,输出为增强后的干净高光谱图像。
噪声高光谱图像 [B,31,H,W]
↓
增加 3D 卷积输入维度
↓
3D Conv 特征提取头
↓
HSTBlock × 4
├── 局部空间-光谱特征模块
└── 谱向 Transformer 注意力模块
↓
3D Conv 噪声预测尾部
↓
输入图像 - 预测噪声
↓
增强结果 [B,31,H,W]
核心模块说明:
| 模块 | 作用 |
|---|---|
| 3D Conv Head | 将输入高光谱立方体映射到高维特征空间 |
| 局部空间-光谱特征模块 | 使用 3D 卷积提取空间邻域和光谱邻域上下文 |
| 谱向 Transformer 模块 | 沿 31 个光谱波段建模长距离光谱相关性 |
| 残差噪声预测 | 预测噪声分量,再用输入减去预测噪声得到增强结果 |
| 输出裁剪 | 将增强结果限制在 [0, 1] 范围内 |
本项目的优化点主要体现在三个方面:
| 优化层面 | 具体做法 | 解决问题 |
|---|---|---|
| 结构优化 | 结合 3D 卷积和谱向 Transformer | 同时恢复空间纹理和光谱一致性 |
| 训练策略 | 随机裁剪 patch,并使用 10/255-50/255 盲高斯噪声训练 | 提高不同噪声强度下的泛化能力 |
| 推理部署 | 支持分块推理、CPU 兜底和中文路径安全权重读写 | 适配普通本地电脑和 Windows 中文路径 |
三、训练过程
训练入口为:
python train.py
也可以通过统一入口启动:
python main.py train
完整训练流程如下:
-
读取
data/icvl_mat/下的.mat文件。 -
按文件名排序后划分训练集、验证集和测试集。
-
将高光谱数据统一转换为
[31,H,W],并归一化到[0,1]。 -
训练阶段随机裁剪 patch,并动态添加随机高斯噪声。
-
HSTNet 前向推理,输出增强后的高光谱图像。
-
使用 L1 Loss 计算增强结果与干净图像之间的误差。
-
使用 AdamW 优化器更新模型参数。
-
每轮在
25/255和50/255两种固定噪声强度下进行验证。 -
保存最后一轮权重
last_hstnet.pth。 -
按验证集平均 PSNR 保存最优权重
best_hstnet.pth。 -
生成训练日志、指标表格和曲线图。
训练产物默认保存在:
outputs/train/
四、训练参数
默认训练参数如下:
| 参数 | 默认值 | 说明 |
|---|---|---|
data_dir |
data/icvl_mat |
ICVL .mat 数据目录 |
save_dir |
outputs/train |
训练产物保存目录 |
epochs |
20 |
训练轮数 |
batch_size |
2 |
训练批大小 |
patch_size |
64 |
随机裁剪 patch 大小 |
samples_per_image |
16 |
每张训练图每轮采样次数 |
lr |
1e-4 |
学习率 |
weight_decay |
1e-4 |
AdamW 权重衰减 |
base_channels |
32 |
HSTNet 基础通道数 |
num_blocks |
4 |
HSTBlock 数量 |
heads |
4 |
谱向注意力头数 |
num_workers |
0 |
DataLoader 线程数 |
测试与推理参数如下:
| 参数 | 默认值 | 说明 |
|---|---|---|
weights |
outputs/train/checkpoints/best_hstnet.pth |
默认测试权重 |
tile_size |
128 |
分块推理尺寸 |
overlap |
16 |
分块重叠像素 |
sigma |
25 |
单图推理时合成噪声强度,单位为 /255 |
limit |
0 |
测试样本数量限制,0 表示全部测试 |
五、训练指标
本项目已完成一组 20 轮训练。训练使用 CUDA 设备,训练集 8 张、验证集 1 张。主要指标包括:
| 指标 | 含义 | 趋势 |
|---|---|---|
| Loss | L1 重建损失 | 越低越好 |
| PSNR | 峰值信噪比 | 越高越好 |
| SSIM | 结构相似性 | 越高越好 |
| SAM | 光谱角制图 | 越低越好 |
第 1 轮和第 20 轮指标对比如下:
| 指标 | 第 1 轮 | 第 20 轮 | 变化 |
|---|---|---|---|
| Train Loss | 0.155729 | 0.021444 | 下降 0.134285 |
| Val Loss | 0.121887 | 0.021654 | 下降 0.100233 |
| PSNR25 | 17.27 dB | 31.42 dB | 提升 14.15 dB |
| PSNR50 | 16.78 dB | 29.82 dB | 提升 13.04 dB |
| 平均 SSIM | 0.0963 | 0.7327 | 提升 0.6364 |
| 平均 SAM | 48.48 | 8.38 | 下降 40.10 |
验证集平均 PSNR 最优模型出现在第 13 轮,对应权重为:
outputs/train/checkpoints/best_hstnet.pth
| 指标 | 数值 |
|---|---|
| Epoch | 13 |
| Train Loss | 0.025301 |
| Val Loss | 0.020027 |
| PSNR25 | 33.49 dB |
| PSNR50 | 29.48 dB |
| 平均 PSNR | 31.48 dB |
| 平均 SSIM | 0.7649 |
| 平均 SAM | 7.11 |
使用 best_hstnet.pth 在测试集上评估的结果如下:
| 噪声强度 | 噪声 PSNR | 去噪 PSNR | PSNR 提升 | 噪声 SSIM | 去噪 SSIM | SSIM 提升 | 噪声 SAM | 去噪 SAM | SAM 下降 |
|---|---|---|---|---|---|---|---|---|---|
| 25/255 | 21.45 | 31.97 | 10.52 | 0.1533 | 0.6740 | 0.5207 | 34.48 | 21.88 | 12.60 |
| 50/255 | 15.96 | 29.97 | 14.02 | 0.0505 | 0.6113 | 0.5608 | 42.43 | 15.89 | 26.54 |
六、可视化图说明
训练曲线保存在:
outputs/train/plots/
| 文件 | 横轴 | 纵轴 | 说明 |
|---|---|---|---|
all_metrics.png |
Epoch | Loss、PSNR、SSIM、SAM | 综合展示训练和验证指标变化 |
loss_curve.png |
Epoch | Loss | 展示训练损失和验证损失变化 |
psnr_curve.png |
Epoch | PSNR | 展示 sigma25、sigma50 和平均 PSNR |
ssim_curve.png |
Epoch | SSIM | 展示 sigma25、sigma50 和平均 SSIM |
sam_curve.png |
Epoch | SAM | 展示 sigma25、sigma50 和平均 SAM |
lr_curve.png |
Epoch | Learning Rate | 展示学习率变化 |
测试评估图保存在:
outputs/test/plots/
| 文件 | 说明 |
|---|---|
test_psnr.png |
不同噪声强度下噪声图像与增强结果的 PSNR 对比 |
test_ssim.png |
不同噪声强度下噪声图像与增强结果的 SSIM 对比 |
test_sam.png |
不同噪声强度下噪声图像与增强结果的 SAM 对比 |
test_improvement.png |
PSNR、SSIM、SAM 改善幅度柱状图 |
PyQt6 系统中的"指标展示"页面会读取训练和测试图像文件,并在桌面端界面中展示。
七、系统功能
| 模块 | 功能说明 |
|---|---|
| 登录 / 注册 | 支持本地账号注册和登录,用户信息保存到 data/system/users.json |
| 首页总览 | 展示模型状态、运行设备、数据数量、历史记录和最近检测摘要 |
| 单图增强 | 选择单个 .mat 文件,添加噪声并调用 HSTNet 输出增强结果和指标 |
| 批量增强 | 选择包含 .mat 文件的目录,批量生成增强 .mat 和伪彩色预览图 |
| 测试评估 | 在 GUI 内执行测试集评估,输出测试指标和结果文件 |
| 光谱分析 | 对指定像素位置绘制 31 个波段的光谱响应曲线 |
| 波段可视化 | 支持单波段灰度显示和伪彩色 RGB 合成显示 |
| 历史记录 | 保存检测时间、用户、文件名、模型、噪声强度和指标结果 |
| 指标展示 | 读取训练和测试过程生成的 .png 指标图 |
| 模型管理 | 查看默认权重、选择本地权重、加载模型并查看运行设备 |
系统默认权重路径为:
outputs/train/checkpoints/best_hstnet.pth
GUI 中普通 .jpg/.png/.bmp 图片只用于界面预览,模型实际处理对象为 31 波段 .mat 高光谱数据。
八、技术栈
| 类别 | 技术 |
|---|---|
| 开发语言 | Python 3.9 |
| 深度学习框架 | PyTorch |
| 模型结构 | HSTNet、3D CNN、Transformer |
| GUI 框架 | PyQt6 |
| 数据格式 | MATLAB .mat |
| 数据读取 | scipy、h5py |
| 数值计算 | numpy |
| 图表绘制 | matplotlib |
| 数据下载 | huggingface_hub、requests |
| 数据持久化 | JSON、CSV |
九、项目结构
c269/
├── app/
│ ├── data/ # ICVL 数据读取、划分和下载
│ ├── infer/ # HSTNet 推理封装
│ ├── models/ # HSTNet 模型结构
│ ├── test/ # 测试集评估与结果导出
│ ├── train/ # 训练、验证、日志和指标图生成
│ ├── ui/ # PyQt6 桌面端界面
│ └── utils/ # 指标、噪声、可视化、设备和权重读写工具
├── data/
│ ├── icvl_mat/ # ICVL .mat 数据目录
│ └── system/ # GUI 用户信息和历史记录
├── outputs/
│ ├── train/ # 训练权重、日志和指标图
│ ├── test/ # 测试评估日志、图表和样本结果
│ ├── infer/ # 命令行推理输出目录
│ ├── gui_batch/ # GUI 批量增强输出目录
│ ├── gui_test/ # GUI 测试评估输出目录
│ └── gui_exports/ # GUI 手动导出结果
├── download_icvl.py # ICVL 数据独立下载入口
├── main.py # 训练、测试、推理、GUI 统一入口
├── requirements.txt # 项目依赖
├── test.py # 独立测试入口
└── train.py # 独立训练入口
十、启动教程
1. 环境准备
推荐使用 Python 3.9。进入项目根目录后安装依赖:
cd <项目根目录>
pip install -r requirements.txt
2. 数据集准备
方式一:独立下载 ICVL .mat 数据。
python download_icvl.py --endpoint https://hf-mirror.com --max-files 10
方式二:训练前自动下载。
python train.py --download-icvl --hf-endpoint https://hf-mirror.com --max-download-files 10
方式三:手动下载 .mat 文件,并放入:
data/icvl_mat/
3. 模型训练
使用默认参数训练:
python train.py
指定常用训练参数:
python train.py --epochs 20 --batch-size 2 --patch-size 64 --samples-per-image 16
训练完成后会生成:
outputs/train/checkpoints/best_hstnet.pth
outputs/train/checkpoints/last_hstnet.pth
outputs/train/logs/train_log.csv
outputs/train/plots/
4. 测试评估
python test.py --weights outputs/train/checkpoints/best_hstnet.pth
测试结果默认保存到:
outputs/test/
5. 单图推理
python main.py infer --input data/icvl_mat/xxx.mat --weights outputs/train/checkpoints/best_hstnet.pth
指定输出文件:
python main.py infer --input data/icvl_mat/xxx.mat --weights outputs/train/checkpoints/best_hstnet.pth --output outputs/infer/result.mat --preview outputs/infer/result.png --sigma 25
6. 启动桌面系统
python main.py gui
首次进入系统时需要注册账号。账号信息和历史记录保存在本地:
data/system/users.json
data/system/history.json
7. 推荐运行顺序
python download_icvl.py --endpoint https://hf-mirror.com --max-files 10
python train.py --epochs 20 --batch-size 2 --patch-size 64
python test.py --weights outputs/train/checkpoints/best_hstnet.pth
python main.py gui
如果已经存在数据和权重,可以直接启动系统:
python main.py gui
十一、作者信息
| 项目 | 内容 |
|---|---|
| 作者 | Michael-Jay |
| 联系方式 | 微信:Jay8059 |
| 开发年份 | 2026 年 |
| 所属领域 | 高光谱图像增强、计算机视觉 |
本项目支持二次开发和定制扩展,可根据实际需求调整数据集格式、模型结构、训练策略、界面功能、结果导出和部署方式。如需定制开发或远程部署,可通过vx:Jay8059 联系。








