Schwertlilien
As a recoder: notes and ideas.

Thu Oct 30 2025 00:00:00 GMT+0800 (中國標準時間)

实验说明

数据

  • metadata: new_metadata.csv
  • HSI 原始文件目录: processed_npy/
  • 有效样本数(过滤了无效 toxin_value): 200 样本

值得说明的是:此处的样本数量是因为内存空间不足,导致目前仅能运行200样本。昨天已对服务器空间进行整理,后续可以用全部样本进行测量。

  • HSI 原始空间尺寸:多为 960×960(预处理会 resize 到 target_size)
  • 目标尺寸:256×256
  • CBAM 检测到的 common spectral channels: 600(preprocess_data 输出);实际用于训练时由 loader 返回的 channels = detected_input_channels(本实验自动使用该值构造模型)
  • 注意:部分 .npy 文件存在 header/大小不一致(示例:6-22.npy),已在 loader 中做容错(记录 bad_npy.log,并在必要时填充/裁剪)

数据预处理

已统一并复用 CBAM_model.py 的预处理流程(preprocess_data):

  • HSI:
    • resize -> target_size (256×256)
    • 统一通道数推断/重采样(使用 CBAM 的 channel inference / resample 逻辑)
    • 全局 per-channel mean/std 计算并应用(Z-score 标准化) — 这保证 Fusion 与 CBAM 在 HSI 数值尺度上一致
  • Fluor (Value_Raw):
    • 计算并记录 mean/std,training 时可做标准化(preprocess_data 已计算并可返回 scaler)
  • Toxin label:
    • 计算并缓存 MinMax (或其他) scaler(preprocess_data 输出 label_scaler)
  • RGB:
    • 通过 metadata 尝试定位并读取图像(若找不到,返回全零张量);图像被 resize 到 target_size 并 ToTensor()

模型

选用了不同的encoder对各个模态的数据提取特征之后,进行特征融合。此处选择了晚期融合的四种方式。

  1. CBAMFusion: HSI 用 CBAM 卷积路径,RGB 用 ResNet18(fc 替换),Fluor 用小 MLP,late fusion(concat -> fc)
  2. SimpleFusion: 简单 late fusion(HSI-CNN + ResNet18 + Fluor-MLP -> concat -> classifier)
  3. AttentionFusion: 3 模态特征后用小注意力网络学习加权融合
  4. WeightedLateFusion: 可学习的模态权重(参数化向量 -> softmax)

实验配置

训练/验证划分:由 preprocess_data 返回(使用其默认划分策略)

1
2
3
4
5
6
7
8
9
10
11
12
metadata_csv = "/Users/.../processed_npy/new_metadata.csv"
npy_root = "/Users/.../processed_npy"
batch_size = 8
num_epochs = 50
device = cpu (若 GPU 可用则自动使用 cuda)
target_spectral_channels: 30 (脚本中设置,但实际使用 detected channels)
target_size = (256, 256)
optimizer = AdamW(model.parameters(), lr=1e-4, weight_decay=1e-5)
loss = MSELoss()
grad clipping: clip_grad_norm_ max_norm = 1.0
hidden_dim = 128
ResNet backbone: pretrained ResNet18 (weights handled with torchvision API compatibility)

实验运行结果

评估指标选用:MAE、RMSE、R²

  • 训练时长:450min(例如:每 epoch 平均 3 分钟)

  • 最佳验证 loss (MSE): 0.0006

    CBAMFusion | MAE: 4.0241 | R²: 0.9961 | RMSE: 4.6529
    SimpleFusion | MAE: 3.5551 | R²: 0.9969 | RMSE: 4.1378
    AttentionFusion | MAE: 2.7030 | R²: 0.9978 | RMSE: 3.4530
    WeightedFusion | MAE: 3.2109 | R²: 0.9970 | RMSE: 4.0845

Figure_1

我现在需要做一个消融实验,也就是对三种模态的数据检测:高光谱,rgb,荧光值分别单独输入模型得到的结果,从三个模态中选两个得到的结果,以及三个模态全用得到的训练结果。

CBAMFusion | MAE: 3.5327 | R²: 0.9967 | RMSE: 4.2312
SimpleFusion | MAE: 3.6707 | R²: 0.9966 | RMSE: 4.3289
AttentionFusion | MAE: 2.5240 | R²: 0.9981 | RMSE: 3.2732
WeightedFusion | MAE: 2.9873 | R²: 0.9973 | RMSE: 3.8291

image-20251102001925441

我的数据集是具有三模态的数据高光谱.spe+.hdr,荧光值(标量),以及原始rgb图像.bmp.假如说我想按照我的数据集来加载入这个I2MoE的方法,用I2MoE的方法在我的数据集上训练得到回归数值的结果。那么我首先需要在/Users/schwertlilien/Downloads/test/I2MoE-main/src/common/datasets中加载入我的数据集,其模态是HRF(hsi,rgb,flour)。预测结果是回归得到数值。然后再在train_transformer.py中加载我的数据集,然后在/Users/schwertlilien/Downloads/test/I2MoE-main/scripts/train_scripts/imoe/transformer中写入脚本,我是否就能成功运行?首先告诉我我想要得到结果“用I2MoE的方法在我的数据集上训练得到回归数值的结果。”这个的步骤是否正确,然后指导我一步步的做。我的数据集的数据处理部分你可以参考/Users/schwertlilien/Downloads/test/I2MoE-main/CBAM_model.py,以及/Users/schwertlilien/Downloads/test/I2MoE-main/Fusion.py,/Users/schwertlilien/Downloads/test/I2MoE-main/src/common/datasets/mosi.py中的内容,并告知我如何一步步完成我的目的。需要说明的是,因为我的数据是三模态,做的回归任务,因此我认为也可以借鉴:/Users/schwertlilien/Downloads/test/I2MoE-main/src/common/datasets/mosi.py中的def load_and_preprocess_data_mosi_regression(args)

再次训练了一下,得到的结果是:

🎯 WeightedFusion 训练完成!
⏰ 总用时: 1407.15 秒 (23.45 分钟)
📊 平均每轮用时: 28.14 秒
✅ WeightedFusion Results:
MAE: 315382.7500, R²: 0.2437, RMSE: 356854.2667

MODEL COMPARISON RESULTS

CBAMFusion | MAE: 260728.6562 | R²: 0.4745 | RMSE: 297479.2839
SimpleFusion | MAE: 225593.0156 | R²: 0.6269 | RMSE: 250650.9322
AttentionFusion | MAE: 184261.1094 | R²: 0.7401 | RMSE: 209189.9109
WeightedFusion | MAE: 315382.7500 | R²: 0.2437 | RMSE: 356854.2667

I2MoE:

Best model saved to ./saves/imoe/transformer/hrf_regression/seed_0_modality_HRF_train_epochs_100_val_loss_0.00.pth
Weight sum statistics: min=0.9999998807907104, max=1.0000001192092896
{‘model’: ‘Interaction-MoE-Transformer’, ‘lr’: 0.0001, ‘temperature_rw’: 1, ‘hidden_dim_rw’: 256, ‘num_layer_rw’: 1, ‘interaction_loss_weight’: 0.01, ‘modality’: ‘HRF’, ‘data’: ‘hrf_regression’, ‘gate_loss_weight’: 0.01, ‘train_epochs’: 100, ‘num_experts’: 16, ‘num_layers_enc’: 1, ‘num_layers_fus’: 1, ‘num_layers_pred’: 1, ‘num_heads’: 4, ‘batch_size’: 2, ‘hidden_dim’: 128, ‘num_patches’: 16}
[Val] Average Loss: 0.0000 ± 0.0000
[Test] Mean Absolute Error: 0.0045 ± 0.0000

无语了

image-20251106114412890

一些训练结果:Epoch 57/100 | LR: 4.83e-05 | Train Loss: 0.0039 | Val Loss: 0.0004 | Val R²: 0.8296 | Trigger: 11/15
Epoch 58/100: 100%|███████████████████████████████████████| 5/5 [00:56<00:00, 11.40s/it]
Epoch 58/100 | LR: 4.65e-05 | Train Loss: 0.0041 | Val Loss: 0.0005 | Val R²: 0.7489 | Trigger: 12/15
Epoch 59/100: 100%|███████████████████████████████████████| 5/5 [00:54<00:00, 10.90s/it]
Epoch 59/100 | LR: 4.48e-05 | Train Loss: 0.0059 | Val Loss: 0.0005 | Val R²: 0.7174 | Trigger: 13/15
Epoch 60/100: 100%|███████████████████████████████████████| 5/5 [00:53<00:00, 10.79s/it]
Epoch 60/100 | LR: 4.30e-05 | Train Loss: 0.0063 | Val Loss: 0.0004 | Val R²: 0.8041 | Trigger: 14/15
Epoch 61/100: 100%|███████████████████████████████████████| 5/5 [00:54<00:00, 10.86s/it]
Early stopping triggered! No improvement for 15 consecutive epochs.

Training complete. Best model at epoch 46: R²: 0.8705, Loss: 0.0003
Toxin min=2139.00931444048, Toxin max=9499122.31743333

—- Final Model Evaluation —-
Final performance on test set:
MAE (original scale): 123147.8203
R² Score (original scale): 0.7876
Best model achieved R²: 0.8705 at epoch 46

[Seed 0/2] [Epoch 99/100] Task Loss: 1.90, Router Loss: 0.00 / Val Loss: 1.90, Val MAE: 2.41

[Seed 0/2] [Epoch 100/100] Task Loss: 1.87, Router Loss: 0.00 / Val Loss: 1.87, Val MAE: 2.39

再写一个PPT的,对结果进行总结

CBAM原模型:

Training complete. Best model at epoch 18: R²: 0.6562, Loss: 0.0002
Toxin min=2057.80681921, Toxin max=15012381.5119922

—- Final Model Evaluation —-
Final performance on test set:
MAE (original scale): 116817.9766
R² Score (original scale): 0.6562
Best model achieved R²: 0.6562 at epoch 18

CBAM fusion:144793.4844, R²: 0.6314, RMSE: 245337.0193

SimpleFusion:120648.1797, R²: 0.6279, RMSE: 246501.0411

120648.1797, R²: 0.6279, RMSE: 246501.0411

Attn:125674.0234, R²: 0.6734, RMSE: 230937.7103

MODEL COMPARISON RESULTS

CBAMFusion | MAE: 104706.8516 | R²: 0.6597 | RMSE: 235736.8306
SimpleFusion | MAE: 154869.4531 | R²: 0.6070 | RMSE: 253328.5654
AttentionFusion | MAE: 125674.0234 | R²: 0.6734 | RMSE: 230937.7103
WeightedFusion | MAE: 120461.5312 | R²: 0.6496 | RMSE: 239227.2487

子集测试+消融实验—>定位问题

搜索
匹配结果数:
未搜索到匹配的文章。