Schwertlilien
As a recoder: notes and ideas.

Thu Nov 27 2025 00:00:00 GMT+0800 (中國標準時間)

MLO(Multi-level Optimization)

迭代循环:$i$层的最优参数作为$i+1$层的输入

  • 第一级:固定生成模型架构,在 GAN 框架下训练生成器和判别器,生成逼真图像。
  • 第二级:用生成的图像 - 掩码对 + 少量真实数据,训练分割模型。
  • 第三级:以分割模型的验证损失为目标,优化生成模型的架构,形成迭代闭环。

框架

Stage1️⃣:训练 图像生成器(固定架构,先练参数)

  • 目标:让生成模型先学会 “根据掩码生成看起来像真实医学图像的图片”,但此时不优化生成模型的架构(仅固定架构 A,练权重参数 G 和判别器 H)。
  • 操作
    • 把真实的 “图像 - 掩码对” 反过来用:以真实掩码 M 为输入,真实图像 I 为目标,构建 GAN 的训练数据集(M→I 的映射)。
    • 在 GAN 框架下训练:判别器 H 学 “区分真实图像和生成图像”,生成器 G 学 “骗过分判别器”,最终生成器能输出与掩码语义对齐的逼真图像(比如输入 “皮肤病变掩码”,生成对应 dermoscopy 图像)。
  • 关键衔接:这一步的生成器参数(G*)会传给第二级,作为生成 “辅助训练数据” 的基础。

这个反过来使用比较有趣:真实人工标注掩码—>图像增强—>生成增强后掩码—>通过生成模型,生成医学图像。

其中“图像增强”有什么用?增强后的掩码与原掩码有何区别?

image-20251127222511466

这个地方使用的是GAN,算是比较老的方法了。

GAN结构中生成模型

image-20251128110152371

Stage2️⃣:用 生成数据 + 少量真实数据训练分割模型

  • 目标:检验第一级生成的数据是否 “有用”—— 如果生成数据质量高,用它训练的分割模型在真实验证集上表现会好(对应你选中的 “验证性能反映生成数据质量”)。

  • 损失函数:普通的GAN contrastive loss: “最大化区分真实图像和生成图像的损失”

    image-20251127223319787

  • 操作

    • 生成辅助数据:用第一级训好的生成器,对真实掩码做基础增强(旋转、翻转等),生成大量 “合成图像 - 合成掩码对”((\hat{I},\hat{M}))。
    • 混合训练:把 “合成数据 + 少量真实数据” 一起喂给分割模型(如 UNet/DeepLab),用分割损失(像素级交叉熵)训练分割模型参数 S。
    • 验证反馈:用真实医学图像 + 专家标注掩码组成的验证集,评估分割模型的性能(Dice/Jaccard)—— 如果性能差,说明生成数据质量低,需要优化生成模型。
  • 关键衔接:这一步的分割模型验证损失((L_{seg}^{val}))会传给第三级,作为优化生成模型架构的 “信号”。

Stage3️⃣:用分割验证损失,调Stage1️⃣架构

🫵:Stage2️⃣的训练下降是计算的DICE Loss。Val验证集上的结果只能看。

  • 目标:解决 “第一级固定架构可能不适配分割任务” 的问题 —— 比如某些架构生成的图像 “看起来真,但对分割模型没用”(比如生成了过多背景噪声,反而干扰病变分割),这一步通过分割验证损失优化架构 A。
  • 操作
    • 把第二级的 “分割模型验证损失” 作为优化目标:最小化这个损失(即让分割模型在真实验证集上表现更好),反向调整生成模型的架构 A(比如选择更适合的卷积核大小、激活函数组合)。
    • 迭代闭环:架构 A 优化后,重新回到第一级(用新架构 A 再训生成器参数 G),重复 1→2→3,直到分割模型性能收敛。

实验

1. 对各数据集的分割性能进行展示

图2/3/4:2/3展示结果,4展示以少量的数据就可以获得好的分割结果。

image-20251128172403160

2.对比传统数据增强

目的:医学分割中的常见数据增强方法是旋转、翻转、平移及组合(实际临床研究 / 应用中最易获取的提升方法)。证明方法比这些数据增强方法更有效。

image-20251128174942635

我的疑问

  1. 要是我的理解没错的话,这个步骤是,先训练图片生成模型GAN,其损失函数是contrastive loss,也就是生成/判别之间的差异;然后得到暂时最优的图片生成模型,以其输出作为训练分割模型的输入,以预测分割与mask之间的差异来优化下降(DICE loss),得到一个最优的分割模型,这个分割模型将在val验证集上计算得到一个loss结果,根据这么一个loss结果,再去优化下降修改生成模型的结果?那么这样的流程不是非常复杂,而且势必会训练得非常慢,而且难以收敛吗?因为为了每得到一个val loss,我都要完整训练两个模型?

对于MLO的理解问题。多水平优化(MLO)不是 “完整训练两个模型再循环”,而是 “增量迭代 + 梯度近似” ,本质是 “小步微调” 而非 “推倒重来”。

  1. 医学分割与食品计算的区别?医学分割得益于人类具有各种各样的器官以及不同的疾病,所以可以针对每种疾病/器官收集数据,而且这每个数据集都是有用的,因为可以 识别人类的一种疾病。(这如同医院会针对每个身体部位设计不同的科室,但是对于食物就只有营养科),我想知道的是,能不能拔高做食品的意义?如何类推?
指标名称 英文全称 数学公式 符号说明
均方误差 Mean Squared Error (MSE) (MSE = \frac{1}{n}\sum_{i=1}^n (y_i - \hat{y}_i)^2) (y_i):第 i 个样本的真实值;(\hat{y}_i):第 i 个样本的预测值;n:样本总数
均方根误差 Root Mean Squared Error (RMSE) (RMSE = \sqrt{\frac{1}{n}\sum_{i=1}^n (y_i - \hat{y}_i)^2}) 同 MSE,为 MSE 的平方根,还原误差的量级维度
平均绝对误差 Mean Absolute Error (MAE) $MAE = \frac{1}{n}\sum_{i=1}^n\vert y_i - \hat{y}_i\vert$ 同 MSE,采用绝对值计算,降低异常值对误差评估的影响
平均绝对百分比误差 Mean Absolute Percentage Error (MAPE) $MAPE = \frac{1}{n}\sum_{i=1}^n \left\vert\frac{y_i - \hat{y}_i}{y_i} \right\vert\times 100\%$ 同 MSE,以真实值为基准计算相对误差,需满足(y_i \neq 0)
决定系数 Coefficient of Determination (R²) (R^2 = 1 - \frac{\sum_{i=1}^n (y_i - \hat{y}_i)^2}{\sum_{i=1}^n (y_i - \bar{y})^2}) (\bar{y}):所有样本真实值的均值,衡量模型对数据的解释力
相关系数 Correlation (Correlation = \frac{\sum_{i=1}^n (y_i - \bar{y})(\hat{y}_i - \hat{\bar{y}})}{\sqrt{\sum_{i=1}^n (y_i - \bar{y})^2} \sqrt{\sum_{i=1}^n (\hat{y}_i - \hat{\bar{y}})^2}}) (\hat{\bar{y}}):所有样本预测值的均值,衡量真实值与预测值的线性关联强度
中位数相对误差 Median Relative Error (Median_RE) $Median_RE = median\left( \left\vert\frac{y_i - \hat{y}_i}{y_i} \right\vert\times 100\% \right)$ 取相对误差的中位数,进一步降低极端值干扰,更稳健反映模型误差水平

现在我有一个方法,叫MCMoE,其相关的代码放在:/Users/schwertlilien/Downloads/test/MCMoE-main的文件夹中。我现在想使用这个方法在我的三模态数据上运行一个回归任务,对毒素进行预测。至于三模态的参考数据集你可以参考/Users/schwertlilien/Downloads/test/multimodalDataset.py。我要怎么做才能在这个方法上训练我的数据集?

why diffusion models …

Epoch: 70 Loss: 0.0466 Train Coef: 0.703 Test Loss: 215125910877.9747 Test Coef: 0.829 R²: 0.5416 RMSE: 463816.65 MAE: 280875.84 MAPE: 2708.91%

warnings.warn(warn_msg)
Epoch: 119 Loss: 0.0438 Train Coef: 0.742 Test Loss: 165065224606.7848 Test Coef: 0.921 R²: 0.6483 RMSE: 406282.22 MAE: 172450.53 MAPE: 1140.81%

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
graph LR
%% 定义输入节点
subgraph Inputs [输入层: 多模态数据]
style Inputs fill:#f9f,stroke:#333,stroke-width:2px,color:black
A[HSI 高光谱图像<br>Batch x C_hsi x H x W]
B[RGB 可见光图像<br>Batch x 3 x H_rgb x W_rgb]
C[Fluo 荧光数值<br>Batch]
end

%% 定义三个并行的编码器分支
subgraph Encoders [多模态编码器分支 (并行处理)]
style Encoders fill:#ccf,stroke:#333,stroke-width:2px,color:black

%% HSI 分支 (重点: SpectralCNN)
A --> A1[全局平均池化<br>(去除空间维度)]
A1 -- "变为[Batch, 1, C_hsi]" --> A2[SpectralCNN (1D卷积网络)<br>提取光谱特征]
A2 -- "输出特征向量" --> A_feat[HSI 特征<br>[Batch, 256]]

%% RGB 分支 (简单的CNN/MLP)
B --> B1[自适应平均池化 (8x8)]
B1 --> B2[展平 & MLP编码]
B2 -- "输出特征向量" --> B_feat[RGB 特征<br>[Batch, 256]]

%% Fluo 分支 (简单的MLP投影)
C -- "扩展维度" --> C1[MLP 投影层]
C1 -- "输出特征向量" --> C_feat[Fluo 特征<br>[Batch, 128]]
end

%% 定义融合和输出层
subgraph FusionAndOutput [融合与回归输出]
style FusionAndOutput fill:#ff9,stroke:#333,stroke-width:2px,color:black

%% 融合方式:拼接
A_feat & B_feat & C_feat --> D{特征拼接 (Concatenation)<br>[Batch, 256+256+128 = 640]}

%% 融合层 MLP
D --> E[融合层 (MLP)<br>维度统一到 [Batch, 512]]

%% 回归头 MLP
E --> F[回归头 (3层 MLP)<br>逐步降维: 512 -> 256 -> 128 -> 1]

%% 最终输出
F --> G(最终输出: 预测标量值<br>Batch]<br>对应 log(Toxin + 1))
end

%% 样式优化
style A fill:#e1f5fe,stroke:#0277bd,color:black
style B fill:#e8f5e9,stroke:#2e7d32,color:black
style C fill:#fff3e0,stroke:#ef6c00,color:black

style A_feat fill:#b3e5fc,stroke:#0277bd,color:black
style B_feat fill:#c8e6c9,stroke:#2e7d32,color:black
style C_feat fill:#ffe0b2,stroke:#ef6c00,color:black

style A2 fill:#bbdefb,stroke:#1565c0,color:black,stroke-dasharray: 5 5
style D fill:#d1c4e9,stroke:#512da8,color:black
style G fill:#ffecb3,stroke:#ff8f00,stroke-width:3px,color:black
搜索
匹配结果数:
未搜索到匹配的文章。