最优传输如何合成病灶?OTLesMix给医学图像分割带来数据增强新思路
2026/8/30 1:59:26 网站建设 项目流程

做医学图像分割的同学应该都有同感:病灶数据永远是“不够用”的。一份高质量的肿瘤掩膜需要影像科医生在 CT、MRI 切片上一层一层手动勾画,成本高、周期长,而且部分病灶形态本身就十分罕见——比如小尺寸转移瘤、贴近血管生长的结节、跨解剖区域的不规则病变。如果训练集里从未出现过这样的形状和位置,模型到了真实场景中很容易漏检、误检,甚至把正常组织判成病灶。

常规的缓解手段是数据增强,旋转、翻转、缩放、弹性形变都是常见操作。但这些方法本质是在“已有病灶”的基础上做几何扰动,并不具备生成“新形状、新位置病灶”的能力。于是问题变得很有意思:能不能像捏橡皮泥一样,把两个真实病灶的形状、位置和纹理做一次可解释的融合,从而合成大量“介于两者之间”的逼真病灶样本?

OTLesMix 正是沿着这条思路提出的方法。它的核心不是复杂神经网络,而是一套经典数学工具:最优传输(Optimal Transport, OT)与 Wasserstein 重心(Wasserstein Barycenter)。这篇文章我会从问题背景、数学原理、方法拆解、代码复现思路、实验验证方式和工程落地建议几个维度,把 OTLesMix 完整地讲清楚。无论你是医学图像方向的算法工程师,还是对最优传输在深度学习中的应用感兴趣的研究者,这篇文章都会对你有帮助。

1. 医学图像分割的病灶数据难题

1.1 病灶数据为什么稀缺

病灶分割数据的稀缺并不是单纯“数据量少”,而是好几个因素叠加在一起的结果。

首先是标注成本。CTA、MRI 或者病理切片中的病灶边界往往并不清晰,不同医生对同一病灶的勾画也可能存在差异。要获得一份高质量标注,通常需要多位医生交叉验证甚至病理结果对照,这在时间、人力和资金上都是很大开销。

其次是隐私约束。医学影像属于敏感个人数据,脱敏、加密、伦理审批、数据使用协议等环节都会拖慢数据收集节奏。即便拿到数据,不同医院之间的数据格式、扫描协议、设备型号差异也会造成分布偏移。

最核心的问题是长尾分布。病灶在真实世界中不是均匀出现的,比如早期小病灶、罕见位置的病灶在数据集中占比很低,而数据增强恰恰需要在这些样本上下更多功夫。如果只是简单复制粘贴这类样本,模型很快就会过拟合,换一个姿势、一个角度、一个位置就认不出来。

1.2 传统数据增强为什么不够

先列一下医学分割里用得最多的几何增强:

增强方式作用局限
旋转、翻转改变病灶方向不改变形状本质,小病灶仍难泛化
缩放改变病灶尺寸实际病变大小与解剖结构相关,不能随意缩放
弹性形变轻微扭曲形状幅度太大易失真,幅度太小不足以增加多样性
亮度对比度扰动模拟不同扫描参数不能生成新的结构信息
Mixup / CutMix像素级或块级混合通常不做空间对应,病灶位置错开时会产生重影

Mixup、CutMix 这类通用增强方法在自然图像分类上效果很好,但直接搬到医学图像分割时有一个明显问题:病灶不是“一块普通贴纸”,它有自身的形状组织、纹理统计和空间语义。当两个病灶位置距离较远时,线性插值会产生模糊和重影;当你把病灶 A 直接复制到病灶 B 的位置时,两个病灶边缘之间的过渡又非常突兀,模型学到的更多是“贴图伪影”,而不是有意义的病理结构。

1.3 合成病灶的两条技术路线

为了让训练集覆盖更多形状和位置,研究者通常走两条路。

一条是生成模型路线,典型代表是 GAN 和扩散模型。GAN 可以生成非常逼真的合成病灶,但训练不稳定、需要大量真实样本作为监督、生成结果的病理语义难以保证。扩散模型效果更细腻,但采样速度慢、训练成本高,并且依然存在“生成的内容是否符合真实病理特征”这一可解释性问题。

另一条路线是几何变换与图像混合路线,OTLesMix 属于这一类。它在两个真实病灶之间建立一个“质量搬运”方案,让形状、位置和纹理可以解耦处理。这样做的好处是:合成病灶的纹理完全来自真实病灶,不存在纹理漂移问题;形状和位置则来自数学上可解释的插值过程,稳定且可控。

2. 先搞清楚:最优传输与 Wasserstein 重心

2.1 最优传输问题:从搬运沙土说起

最优传输是一个有 200 多年历史的数学问题,最早可以追溯到法国工程师 Monge 在 1781 年提出的“搬土问题”。

想象地上有一堆沙子,分布形状为 A;现在要求你把它搬成分布形状为 B,并且每一粒沙子从起点到终点都会产生搬运成本。如果搬运成本用两点之间的距离来度量,那么最优传输问题要回答的就是:怎样规划每一粒沙子的搬运路径,让总成本最低?

这个“搬运方案”在数学上称为传输计划(transport plan),记作 γ(x, y),表示有多少质量从源位置 x 流向目标位置 y。Kantorovich 后来对问题做了松弛化处理,允许质量被“拆分”,于是最优传输问题变成了一个线性规划问题:

min ∫ c(x, y) dγ(x, y)

其中 c(x, y) 是搬运代价函数,通常取距离的平方 ||x - y||²。这个公式看起来抽象,但含义非常朴素:在所有可能的搬运方案里,找一个总成本最小的。

在图像处理里,一张图像的灰度值可以归一化成一个概率分布,病灶的掩膜也可以看成一个概率分布。于是,最优传输就提供了一种“把一个病灶变成另一个病灶”的最优几何对应关系。

2.2 Wasserstein 距离:分布之间的距离

当最优传输的最优总代价被定义出来后,它本身也可以用来度量两个分布之间的距离。这就是 Wasserstein 距离。

Wasserstein-p 距离的定义是:

W_p(μ, ν) = (min ∫ ||x - y||^p dγ(x, y))^(1/p)

当 p = 1 时,它也叫推土机距离(Earth Mover's Distance, EMD),在图像检索、生成模型评估等领域有广泛应用。

Wasserstein 距离有一个非常重要的几何直觉:它考虑的是“质量分布的形状差异”。两个分布即使支撑集完全不重叠,Wasserstein 距离也依然有明确的有限值,因为质量可以沿着空间距离流动。对比 KL 散度和 JS 散度,它们在两个分布支撑集不重叠时可能退化为无穷大或常数,导致梯度消失,而 Wasserstein 距离不会。

在 OTLesMix 中,Wasserstein 距离可以用来度量两个病灶掩膜之间的“形状距离”,也可以作为插值过程中的一致性指标。

2.3 Wasserstein Barycenter:分布的“平均”

给定多个概率分布 μ₁, μ₂, ..., μ_N,它们的 Wasserstein 重心是一个新分布 μ*,使得所有分布与 μ* 之间 Wasserstein 距离的加权和最小:

μ* = argmin_μ Σ λ_k · W_p(μ, μ_k)^p

如果 λ_k 是权重,且所有权重之和为 1,那么 μ* 就可以理解为这些分布在“最优传输意义下的平均”。

这种平均和欧氏平均很不一样。欧氏平均只是逐点取像素值的加权平均,容易产生模糊、重影;而 Wasserstein 重心会尽量保持分布本身的结构——在病灶掩膜的场景里,它倾向于生成一个“形状介于两个病灶之间”的掩膜,而不是简单地灰度混合。

举个例子:一个病灶是圆形,另一个是细长形,它们的欧氏平均可能是一团模糊的灰块;但 Wasserstein 重心可以生成一个从圆形到细长形渐变过程中的“中间形态”,这个形态仍然具有清晰的轮廓和可解释的形状结构。

3. OTLesMix 方法拆解:形状、位置与纹理如何被“搬运”

从命名看,OTLesMix 可以拆解为 OT(最优传输) + Les(病变 Lesion) + Mix(混合)。它要解决的核心问题是:给定两个真实病灶样本,如何合成一系列形状、位置都不同,但纹理统计真实可信的新病灶。

3.1 病灶掩膜作为概率分布

OTLesMix 首先把病灶掩膜(mask)看作一个二维概率分布。假设掩膜中病灶区域像素值为 1,背景为 0,那么将掩膜归一化后,它就是一个定义在像素平面上的离散概率分布:

  • 源的病灶掩膜 μ_s:质量集中在病灶区域
  • 目标的病灶掩膜 μ_t:质量集中在另一个病灶区域

用概率分布的语言来描述病灶,是 OTLesMix 最关键的一步。因为这样一来,形状差异就变成了“两个概率分布之间的差异”,而形状插值就变成了“分布之间的重心计算”。

3.2 最优传输映射:建立空间对应关系

有了两个概率分布,下一步是计算它们之间的最优传输映射。

这里要说一下“最优传输映射”与“最优传输计划”的区别。最优传输计划 γ(x, y) 是一个联合分布,表示质量从 x 到 y 的流量;而在某些情况下,这个计划可以退化为一个确定性的函数 T: x → y,即每个源像素点都映射到唯一的目标像素点,这个函数就叫最优传输映射。

OTLesMix 使用最优传输计划的核心动机是:它比仿射变换、TPS 薄板样条等传统配准方法更灵活,能够捕捉两个病灶之间任意的质量对应关系,同时保证这种对应是“全局最优”的,不会因为局部贪心而产生扭曲。

在工程实现中,这一步通常通过计算两个掩膜像素坐标之间的代价矩阵,然后求解线性规划来完成,也就是计算:

G = EMD(μ_s, μ_t, M)

其中 M 是像素坐标之间的代价矩阵,G 是传输计划。G 本身可以理解为一张“从源病灶到目标病灶的质量流量图”,它标识了源病灶每一个像素应该搬运到目标病灶的哪个位置。

3.3 Wasserstein 重心:生成多样中间形状

有了传输计划之后,OTLesMix 要做的不是直接跳到最极端的目标形状,而是在源病灶和目标病灶之间生成一系列中间形态。

这一部分用到的正是 Wasserstein 重心。考虑两个掩膜 μ_s 和 μ_t,取权重 λ ∈ [0, 1],计算它们的 Wasserstein 重心:

μ_λ = argmin_μ [ (1-λ) · W_p(μ, μ_s)^p + λ · W_p(μ, μ_t)^p ]

当 λ = 0 时,重心就是源掩膜;当 λ = 1 时,重心就是目标掩膜;当 λ = 0.5 时,重心是“中间形状”。

由于 Wasserstein 重心本身是概率分布,因此合成掩膜依然保留着清晰的形态结构,不会像线性插值那样出现模糊和重影。通过改变 λ 的取值,可以生成一系列形状平滑变化的病灶掩膜,这就是“Diverse Shapes”的来源。

3.4 纹理保持与位置迁移

单纯生成形状还不够,合成病灶必须带上真实的纹理(灰度统计特征)才可用于模型训练。

OTLesMix 的做法是:用最优传输计划把源病灶的图像纹理“搬运”到目标病灶的位置上去。具体来说,给定传输计划 G,对于目标位置的每一个像素,我们根据 G 中对应的权重,从源病灶图像里加权采样像素值,得到一张“迁移动态纹理图”。

这样整个方法就把病灶的“形状”和“纹理”解耦了:

  • 形状来自 Wasserstein 重心插值
  • 纹理来自真实源病灶的传输搬运
  • 位置来自最优传输映射所建立的空间对应关系

通过改变源病灶、目标病灶的组合,以及权重 λ,可以生成“形状像 A、纹理像 B、位置接近 A/B 之间”的大量合成病灶。病灶位置的多样性主要来自两个方面:一是源病灶和目标病灶本身位置不同,传输计划会把纹理搬运到新的位置;二是在多个真实病灶之间两两组合时,会形成大量没有在原始数据中出现过的位置分布。

3.5 合成病灶如何融入训练数据

在实际训练时,OTLesMix 通常作为一个在线数据增强模块接入分割训练管线。流程大致如下:

  1. 训练集中维护一个“真实病灶库”,每个样本包含病灶小块和对应掩膜。
  2. 每个训练 step 随机抽取两个病灶样本。
  3. 用 OTLesMix 合成新的病灶 patch。
  4. 将合成 patch 粘贴到训练图像的随机位置(或通过 OT 映射得到的合理位置)。
  5. 合成 patch 对应的掩膜直接作为训练标签。

通过这种方式,训练集每次迭代都有新的合成病灶出现,模型能够见到更多样的形状和位置组合。

4. 代码复现思路:用 Python 实现核心模块

下面给出一个基于 POT(Python Optimal Transport)库的示例实现。需要提前说明:这部分代码是为了帮助你理解 OTLesMix 的核心思路,并不是论文官方实现的完整代码。实际复现时,需要根据你自己的数据格式、病灶尺寸和训练框架进行调整。

4.1 环境准备与依赖

建议使用以下环境:

Python 3.8+ PyTorch 1.10+(训练分割模型用) POT 0.9.0+(最优传输计算) NumPy OpenCV(图像读写与后处理)

安装 POT:

pip install POT

如果你已经安装了 PyTorch,可以用下面命令验证 POT 是否安装成功:

python -c "import ot; print(ot.__version__)"

4.2 计算最优传输映射

下面的函数接收两个二值掩膜,返回一个从源掩膜到目标掩膜的传输计划:

import numpy as np import ot def compute_ot_map(mask_src, mask_tgt, eps=1e-6): """ 计算从源掩膜到目标掩膜的最优传输计划。 参数: mask_src (np.ndarray): 源病灶掩膜,形状 (H, W),像素值为 0/1 mask_tgt (np.ndarray): 目标病灶掩膜,形状 (H, W),像素值为 0/1 eps: 防止除零的极小值 返回: G (np.ndarray): 传输计划,形状 (H, W, H, W) G[i, j, a, b] 表示从源像素 (i, j) 搬运到目标像素 (a, b) 的质量 """ h, w = mask_src.shape # 1. 将掩膜展平成概率分布 mu_s = mask_src.reshape(-1).astype(np.float64) mu_t = mask_tgt.reshape(-1).astype(np.float64) mu_s /= (mu_s.sum() + eps) mu_t /= (mu_t.sum() + eps) # 2. 生成像素坐标网格 yy, xx = np.mgrid[0:h, 0:w] coords = np.stack([xx.ravel(), yy.ravel()], axis=1).astype(np.float64) # 3. 计算代价矩阵(欧氏距离的平方) M = ot.dist(coords, coords, metric='sqeuclidean') M /= (M.max() + eps) # 4. 使用 EMD 求解最优传输计划 G = ot.emd(mu_s, mu_t, M) return G.reshape(h, w, h, w)

这段代码最核心的是两个部分:

  • ot.dist(coords, coords, metric='sqeuclidean'):计算所有源像素与所有目标像素之间的代价矩阵。
  • ot.emd(mu_s, mu_t, M):用线性规划求解最优传输计划。

代价矩阵的标准通常会显著影响数值稳定性,所以我对 M 做了归一化处理,让最大值等于 1。实际使用中,如果你的病灶尺寸较大(比如 128×128),直接展开像素会得到 16384×16384 的代价矩阵,内存开销极高,建议先在连通域级别计算,或者缩小到 32×32 再上采样。

4.3 计算 Wasserstein 重心

POT 提供了ot.bregman.convolutional_barycenter2d,可以直接对多张二维图像计算熵正则化的 Wasserstein 重心:

def wasserstein_barycenter(masks, reg=1e-2, num_iters=100): """ 计算多张掩膜的 Wasserstein 重心。 参数: masks (np.ndarray): 形状 (N, H, W) 的二值掩膜数组 reg: 熵正则化系数,越大速度越快,但形状越模糊 num_iters: Sinkhorn 迭代次数 返回: bary (np.ndarray): 形状 (H, W) 的密度图,值在 0~1 之间 """ n, h, w = masks.shape # 归一化为概率分布 A = np.stack([ m.astype(np.float64) / (m.sum() + 1e-6) for m in masks ], axis=0) bary = ot.bregman.convolutional_barycenter2d( A, reg, numItermax=num_iters ) return bary

需要注意,convolutional_barycenter2d使用的是卷积 Sinkhorn 算法,计算效率比普通 Sinkhorn 高很多,适合图像这种二维网格数据。reg是一个关键参数:

  • reg 太小:形状更锐利,但迭代收敛慢。
  • reg 太大:计算快,但得到的重心会偏模糊。

由于我们最终需要合成清晰的病灶掩膜,通常会在得到重心密度图后,用阈值(比如 0.5)进行二值化,或者再做一次连通域筛选,去掉零碎噪声。

4.4 纹理搬运与合成病灶

传输计划的作用是把源病灶纹理搬运到目标位置。一个朴素的实现如下:

def transport_texture(image_src, G): """ 根据传输计划 G 将源图像纹理搬运到目标坐标位置。 参数: image_src (np.ndarray): 源病灶图像,形状 (H, W, C) 或 (H, W) G (np.ndarray): 传输计划,形状 (H, W, H, W) 返回: warped (np.ndarray): 搬运后的纹理图,形状与 image_src 一致 """ h, w = image_src.shape[:2] channel_dim = image_src.ndim warped = np.zeros_like(image_src, dtype=np.float64) # 对每个目标像素 (a, b) 加权聚合源像素的值 for a in range(h): for b in range(w): weights = G[:, :, a, b] total = weights.sum() if total < 1e-12: continue weights = weights / total if channel_dim == 2: warped[a, b] = (image_src * weights).sum() else: for c in range(image_src.shape[2]): warped[a, b, c] = (image_src[:, :, c] * weights).sum() return warped

这个双重循环在理论上是正确的,但效率很低。实际工程中,可以先把传输计划转化为一个稀疏的“源坐标重映射表”,再用scipy.ndimage.map_coordinates做一次插值,速度会快得多。

下面把整个 OTLesMix 合成流程串起来:

def otlesmix_synthesize(image_src, mask_src, image_tgt, mask_tgt, lam=0.5): """ 合成一个位于源病灶与目标病灶之间的新病灶。 参数: image_src: 源病灶图像块,形状 (H, W, 3) mask_src: 源病灶掩膜,形状 (H, W),0/1 image_tgt: 目标病灶图像块,形状 (H, W, 3) mask_tgt: 目标病灶掩膜,形状 (H, W),0/1 lam: Wasserstein 重心的权重,越大越接近目标病灶 返回: synth_image: 合成病灶图像块 synth_mask: 合成病灶掩膜 """ # 1. 计算源到目标的最优传输计划 G = compute_ot_map(mask_src, mask_tgt) # 2. 将源纹理搬运到目标病灶位置 warped_texture = transport_texture(image_src, G) # 3. 计算两个掩膜的 Wasserstein 重心 bary = wasserstein_barycenter( np.stack([mask_src, mask_tgt], axis=0), reg=1e-2 ) # 4. 根据 lam 生成中间形状掩膜 synth_mask = bary > (1 - lam) # 5. 背景部分保留目标图像,病灶区域使用搬运后的纹理 synth_image = image_tgt.copy() synth_image[synth_mask] = warped_texture[synth_mask] return synth_image, synth_mask.astype(np.float32)

这段代码中,lam既是重心权重,也充当了掩膜阈值的调节。实际使用中可以拆分成两个独立参数,便于控制“形状接近程度”和“掩膜阈值”。

5. 从想法到实验:如何验证 OTLesMix 的有效性

设计好合成方法之后,最关键的验证工作是把合成样本真正用到分割模型训练中,并和 baseline 对比。这里的实验协议值得认真设计。

5.1 评测任务选择

OTLesMix 适合作为病灶分割任务的数据增强模块。常见的验证数据集包括:

  • BraTS2021:多模态脑胶质瘤 MRI 数据集,包含 T1、T1ce、T2、FLAIR 四个模态,标注有坏死、水肿、增强肿瘤等结构。
  • LiTS:肝脏及肝脏肿瘤 CT 数据集,常用于腹部病灶分割。
  • MSD(Medical Segmentation Decathlon):包含多种器官与病灶分割任务,如胰腺、肝脏、结肠癌等。

选择数据集时,最好选择病灶形状差异大、位置分布广的数据,这样才能体现 OTLesMix 的优势。如果数据集里全是圆心近似、大小相近的小病灶,OT 方法和普通旋转缩放的区别就不明显。

5.2 对比基线设置

至少需要设置以下几组对比:

方法说明
无增强直接用原始数据训练
几何增强旋转、翻转、缩放、弹性形变
Mixup / CutMix通用混合增强,作为像素混合基线
OTLesMix本文讨论的最优传输合成方法

评价指标建议同时看全局指标和困难样本指标:

  • Dice 系数:最常用的区域重叠指标。
  • IoU:交并比,对边界误差更敏感。
  • HD95:95% 豪斯多夫距离,反映边界最大偏差,对病灶边缘质量敏感。
  • 罕见形状子集指标:把测试集中形状最不规则、位置最边缘的样本单独统计,更容易看出 OTLesMix 带来的提升。

5.3 训练流程与超参数建议

在实际训练中,OTLesMix 通常作为一个在线增强器使用。推荐流程如下:

  1. 离线抽取训练集中所有病灶 patch 和对应掩膜,构建病灶库。
  2. 每个训练 step 以一定概率(比如 0.3~0.5)触发 OTLesMix 增强。
  3. 每次触发时,从病灶库随机抽取两个病灶,随机选择 λ ∈ [0.1, 0.9]。
  4. 用 OTLesMix 生成合成 patch,粘贴到当前训练图像中。
  5. 使用合成 patch 的掩膜作为对应位置的真实标签参与损失计算。

这里有一个值得注意的细节:合成病灶粘贴到训练图时,需要避免粘贴到不合理的解剖位置。最简单的方式是保持源病灶与目标病灶的相对解剖位置关系,或者限制粘贴位置在特定器官区域内。

6. 常见理解误区与排查建议

在理解和复现 OTLesMix 的过程中,下面几个误区比较常见,我整理成表格方便排查。

误区产生原因正确理解与解决思路
把 Wasserstein 重心当作逐像素线性插值没有理解分布的“质量流动”概念线性插值在欧氏空间逐点平均,容易产生模糊;Wasserstein 重心是概率分布之间的几何平均,能保留结构
直接把 OTLesMix 当 GAN 用,期望生成全新语义混淆“融合已有样本”和“从潜空间采样生成”OTLesMix 是在真实样本之间插值,语义由真实样本约束,不会凭空创造病灶
代价矩阵用像素欧氏距离但不归一化EMD 求解数值不稳定建议先对代价矩阵做归一化处理,或改用熵正则化 Sinkhorn 求解
只生成病灶但不检查视觉合理性实验流程不够严谨至少要做人工抽样检查,保证纹理连续、边界不出现明显伪影
在整张图上计算 OT,内存溢出图像尺寸太大先裁剪病灶区域到小 patch 上计算,合成后再贴回原图
认为 λ 越极端多样性越好对插值系数作用理解不深λ 接近 0 或 1 时合成结果接近真实样本,多样性有限;0.3~0.7 区间更值得探索

如果你遇到合成结果中出现大量空洞或者噪声点,优先检查掩膜归一化是否遗漏,以及reg正则化系数是否过大。reg过大会让重心变得过于平滑,二值化后很容易出现零碎伪影。

7. 工程化落地的几条建议

把 OTLesMix 从论文实验迁移到实际项目中,有几个工程层面的问题值得提前规划。

7.1 病灶库的构建与管理

病灶库的质量直接决定合成样本质量。建议在训练流程开始前,先对训练集做一次离线分析,筛选出面积适中、边界清晰的病灶。太小的病灶(比如只有十几个像素)在 OT 计算中噪声非常大;边界模糊的病灶掩膜本身就不准,合成出来的样本也会带偏模型。

病灶库可以采用统一尺寸的 patch 存储,例如统一缩放到 64×64 或 128×128。为了避免病灶形态被缩放扭曲,记录每个 patch 的原始尺寸和缩放比例,合成后再变换回原图尺度。

7.2 在线增强 vs 离线增强

OTLesMix 的计算开销主要集中在 EMD 求解上,在线增强时如果每个 batch 都重新计算,会拖慢训练速度。

实际工程中推荐“离线预计算 + 在线随机组合”的方式:

  • 离线阶段:从病灶库中挑选有代表性的配对组合,预计算传输计划和重心形状,保存到磁盘。
  • 在线阶段:训练时直接读取预计算的组合结果,随机选择 λ 进行纹理搬运和粘贴,将单次增强开销控制在毫秒级。

这种方式牺牲了一部分随机性,但大幅提高了训练效率,更适合大规模数据场景。

7.3 质量控制与医学合规

合成病灶生成得再逼真,也不能绕过医学数据的合规要求。使用真实病人数据构建病灶库前,必须确认数据的合法授权、匿名化处理和伦理审批。合成样本不应包含可识别患者身份的信息,也不能当成真实影像用于任何临床诊断目的。

此外,如果项目要上线到真实医疗场景,建议邀请影像科医生对合成样本进行抽样评估,确认病灶的形态、边缘和纹理在病理上合理。这一点是最容易被算法团队忽视,但又是最重要的环节。

7.4 增强策略的动态调整

不建议在训练全程使用固定的 OTLesMix 触发概率。更合理的做法是课程式增强:训练早期模型还在学习基础特征,以常规几何增强为主;训练中期逐步引入 OTLesMix,提高样本多样性;训练后期收敛阶段,再降低触发概率,避免模型过于依赖合成样本而产生分布偏移。

你可以用一个简单的 epoch 调度函数来控制触发概率:

def get_otlesmix_prob(epoch, max_epochs, p_max=0.5): """ 随着训练进行,先提升再降低 OTLesMix 使用概率。 前半程线性上升到 p_max,后半程线性下降。 """ half = max_epochs / 2 if epoch < half: return p_max * (epoch / half) else: return p_max * (1 - (epoch - half) / half)

7.5 与其它增强方法的组合

OTLesMix 并不排斥传统增强方法。推荐在 OTLesMix 合成结束后,再叠加随机旋转、小幅度缩放和亮度扰动,进一步增加多样性。但要注意控制组合强度,避免病灶纹理被过度扰动而失真。

组合增强的顺序也影响效果。通常建议先做空间变换(旋转、翻转),再做强度变换(亮度、对比度),最后再做随机遮挡类增强。对医学图像而言,空间变换要保持解剖关系,所以旋转角度不宜过大,比如限制在 ±15 度以内。

8. 总结与下一步学习方向

OTLesMix 的价值在于提供了一种真正可解释、可控制的病灶合成思路。它把病灶分割中的数据稀缺问题,转化为经典的最优传输数学问题,用 Wasserstein 重心生成多样形状,用最优传输映射搬运纹理和位置。这种方法不需要训练额外的生成模型,也不会出现 GAN 常见的训练不稳定问题。

如果你想把 OTLesMix 用在自己的任务里,我的建议是从小规模开始:先拿一个小数据集,只做两个病灶之间的 OT 混合,看看生成的 patch 在视觉上是否合理;确认纹理和形状都自然之后,再把它接入训练管线。最优传输的数学看起来硬核,但它最终解决的问题非常直观——把一个分布搬到另一个分布。理解了这句话,就理解了 OTLesMix 的一半。

接下来你可以继续深入的方向包括:Sinkhorn 算法与熵正则化的原理、切片 Wasserstein 距离在高维问题中的应用、最优传输在域适应中的用法,以及如何用卷积 Sinkhorn 加速图像级重心计算。如果这篇文章对你有帮助,可以先收藏备用;如果你在复现中遇到了具体报错或效果异常,欢迎在评论区把你的处理步骤和现象发出来,一起排查。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询