传知代码-KAN卷积:医学图像分割新前沿

代码以及视频讲解

本文所涉及所有资源均在传知代码平台可获取

概述

在本文中深入探讨KAN卷积在医学图像分割领域的创新应用,特别是通过引入Tokenized KAN Block(Tok Kan)这一突破性设计,将深度学习中的图像分割技术推向了新的高度。KAN作为一种能够替代传统MLP(多层感知机)的网络结构,以其独特的优势在多个领域展现出强大的潜力。而在医学图像分割这一复杂且关键的领域,KAN卷积更是凭借其高效处理图像特征的能力,成为了研究的热点。本文将U-Net结构中的卷积部分替换成了KAN卷积,将MLP部分用KANLinear取代,同时融入了类似Vision Transformer(VIT)的移位思想,使得模型在捕捉图像全局信息的同时,也能精准定位局部细节。该创新型能够支撑起一篇论文

核心创新点

  1. 将KAN卷积引入分割网络中

Kolmogorov–Arnold Networks(KAN)通常不是直接指代一种具体的卷积神经网络架构,但在这里我们可以理解为一种特殊的卷积或特征提取机制,可能基于Kolmogorov-Arnold表示定理(也称为超位置定理),该定理提供了多变量函数可以通过一系列一元函数和固定二元函数的组合来表示的理论基础。因此,KAN卷积可能意味着一种高度非线性的、能够捕捉复杂依赖关系的卷积操作。将其引入U-Net中,可以显著提升模型对图像特征的提取能力,特别是那些需要高级抽象和复杂交互的特征。

  1. KANLinear替换MLP

将传统的MLP层替换为KANLinear层,可能意味着这一层结合了KAN的某些特性(如非线性处理能力或复杂的函数逼近能力)和线性变换的简洁性。这种替换可能使模型在保持高效计算的同时,能够更灵活地处理特征之间的复杂关系,进一步增强模型的特征表示能力,同时能够减少模型复杂度。KANLinear层可能通过其独特的机制,更好地整合和转换来自不同层级的特征,从而有助于模型在全局和局部信息之间做出更精准的权衡。

  1. 融入移位思想

虽然Vision Transformer(VIT)本身并不直接包含“移位”操作,但其自注意力机制能够捕捉图像中的全局依赖关系,这一点与移位操作在促进信息流动和增强全局感受野方面的作用相似。在U-Net中融入类似VIT的思想,可能意味着引入了一种能够跨越空间位置直接交互特征的机制(如自注意力模块),或者通过某种形式的特征重排(类似于移位但更灵活)来增强模型的全局理解能力。这种设计使得模型在保持对局部细节敏感的同时,也能够有效地整合全局信息,从而在处理复杂图像任务时展现出更高的性能。本文中设计了沿着两个方向的移位。

模块介绍

KAN

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

UNext模块

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

本文主要结构

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

主要代码

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_channelsself.out_channels = out_channelsself.kernel_size = kernel_size if isinstance(kernel_size, tuple) else (kernel_size, kernel_size)self.stride = strideself.padding = paddingself.dilation = dilationself.groups = groupsself.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_splineif 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_channelsfan_out //= m.groupsm.weight.data.normal_(0, math.sqrt(2.0 / fan_out))if m.bias is not None:m.bias.data.zero_()

数据集

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

结果展示

在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之外的数据集,可以自行尝试增加工作量。

参考文献

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

源码下载

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

轮转数组 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数

示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6]向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: [5,6,7,1,2,3,4]示例 2: 输入:nums [-1,-100,3,99], k 2 输出:[3,99,-1,-100] 解释: 向右…

Halo 开发者指南——项目运行、构建

准备工作 环境要求 OpenJDK 17 LTSNode.js 20 LTSpnpm 9IntelliJ IDEAGitDocker(可选) 名词解释 工作目录 指 Halo 所依赖的工作目录,在 Halo 运行的时候会在系统当前用户目录下产生一个 halo-next 的文件夹,绝对路径为 ~/ha…

通过LiveGBS实现安防监控摄像头GB28181转成WebRTC流实现web浏览器网页无插件低延迟直播...

目录 1、WebRTC超低延时直播2、WebRTC延时对比3、LiveGBS的低延时的WebRTC流4、分屏页面如何选择默认播放流5、无法播放Webrtc6、搭建GB28181视频直播平台 1、WebRTC超低延时直播 需要低延时的视频流监控播放,之前可以用rtmp的低延时播放(1秒左右),随着浏…

腾讯百度阿里华为常见算法面试题TOP100(4):双指针、哈希、滑动窗口

之前总结过字节跳动TOP50算法面试题: 字节跳动常见算法面试题top50整理_沉迷单车的追风少年-CSDN博客_字节算法面试题 目录 双指针 42.接雨水 283.移动零 11.盛最多水的容器 15.三数之和 哈希 1. 两数之和 49.字母异位词分组 128.最长连续序列 滑动窗…

GUI编程13:JDialog弹窗

视频链接:15、JDialog弹窗_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1DJ411B75F?p15&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 package com.yundait.lesson04;import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; im…

计算机网络27、28——Linux命令1、2

1、虚拟机网络前方路径内容 用户名机器名:/$ $表示普通用户,#表示root用户 2、Linux不分盘,都是绝对路径 /表示根目录,表示计算机文件夹下 ~是当前用户的家,表示home文件夹下自己的文件夹 3、bin文件夹下的是可执…

书生大模型全链路开源体系,学习

优点 书生浦语开源大模型,是一个开源的大模型,大家可以一起学习 还有配套的教学视频,很快就能上手,而且还奖励算力,可以直接训练,讨论学习,非常nice。 教学视频 书生浦语大模型全链路开源开…

Qt实现登录界面

本文基于Qt实现一个简单的登录界面,主要使用到Widget、button、edit等控件,基于自定义的信号槽实现界面的跳转,使用绘图设备添加背景图等。 1. 创建主界面 设计主界面的样式,并添加相关的控件。如下显示: 代码如下&…

Android Tools | 如何使用Draw.io助力Android开发:从UI设计到流程优化

Android Tools | 如何使用Draw.io助力Android开发:从UI设计到流程优化 1. 引言 在Android开发中,视觉化设计与流程管理至关重要。虽然开发工具如Android Studio强大,但它并不适用于所有设计场景。Draw.io是一款免费的在线绘图工具&#xff…

【C++笔记】类和对象的深入理解(三)

【C笔记】类和对象的深入理解(三) 🔥个人主页:大白的编程日记 🔥专栏:C笔记 文章目录 【C笔记】类和对象的深入理解(三)前言一.日期类的实现1.1声明和定义分离1.2日期类整数1.3日期类整数1.4日期类-整数1.5日期类-日期1.6复用对…

5. Python之数据类型

Python数据类型有数值型,字符串型,布尔型等等 内置函数type(),可以查看变量的数据类型 。 一、数值类型 整数(没有小数部分,包含正整数,负整数,0,默认为十进制数)&…

RuoYi-Vue3使用minio图片预览不了的问题

参照官网配置好之后,图片预览不了 1、参照官网修改前端src\components\ImageUpload\index.vue 2、如果图片预览不了,发现是Minio后台返回的url地址内部包括逗号 与代码里split(",")冲突了, 解决方法是改成分号 多个图片可以预览了…

Pikachu靶场之csrf

CSRF 跨站请求伪造 CSRF入门及靶场实战 - FreeBuf网络安全行业门户 攻击者伪造恶意链接,诱使用户点击,这个链接附带了用户的认证凭据Cookie、Session等,执行操作如转账。 因为带了cookie、session,服务器认为是用户的行为。借用…

mysql-搭建主从复制

文章目录 1、准备主服务器2、准备从服务器3、主库配置3.1、创建MySQL主服务器配置文件: 4、从库配置5、搭建主从&测试5.1、使用命令行登录MySQL主服务器5.2、主机中查询master状态:5.3、从机中查询slave状态:5.4、主机中创建slave用户&am…

go-map系统学习

map底层结构 Goland的map的底层结构使用hash实现,一个hash表里有多个hash表节点,即bucket,每个bucket保存了map中的一个或者一组键值对。 map结构定义: runtime/map.go:hmap type hmap struct {// Note: the format of the hma…

从零开学C++:多态

引言:在我们去购买汽车票的时候,我们总会遇到成人全价,学生打折的情况。不同的对象(成人、学生)进行同一操作(购买车票),得到不同的结果(全价、打折)&#xf…

Redis实现发布/订阅功能(实战篇)

前言 博主在学习 Redis 实现发布订阅功能的时候,踩了太多的坑。 不是讲解不详细,看的一知半解;就是代码有问题,实际压根跑不起来! 于是博主萌生了自己写一个最新版且全程无错的博客供各位参考。希望各位不要把我才过…

深入理解IP地址分类及子网划分详解

在互联网时代,IP地址是网络通信的基础。无论是访问网站、发送电子邮件,还是进行数据传输,IP地址都扮演着至关重要的角色。本文将详细解析IP地址的分类及子网划分的原理,帮助你更好地理解网络架构及其应用。 一、什么是IP地址 IP…

教师薪酬管理系统的设计与实现

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,老师信息因为其管理内容繁杂,管理数量繁多导致手工进行处理不能满足广…

Android MediaPlayer + GLSurfaceView 播放视频

Android使用OpenGL 播放视频 概述TextureView的优缺点OpenGL的优缺点 实现复杂图形效果的场景参考 概述 在Android开发中,使用OpenGL ES来渲染视频是一种常见的需求,尤其是在需要实现自定义的视频播放界面或者视频特效时。结合MediaPlayer,我…