论文阅读U-KAN Makes Strong Backbone for MedicalImage Segmentation and Generation

作为一种非常有潜力的代替MLP的模型,KAN最终获得了学术界极大的关注。在我昨天的博客里,解读了最近的热门模型KAN:

论文阅读KAN: Kolmogorov–Arnold Networks-优快云博客

KAN的原文作者提到了很多不足。本文算是对其中两个现有不足的回应,也就是:1)KAN不仅只能用于特定结构和深度,2)KAN不仅能用于小规模AI+Science任务,还可以用于更大规模或更复杂的任务。

本文将KAN融入了U-Net网络结构中,并运用在医学图像分割任务上。

1,U-KAN架构

整体结构如图,是个U-Net经典的对称编解码器结构。编解码器都有卷积部分和token化KAN模块部分组成。卷积部分如U-Net一样,不赘述。

Token化的KAN模块:

1)token化:首先对特征进行重塑,得到一系列扁平化的二维patch。接着进行线性投影,线性投影是通过一个核大小为3的卷积层实现的。卷积层足以编码位置信息,并且其性能实际上优于标准的位置编码技术。

2)KAN块:在获取到token之后,我们将它们传入一系列的KAN层(N=3)。在每个KAN层之后,特征会通过一个高效的深度卷积层(DwConv)、一个批量归一化层(BN)和一个ReLU激活函数。此外,还是用了残差连接。

2,消融实验

1)KAN层层数影响

2)KAN层换成MLP的话,结果会下降(在我看来本文最重要的结论也就是这个)

3)模型规模的影响

3,与SOTA对比

4,本文的缺陷与不足

本文在我看来有两个主要不足:

1)训练难度:KAN至关重要的训练难度问题没有提及。将KAN结构嵌入U-Net是否会导致训练变得不稳定或难以收敛呢?训练速度会慢多少呢?

2)实验对比不充分,结果可能不SOTA

本文的对比实验,完全没有对比基于Transformer的图像分割模型,对比的几个模型要么是纯卷积模型,要么是卷积+MLP模型。那么我们是否可以认为U-KAN的结果逊于主流的Transformer分割模型?

5总结

在我看来,虽然本文模型大概率并不SOTA,但是也不是非要SOTA的模型和实验才有价值。

本文的价值在于验证了KAN可以用于更广泛的数据集,并且在更多场景下展现了超越和取代MLP的潜力。

### 如何下载基于U-Net结构的医学图像分割代码 基于U-Net结构的医学图像分割方法在近年来得到了广泛应用,尤其是在小样本数据集上仍能保持较高的分割精度。为了获取基于U-Net结构的医学图像分割代码,可以通过以下几种方式实现。 #### 使用PyTorch官方模型库 PyTorch提供了多种经典的图像分割模型,包括U-Net、DeepLab和FCN等。用户可以直接调用这些模型并加载预训练权重进行训练和推理。例如,使用`torchvision.models.segmentation`模块可以快速构建U-Net模型[^4]。 ```python import torchvision # 加载预训练的U-Net模型 model = torchvision.models.segmentation.deeplabv3_resnet50(pretrained=True, progress=True, num_classes=21, aux_loss=None) ``` 此外,也可以使用第三方库如`segmentation_models_pytorch`(简称`smp`)来构建U-Net网络,该库支持多种编码器结构(如ResNet、DenseNet等)并提供灵活的配置选项。 ```python import segmentation_models_pytorch as smp # 构建U-Net模型,使用DenseNet121作为编码器 model = smp.Unet( encoder_name='densenet121', encoder_weights='imagenet', classes=2, activation=None, encoder_depth=5, decoder_channels=[1024, 512, 256, 128, 64] ) ``` #### 从开源项目下载代码 GitHub 是获取开源 U-Net 实现代码的主要平台。可以搜索以下关键词以找到高质量的医学图像分割项目: - `U-Net medical image segmentation` - `medical image segmentation PyTorch` - `3D U-Net implementation` 例如,一个典型的医学图像分割项目结构如下: ``` unet-medical-segmentation/ ├── data/ # 数据集路径 ├── model.py # U-Net模型定义 ├── train.py # 训练脚本 ├── evaluate.py # 评估脚本 ├── utils.py # 辅助函数(如数据增强、损失函数等) └── README.md # 项目说明文档 ``` 在下载代码时,应关注项目的更新频率、是否包含训练脚本、是否支持多模态数据以及是否提供预训练模型等。 #### 自定义实现U-Net网络 如果希望从头开始构建U-Net网络,可以参考以下PyTorch实现代码: ```python import torch import torch.nn as nn class UNet(nn.Module): def __init__(self, in_channels=1, out_channels=1): super(UNet, self).__init__() def CBR2d(in_channels, out_channels): layers = [ nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1), nn.BatchNorm2d(out_channels), nn.ReLU(inplace=True), nn.Conv2d(out_channels, out_channels, kernel_size=3, padding=1), nn.BatchNorm2d(out_channels), nn.ReLU(inplace=True) ] return nn.Sequential(*layers) self.enc1 = CBR2d(in_channels, 64) self.enc2 = CBR2d(64, 128) self.enc3 = CBR2d(128, 256) self.enc4 = CBR2d(256, 512) self.pool = nn.MaxPool2d(kernel_size=2) self.dec4 = CBR2d(512, 256) self.dec3 = CBR2d(256, 128) self.dec2 = CBR2d(128, 64) self.final_conv = nn.Conv2d(64, out_channels, kernel_size=1) def forward(self, x): enc1 = self.enc1(x) enc2 = self.enc2(self.pool(enc1)) enc3 = self.enc3(self.pool(enc2)) x = self.enc4(self.pool(enc3)) x = torch.nn.functional.interpolate(x, scale_factor=2, mode='bilinear', align_corners=True) x = self.dec4(torch.cat([x, enc3], dim=1)) x = torch.nn.functional.interpolate(x, scale_factor=2, mode='bilinear', align_corners=True) x = self.dec3(torch.cat([x, enc2], dim=1)) x = torch.nn.functional.interpolate(x, scale_factor=2, mode='bilinear', align_corners=True) x = self.dec2(torch.cat([x, enc1], dim=1)) return self.final_conv(x) ``` #### 注意事项 在使用U-Net进行医学图像分割时,应注意以下几点: - **数据预处理**:医学图像通常需要进行标准化、裁剪、重采样等操作以适应模型输入要求。 - **损失函数选择**:常用的损失函数包括Dice Loss、Cross Entropy Loss以及它们的组合形式。 - **训练策略**:对于3D医学图像,由于内存限制,可能需要采用基于图像块(patch-based)的训练方式[^2]。 - **评估指标**:常用的评估指标包括Dice系数、Hausdorff距离等[^3]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝海渔夫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值