【论文复现】KAN卷积:医学图像分割新前沿

在这里插入图片描述

📝个人主页🌹:Eternity._
🌹🌹期待您的关注 🌹🌹

在这里插入图片描述
在这里插入图片描述

❀知识图谱推理

  • 1. 概述
  • 2. 核心创新点
  • 3. 模块介绍
    • KAN
    • UNext模块
  • 4. 本文主要结构
  • 5. 主要代码
  • 6. 数据集
  • 7. 结果展示
  • 8. 参考文献

前言:在医学领域,图像分割是一项至关重要的任务。它不仅能够帮助医生更准确地诊断疾病,还能在手术规划、治疗评估以及医学研究等多个方面发挥巨大作用。随着人工智能和深度学习技术的飞速发展,医学图像分割技术也迎来了前所未有的变革。在众多新兴的技术中,KAN(Kernel Attention Networks,核注意力网络)卷积技术以其独特的优势,正逐步成为医学图像分割的新前沿。

传统医学图像分割方法,如阈值分割、边缘检测和区域增长等,虽然在一定程度上能够满足临床需求,但它们在处理复杂、多变的医学图像时,往往显得力不从心。近年来,基于深度学习的分割方法,特别是卷积神经网络(CNN),凭借其强大的特征提取和模式识别能力,在医学图像分割领域取得了显著成效。然而,随着医学图像数据的不断增加和临床需求的日益提高,如何进一步提升分割精度和效率,仍然是当前研究的热点和难点。

正是在这样的背景下,KAN卷积技术应运而生。它结合了传统卷积神经网络的优势,并在此基础上引入了注意力机制,通过动态调整卷积核的权重,实现对图像特征的精细捕捉和高效利用。这种机制不仅提高了分割的准确性,还增强了模型对图像中关键信息的敏感度,使得在复杂医学图像中也能实现精确分割。

在未来的医学图像分割领域,它将发挥更加重要的作用,为人类的健康事业做出更大的贡献。让我们共同期待这一新前沿技术的精彩表现!


1. 概述


本文致力于深度剖析KAN卷积在医学图像分割领域的革新性应用,特别是Tokenized KAN Block(Tok Kan)这一颠覆性设计的引入,为深度学习图像分割技术树立了新的标杆。KAN,作为一种潜力巨大的网络结构,能够替代传统的多层感知机(MLP),并在多个领域内展现出了其非凡的优势。尤其在医学图像分割这一既复杂又至关重要的领域,KAN卷积凭借其卓越的图像特征处理能力,成为了研究的焦点。在本文中,我们将U-Net结构中的卷积层替换为KAN卷积,MLP层则被KANLinear所替代,同时融入了Vision Transformer(ViT)的移位思想,使得模型能够在捕捉图像全局信息的同时,对局部细节进行精确识别。这一创新性的研究足以构成一篇完整的论文。

2. 核心创新点


将KAN卷积引入分割网络中:

Kolmogorov–Arnold Networks(KAN)在此处虽不直接等同于传统意义上的卷积神经网络架构,但我们可以将其构想为一种独特的卷积或特征提取机制,该机制深受Kolmogorov-Arnold表示定理(亦称超位置定理)启发。此定理为多变量函数的表示提供了理论基础,指出这些函数可以通过一元函数与固定二元函数的组合来构建。据此,KAN卷积可视为一种高度非线性且能有效捕捉复杂依赖关系的卷积操作。将其融入U-Net架构中,能显著提升模型提取图像特征的能力,尤其是针对那些需要高度抽象和复杂特征交互的任务。

KANLinear替换MLP:

将U-Net中的传统MLP层替换为KANLinear层,意味着这一层将KAN的特定优势(诸如强大的非线性处理能力或高精度的函数逼近能力)与线性变换的简洁高效相结合。这种替换策略旨在保持模型计算效率的同时,赋予其处理特征间复杂关系的更高灵活性,从而进一步增强模型的特征表征能力。此外,KANLinear层可能凭借其独特的机制,更有效地整合并转换来自不同网络层级的特征信息,帮助模型在全局信息与局部细节之间实现更精确的平衡。

融入移位思想:

尽管Vision Transformer(ViT)并不直接包含“移位”这一具体操作,但其自注意力机制在捕捉图像全局依赖关系上的能力,与移位操作在促进信息流动和扩大全局感受野方面的效果异曲同工。在U-Net架构中融入ViT的思想,可能指的是引入了一种机制,该机制允许特征在空间位置上直接进行交互(例如,通过自注意力模块),或者通过某种灵活的特征重排(虽非传统移位但效果类似)来加强模型的全局理解能力。这种设计策略使得模型能够在保持对局部细节高度敏感的同时,有效地整合全局信息,从而在应对复杂图像分割任务时展现出卓越的性能。在本文中,我们特别设计了沿两个方向进行的特征重排操作,以进一步提升模型的全局与局部信息整合能力。

3. 模块介绍


KAN


KAN模型由数学定理Kolmogorov–Arnold启发得出,该定理由前苏联的两位数学家Vladimir Arnold和Andrey Kolmogorov提出。定理表明,任何多元连续函数都可以表示为单变量连续函数的两层嵌套叠加(一个单一变量的连续函数和一系列连续的双变量函数的组合)。这为多维函数的分解提供了理论基础,也是KAN模型设计的核心思想。

KAN模型具体解读参考:

https://www.aspiringcode.com/content?id=17248603157044&uid=218e0c4d82f346c880d3be2c19307d0f

在这里插入图片描述

UNext模块

UNext模块一种基于卷积和多层感知器(MLP)的医学图像分割网络,旨在解决现有模型如UNet和Transformer版本在计算复杂度、参数量以及推理速度上的不足。本文是在此基础上将卷积用KAN卷积取代,将MLP用KAN模块代替。

有关UNext模块的介绍参考:

https://www.aspiringcode.com/content?id=17233927441942&uid=fb5339efc9754267a67a10a2f4b86967

在这里插入图片描述


4. 本文主要结构


本文受启发与上述的两种模块,将UNext模块中的上下采样中的卷积提取特征阶段用KAN卷积取代,将Tok MLP阶段用Tok Kan取代,从而增加模型提取特征的能力和渐少模型的参数量,同时提高模型非线性表达的能力。

整体架构如下:
在这里插入图片描述

本文所涉及的所有资源的获取方式:

https://www.aspiringcode.com/content?id=17256347583346&uid=21d463b8d98a4ef38920589d0efd153a

5. 主要代码


KAN卷积:

class KANConvs(nn.Module):
    def __init__(self, in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, enable_standalone_scale_spline=True):
        """
        定义KAN卷积层,类似于nn.Conv2d,但包括KAN样条插值权重
        :param in_channels: 输入通道数
        :param out_channels: 输出通道数
        :param kernel_size: 卷积核大小
        :param stride: 步长
        :param padding: 填充
        :param dilation: 扩张
        :param groups: 组卷积
        :param bias: 偏置项
        :param enable_standalone_scale_spline: 是否启用独立缩放样条插值
        """
        super(KANConvs, self).__init__()

        # 基本的卷积层初始化
        self.in_channels = in_channels
        self.out_channels = out_channels
        self.kernel_size = kernel_size if isinstance(kernel_size, tuple) else (kernel_size, kernel_size)
        self.stride = stride
        self.padding = padding
        self.dilation = dilation
        self.groups = groups
        self.bias = bias

        # 标准卷积层参数
        self.weight = Parameter(torch.Tensor(out_channels, in_channels // groups, *self.kernel_size))
        if bias:
            self.bias = Parameter(torch.Tensor(out_channels))
        else:
            self.register_parameter('bias', None)

        # 样条插值权重
        self.spline_weight = Parameter(torch.Tensor(out_channels, in_channels, *self.kernel_size))

        # 是否启用独立缩放样条插值
        self.enable_standalone_scale_spline = enable_standalone_scale_spline
        if enable_standalone_scale_spline:
            self.spline_scaler = Parameter(torch.ones(out_channels, 1))
            

        # 初始化权重
        self.reset_parameters()
class ConvLayer(nn.Module):
    def __init__(self, in_ch, out_ch):
        super(ConvLayer, self).__init__()
        self.conv = nn.Sequential(
            KANConvs(in_ch, out_ch, 3, padding=1),
            nn.BatchNorm2d(out_ch),
            nn.ReLU(inplace=True),
            KANConvs(out_ch, out_ch, 3, padding=1),
            nn.BatchNorm2d(out_ch),
            nn.ReLU(inplace=True)
        )

    def forward(self, input):
        return self.conv(input)

KANLinear层:

class KANBlock(nn.Module):
    def __init__(self, dim, drop=0., drop_path=0., act_layer=nn.GELU, norm_layer=nn.LayerNorm, no_kan=False):
        super().__init__()

        self.drop_path = DropPath(drop_path) if drop_path > 0. else nn.Identity()
        self.norm2 = norm_layer(dim)
        mlp_hidden_dim = int(dim)

        self.layer = KANLayer(in_features=dim, hidden_features=mlp_hidden_dim, act_layer=act_layer, drop=drop, no_kan=no_kan)

        self.apply(self._init_weights)

    def _init_weights(self, m):
        if isinstance(m, nn.Linear):
            trunc_normal_(m.weight, std=.02)
            if isinstance(m, nn.Linear) and m.bias is not None:
                nn.init.constant_(m.bias, 0)
        elif isinstance(m, nn.LayerNorm):
            nn.init.constant_(m.bias, 0)
            nn.init.constant_(m.weight, 1.0)
        elif isinstance(m, nn.Conv2d):
            fan_out = m.kernel_size[0] * m.kernel_size[1] * m.out_channels
            fan_out //= m.groups
            m.weight.data.normal_(0, math.sqrt(2.0 / fan_out))
            if m.bias is not None:
                m.bias.data.zero_()

6. 数据集


本文使用的是BUSI(Breast Ultrasound Image)是一个包含乳腺超声图像的分类和分割数据集。该数据集包括了 2018 年收集的乳腺超声波图像,涵盖了 25 至 75 岁的 600 名女性患者。数据集由 780 张图像组成,每张图像的平均大小为 500*500 像素。这些图像被划分为三类:正常、良性和恶性。而在良性和恶性乳腺超声图像中,还包含了对应胸部肿瘤的详细分割标注,为深入研究和精准诊断提供了关键信息。这份数据集不仅为乳腺癌研究提供了丰富的图像资源和宝贵支持。

在这里插入图片描述

7. 结果展示


在BUSI数据集中的结果展示如下:

MethodsIoUDice
U-Net57.2271.91
Att-Unet55.1870.22
U-Net++57.4172.11
U-NeXt59.0673.08
Rolling-UNet61.0074.67
U-Mamba61.8175.55
OURS63.4577.05

分割图:

在这里插入图片描述
运行过程:
附件下载文件,readme中有详细步骤。数据集在readme提供的链接中。

环境配置:

  - pip:
    - addict==2.4.0
    - dataclasses==0.8
    - mmcv-full==1.2.7
    - numpy==1.19.5
    - opencv-python==4.5.1.48
    - perceptual==0.1
    - pillow==8.4.0
    - scikit-image==0.17.2
    - scipy==1.5.4
    - tifffile==2020.9.3
    - timm==0.3.2
    - torch==2.4.0
    - torchvision==0.8.2
    - typing-extensions==4.0.0
    - yapf==0.31.0

运行结果:
在这里插入图片描述
本文在附件的readme中提供了除了BUSI之外的数据集,可以自行尝试增加工作量。

8. 参考文献


  1. UNeXt: MLP-based Rapid Medical Image Segmentation Network
  2. KAN: Kolmogorov–Arnold Networks

编程未来,从这里启航!解锁无限创意,让每一行代码都成为你通往成功的阶梯,帮助更多人欣赏与学习!

更多内容详见:

https://www.aspiringcode.comuid=2f3a8c82324141c48058d8e14f59b3ce

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/909799.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Oracle与SQL Server的语法区别

1)日期和日期转换函数。 SQL: SELECT A.*, CASE WHEN NVL(PAA009,) OR PAA009 >Convert(Varchar(10), SYSDATE,120) THEN Y ELSE N END AS ActiveUser FROM POWPAA A WHERE PAA001admin or PAA002admin Oracle: SELECT A.*, CASE WHEN NVL(PAA009,) or PAA009&…

基于TRIZ理论的便携式光伏手机充电装置创新

随着智能手机功能的日益强大,电量消耗问题也日益凸显,尤其是在户外活动时,电量告急常常让人措手不及。面对这一挑战,基于TRIZ(发明问题解决理论)的创新思维,一款全新的便携式光伏手机充电装置应…

Vue3父传子

1. App.vue - 父组件 咱们先来看左边的 App.vue&#xff0c;它扮演的是“父亲”角色——你可以想象它是一位热心的老爸&#xff0c;手里拿着一条消息&#xff0c;正准备把这条消息送到“儿子”那里。 <script setup> // 这个 setup 就像一个神奇的开关&#xff0c;一开…

前端 算法 双指针

文章目录 三数之和移动零盛最多水的容器接雨水 三数之和 leetcode 三数之和 题目链接 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有…

EPSON机械手与第三方相机的校准功能设计By python

EPSON机械手与第三方相机的校准功能设计By python 使用Python来实现EPSON机械手与第三方相机的校准功能是一个复杂但可行的任务。这通常涉及以下几个步骤:硬件接口通信、图像处理、标定算法实现和控制逻辑编写。 1. 环境准备 首先,库 pip install numpy opencv-python pyse…

NPU 可不可以代替 GPU

结论 先说结论&#xff0c;GPU分为可以做图形处理的传统意义上的真GPU&#xff0c;做HPC计算的GPGPU和做AI加速计算的GPGPU&#xff0c;所以下面分别说&#xff1a; 对于做图形处理的GPU&#xff0c;这个就和NPU 一样&#xff0c;属于DSA&#xff0c;没有替代性。当然&#xf…

python画图|hist()函数画直方图进阶

【1】引言 前序已经学习了hist()函数画直方图的基础教程&#xff0c;相关文章见下述链接&#xff1a; python画图|hist()函数画直方图初探-CSDN博客 在这里我们初步认识了hist()函数&#xff0c;并使用该函数画出了8个直方图。 之后又用bar(&#xff09;函数进行对比&#…

推荐一款非常好用的C/C++在线编译器

C/C作为一门底层、高效的编程语言&#xff0c;广泛应用于系统开发、游戏引擎、嵌入式系统等领域。然而&#xff0c;C/C的开发环境配置会让开发者把部分时间消耗在这件事上&#xff0c;也经常会遇到各种各样的环境问题。 本地开发的痛点 环境配置复杂&#xff1a;C/C的开发环境…

kafka如何获取 topic 主题的列表?

大家好&#xff0c;我是锋哥。今天分享关于【kafka如何获取 topic 主题的列表&#xff1f;】面试题&#xff1f;希望对大家有帮助&#xff1b; kafka如何获取 topic 主题的列表&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在Kafka中&#xff0c;可以…

用示例来看C2Rust工具的使用和功能介绍

C2Rust可以将C语言的源代码转换成Rust语言的源代码。下面是一个简单的C语言代码示例&#xff0c;以及使用c2Rust工具将其转换为Rust安全代码的过程。 C语言源代码示例 // example.c #include <stdio.h>int add(int a, int b) {return a b; }int main() {int result a…

数据结构排序之直接选择排序--堆排序

堆排序 堆排序 (Heapsort) 是指利用堆积树&#xff08;堆&#xff09;这种数据结构所设计的一种排序算法&#xff0c;它是选择排序的一种。它是通过堆来进行选择数据。需要注意的是排升序要建大堆&#xff0c;排降序建小堆。 直接选择排序的特性总结&#xff1a; 1. 堆排序使…

使用DJL和PaddlePaddle的口罩检测详细指南

使用DJL和PaddlePaddle的口罩检测详细指南 完整代码 该项目利用DJL和PaddlePaddle的预训练模型&#xff0c;构建了一个口罩检测应用程序。该应用能够在图片中检测人脸&#xff0c;并将每张人脸分类为“戴口罩”或“未戴口罩”。我们将深入分析代码的每个部分&#xff0c;以便…

【go从零单排】go三种结构体:for循环、if-else、switch

Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 for循环是go语言唯一的循环语句&#xff0c;没错&#xff0c;在go中再也不会看到while true package mainimport …

python怎么去掉换行符

换行符与其他字符并没有区别&#xff0c;由于换行符总是最后一个字符&#xff0c;所以直接选择除去最后一个字符的所有字符即可。 x abc\n x[:-1] 也可以使用字符串的strip()方法 但是strip()方法除了会去掉换行符&#xff0c;还会去掉空格等其他字符。 x.strip()

集中管理用户名和密码,定期修改密码快捷方便

在运维工作中&#xff0c;凭证管理是一项至关重要的任务。随着系统复杂性的增加和安全性要求的提高&#xff0c;如何有效地管理用户名和密码成为了运维团队面临的一大挑战。本文将介绍新版本中的凭证管理功能&#xff0c;并探讨其在运维行业中的应用和最佳实践。 一、凭证管理…

十年码农的编程心得分享

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

Elasticsearch中时间字段格式用法详解

Elasticsearch中时间字段格式用法详解 攻城狮Jozz关注IP属地: 北京 2024.03.18 16:27:51字数 758阅读 2,571 Elasticsearch&#xff08;简称ES&#xff09;是一个基于Lucene构建的开源、分布式、RESTful搜索引擎。它提供了全文搜索、结构化搜索以及分析等功能&#xff0c;广泛…

【研究报告】2024年中国工业大模型行业发展研究报告

需要行业报告PDF的朋友请点击下方免费获取 报告聚焦于中国工业大模型的发展现状&#xff0c;详细分析了其在工业领域的应用与前景。工业大模型借助人工智能技术优化了制造流程、提升了生产效率&#xff0c;尤其在能源、制造、自动化等领域取得了显著成果。报告指出&#xff0c…

PLC单键启停控制的多种写法

题目&#xff1a;编写程序&#xff0c;实现当按下SB1按钮奇数次&#xff0c;灯亮&#xff1b;当按下SB1按钮偶数次&#xff0c;灯灭&#xff0c;即单键启停控制&#xff0c;设计梯形图。 解法一&#xff1a;使用标志位进行自锁互锁 &#xff08;1&#xff09;刚上电&#xff0c…

vit及其变体(swin Deit)

参考&#xff1a;https://www.zhihu.com/question/538049269/answer/2773898603 ViT模型变体&#xff1a;DeiT模型&#xff08;Data-Efficient Image Transformer&#xff09;&#xff1b;Swin Transformer模型 &#xff08;Shifted Windows Transformer&#xff09;&#xff1…