生成式AI在医学图像分割中的应用:
- 1. 生成对抗网络(GAN)
GAN 由生成器和判别器组成,核心思想是"以假乱真"地生成图像 - 2. 扩散模型(DDPM)
通过加噪再去噪的过程生成图像
少样本学习(FSS)在医学图像分割中的应用:
少样本分割致力于用极少量标注样本识别新类别
使用支持集(含k张已标注图像)指导模型对查询图像进行新类别分割。
- 支持集是一组已经标注了的图像,每张图像都包含了一些类别的标注信息。在新类别分割的场景中,支持集包含了k张图像,这些图像的类别是模型已知的。支持集的作用是为模型提供关于新类别的视觉和类别信息,以便模型能够学习如何识别和分割这些新类别。
- 查询图像
查询图像是模型需要处理的目标图像,这些图像可能包含支持集中未出现过的新类别。在新类别分割任务中,模型需要利用从支持集中学习到的知识,对查询图像中的新类别进行识别和分割。
主流方法:
- 原型网络:提取支持集原型向量,对查询图像进行相似度匹配。
原型向量的定义
原型向量是支持集中每个类别图像特征的平均值。对于每个类别,原型向量是通过计算该类别所有图像特征向量的平均值得到的。
步骤过程
1.特征提取:
在医学图像分割中,首先需要从支持集和查询图像中提取特征。这些特征通常通过预训练的卷积神经网络(如ResNet、VGG等)得到,可以捕获图像的局部和全局特征。
2.计算原型向量:
对于支持集中的每个类别,计算其所有图像特征向量的平均值,得到该类别的原型向量。这个原型向量代表了该类别的典型特征。
3.相似度计算:
对于查询图像,计算其特征向量与每个类别原型向量之间的相似度。相似度可以通过不同的方法计算,如欧氏距离、余弦相似度等。
4.分割决策:
根据相似度,将查询图像中的每个像素分配给最相似的类别原型。这通常涉及到一个后处理步骤,如使用softmax函数将相似度转换为概率,然后根据这些概率进行像素级别的分类。
在以下在这个示例中,定义了一个原型网络模型,它计算支持集的原型向量,并计算查询图像与原型向量之间的相似度。
python
import torch
import torch.nn as nn
import torch.nn.functional as F
class PrototypeNetwork(nn.Module):
def __init__(self, feature_dim, num_classes):
super(PrototypeNetwork, self).__init__()
self.feature_dim = feature_dim
self.num_classes = num_classes
self.prototypes = nn.Parameter(torch.randn(num_classes, feature_dim))
def forward(self, support_features, query_features):
# 计算支持集的原型向量
support_prototypes = torch.mean(support_features, dim=0, keepdim=True)
# 计算查询图像与原型向量之间的相似度
similarities = F.cosine_similarity(query_features.unsqueeze(1), support_prototypes, dim=2)
# 返回相似度
return similarities
# 示例用法
feature_dim = 128
num_classes = 5
model = PrototypeNetwork(feature_dim, num_classes)
support_features = torch.randn(10, feature_dim) # 假设有10个支持图像
query_features = torch.randn(1, feature_dim) # 假设有1个查询图像
similarities = model(support_features, query_features)
print(similarities)
以下图片展示了一个用于医学图像分割的少样本学习框架,以下是图片中各部分的详细解释:
- 支持集(Support Set (S)) :
- 包含少量已标注的图像,用于训练模型识别新的类别。
- 这些图像通过一个共享权重的主干网络(Backbone)提取特征。
- 查询图像(Query Image (I_q)) :
- 是需要进行分割的目标图像,可能包含支持集中未出现过的新类别。
- 同样通过主干网络提取特征。
- 主干网络(Backbone) :
- 用于从输入图像中提取特征映射(Feature Maps)。
- 图片中标注了"SW",表示支持集和查询图像通过同一个主干网络,共享权重。
- 支持特征映射(Support Feature Maps (f(I_s))) :
- 从支持集图像中提取的特征映射。
- 通过"MAP"(Masked Average Pooling)操作计算每个类别的原型向量。
- 查询特征映射(Query Feature Maps (f(I_q))) :
- 从查询图像中提取的特征映射。
- 原型向量(Prototypes) :
- 每个类别的代表向量,通过支持特征映射的平均值计算得到。
- 这些原型向量用于与查询特征映射进行相似度比较。
- 相似度计算(Cosine Similarity) :
- 使用余弦相似度(Cos)计算查询特征映射与每个类别原型向量之间的相似度。
- 分割结果 :
- 根据相似度,将查询图像中的每个像素分配给最相似的类别原型,从而实现图像分割。
- 条件网络:根据支持图像生成参数,调节查询图像分割过程。
条件网络是一种在少样本学习中使用的网络结构,它可以根据支持集中的信息来动态调整查询图像的分割过程。
以下是一个简化的条件网络示例,使用PyTorch实现
python
import torch
import torch.nn as nn
import torch.nn.functional as F
class ConditionalNetwork(nn.Module):
def __init__(self, feature_dim, num_classes):
super(ConditionalNetwork, self).__init__()
self.feature_dim = feature_dim
self.num_classes = num_classes
self.param_generator = nn.Linear(feature_dim, num_classes * (feature_dim + 1)) # 生成参数
def forward(self, support_features, query_features):
# 从支持特征生成参数
params = self.param_generator(support_features).view(-1, self.num_classes, self.feature_dim + 1)
# 应用参数到查询特征
query_features = query_features.unsqueeze(1).expand(-1, self.num_classes, -1)
out = torch.cat((query_features, params[:, :, :-1]), dim=-1)
out = F.relu(out)
out = out * params[:, :, -1].unsqueeze(-1) # 应用权重
# 分割决策
out = out.max(dim=1)[0]
return out
# 示例用法
feature_dim = 128
num_classes = 5
model = ConditionalNetwork(feature_dim, num_classes)
support_features = torch.randn(10, feature_dim) # 假设有10个支持图像
query_features = torch.randn(1, feature_dim) # 假设有1个查询图像
segmentation = model(support_features, query_features)
print(segmentation)
以下展示了框架各部分的详细解释:
其中包含两个主要部分:条件分支(黄色部分)和分割分支(粉色部分)。这个框架利用支持集(Support Set)中的图像来指导和调整查询图像的分割过程。
-
支持集:
- 包含少量已标注的图像,这些图像用于训练模型识别新的类别或结构。
- 支持集中的图像通过条件分支(Model_C)来生成条件参数。
-
查询图像:
- 是需要进行分割的目标图像
- 查询图像通过分割分支(Model_S)来进行处理。
-
条件分支:
- 包含模型 (Model_C),用于从支持集中的图像生成条件参数θ
- 这些参数反映了支持集中图像的特征和类别信息,用于调整分割分支的行为。
-
分割分支:
- 包含模型 (Model_S),负责处理查询图像并生成分割结果。
- 分割分支接收来自条件分支的参数θ,并使用这些参数来调整其内部权重或结构,以更好地适应查询图像的分割任务。
-
参数传递:
- 从条件分支生成的参数θ被传递到分割分支,用于调整分割模型的行为。
- 这种调整使得分割模型能够根据支持集中的信息来优化其对查询图像的分割性能。
-
分割结果:
- 分割分支根据调整后的模型参数生成最终的分割结果,即图像中不同结构或类别的分割图。
参考:[1]https://link.zhihu.com/?target=https%3A//arxiv.org/abs/2505.09274 [2]https://zhuanlan.zhihu.com/p/1908090620846776898