糖尿病视网膜病灶分割(Diabetic Retinopathy Multi-lesion Segmentation)-RTNet论文总结

news2024/12/30 1:29:46

论文:RTNet: Relation Transformer Network for Diabetic Retinopathy Multi-lesion Segmentation

目录

一、背景和出发点

二、创新点

三、方法实现

A. 概述

B. 全局transformer模块(GTB)

C. 关系transformer模块(RTB)

1. 自注意头部分

2. 交叉注意头部分

四、损失函数

五、实验

1. 对比实验

2. 消融实验

3. 定性结果

六、结论


一、背景和出发点

研究背景:糖尿病视网膜病变(DR)的自动分割对于辅助眼科医师诊断具有重要意义。虽然对这一课题进行了许多研究,但以往的工作大多过于关注网络的设计,而没有考虑病变的病理关联。

出发点:作者通过调查视网膜病变的致病原因,发现某些病变与特定的血管闭合有着某种关联性。因此作者希望通过提取多病变之间的类内依赖关系和多病变与血管的类间关系,以提高视网膜病变分割效果。

主要工作:作者提出了RTNet,采用双分支结构的GTB模块RTB模块来同时分割四种视网膜病变。其中,GTB(全局Transformer模块)用于提取病变和血管的全局特征,RTB(关系transformer模块)用于提取病变特征之间的全局依赖以及融合病变特征和血管特征

研究成果:在IDRiD和DDR数据集上进行的综合实验很好地证明了我们的方法的优越性,它实现了与最先进技术相比的具有竞争力的性能。

二、创新点

1. 提出了一种双分支结构来获取血管信息,有助于定位DR病变的位置。为了在多病灶分割中有效利用血管信息,设计了一种基于transformer机制的关系转换器模块(RTB)。据我们所知,这是第一次在眼底医学图像中使用多头transformer结构进行病灶分割。

2. 提出了全局转换模块(GTB)关系转换模块(RTB)用于检测小尺寸或边界模糊的特殊医学图像。该设计探索了DR(糖尿病性视网膜)病变之间的内在关系,从而提高了捕获感兴趣区域细节的性能。

3. 在IDRiD数据集上的实验表明,提出的方法在DR多病变分割效果上名列前茅。具体来说,我们的方法在DR多病变分割中表现最好,在HE病变分割中排名第二。在DDR数据集上的实验表明,该方法在EX、MA和SE分割任务上优于其他方法,在HE分割任务上排名第二。

三、方法实现

A. 概述

其总体架构如图所示,由主干、全局transformer模块(GTB)关系transformer模块(RTB)和分割头四个关键部件组成。

总体流程

1. 首先眼底图像经过主干得到特征图 F

2. 然后,引入由两个平行分支组成的全局transforme模块(GTB),以利用 F 中像素之间的长距离依赖关系,分别生成带有全局上下文信息的特定血管特征 F_v 和病变特征 F_l

3. 在提供病变特征的分支上,进一步整合了一个关系transformer模块(RTB),使用自注意力和交叉注意力头来构建血管和病变之间的空间关系:自注意力头仅输入病变特征 F_l,并通过自注意力机制利用长程上下文信息生成自注意力特征 F_s 。交叉注意力头同时输入病变和血管特征 F_lF_v,并将有益的细粒度血管结构信息合并到 F_v 中,产生交叉注意力特征 F_c 。得到的 F_sF_c 连接在一起形成RTB模块的输出 F_{out}

4. 最后,使用两个包含norm层和1×1卷积的兄弟头,分别根据血管特征和连接的病变特征来预测血管和病理掩模。

B. 全局transformer模块(GTB)

目的:是通过注意力机制生成带有全局上下文信息的特定血管特征 F_v 和病变特征 F_l

主体结构GTB是一个多头注意力模块,架构参考GCNet中的GC模块和NLNet中的NL模块

输入:以主干神经网络(unet)生成的 F\in \mathbb{R}^{C\times W\times H} 为输入。

输出:经过注意力提炼的特征图 F_iF_v\in \mathbb{R}^{C\times W\times H}

步骤

(1) 获取查询Q(F),K(F),V(F):输入特征图 F,采用表示为 QKV的三个生成器来将输入 F 分别转换为查询。在GTB中,生成器 Q3×3卷积和全局平均池实现,输出查询向量Q(F)\in R^{C'\times 1},其中通道数为C'=C/8。生成器KV 具有与 Q 相同的架构,除了将全局平均池化替换为reshape操作,输出K(F),V(F)\in R^{C' \times HW}

(2)在获得之后,将query和key通过矩阵乘法得到\mathcal{F}(F)。很明显,这里得到的\mathcal{F}(F)是一个空间注意力向量。算子公式如下:

                                                                \mathcal{F}(F)=K(F)^TV(F)

其中,上标T表示矩阵的转置算子。

(3) 接下来,考虑全局变换操作,将 V(F) 与softmax处理后的\mathcal{F}(F)进行矩阵乘法,得到G(F) \in R^{C' \times1},其被定义为:

                                                G(F)= V(F)softmax(\mathcal{F}(F))

其中softmax是 \mathcal{F}(F) 的一个softmax函数。

(4)然后,通过1×1卷积,将 G(F) 的通道数从C'转换回C。再将获得的具有注意特征的 G(F) 作为输入 F 的残差项,线性嵌入 F(本质上是乘以权重参数再相加),获得最终输出 F_lF_v ,对应的算子公式如下:

                                                F_i = WG(F)+Fi \in \{l,v\}

其中,+运算表示广播元素级求和运算,W是线性嵌入。

总结:GTB先融合通道加权特征,再融合空间加权特征与原输入信息。其中,Q(F)是一个通道注意力向量,与K(F)进行矩阵乘法,融合了通道信息的同时,提取出了一个空间注意力向量\mathcal{F}(F)\mathcal{F}(F)通过softmax归一化处理,再通过卷积恢复原通道数,再与原输入信息F 进行线性加权求和,最终融合了空间上下文信息。

Q1:步骤3中softmax的作用是什么?为何使用?

A:为了归一化,因为在提取到每个像素对其他像素的影响大小的数值后,我们希望遵从统计学的规则,以概率[0-1]的形式表示某个像素对其他像素的影响权重。

在NLNet中以矩阵形式表示两个元素之间的依赖关系,而GTB模块中只是一个向量,这引发了对问题4的思考。下图为NL模块:

Q2:每次进行矩阵相乘\otimes的目的是什么?

A:第一次进行矩阵乘法,如下图所示,是为了融合通道注意力,feature map中每一行像素都与通道向量相乘再相加,通过通道权重的筛选,最终得到一个融合了通道注意力的空间向量\mathcal{F}(F);第二次进行矩阵乘法,feature map与空间向量相乘,注意这里的feature map与空间向量虽然通道数不一样,但是空间大小相同,因此通过矩阵乘法使得每一个像素都关联到其他像素,最终提取到全局上下文信息

Q3:GTB模块最后为什么进行残差相加\oplus

A:与NL模块相同,是为了能让GTB模块可以作为一个组件直接插入任意的神经网络中,把模块设计成residual block的形式

Q4:GTB模块获取全局上下文信息的过程,经历过了平均池化,而且query和key、value的各维度大小都不一致,提取的空间信息是否还关联上下文?

A:可以,这个问题通过仔细思考问题2,即可得到解答。

C. 关系transformer模块(RTB)

目的:用于捕获病变间的类内依赖关系和病变与血管间的类间关系。

结构:由自注意头和交叉注意头组成。

输入:GTB模块的输出 F_l,F_v\in \mathbb{R}^{C\times W\times H}

输出:串联了病变区域的自注意力特征和血管、病变区域交叉注意力特征的F_{out} \in \mathbb{R}^{C\times W\times H}

步骤

GTB模块由两部分构成,自注意部分和交叉注意部分。

1. 自注意头部分

(1)输入的 F_l 经过三个生成器Q、K、V(都由一个3 × 3卷积和一个reshape操作构成)得到Q_s(F_l),K_s(F_l),V_s(F_l) \in R^{C' \times HW}

(2)Q_s(F_l),K_s(F_l) 经过一个矩阵乘法操作,得到一个关联到全局上下文的特征\mathcal{F}_s(F_l)。(观察结构图,毫无疑问,\mathcal{F}_s(F_l)中的每个像素都关联到了其他像素。)

(3)\mathcal{F}_s(F_l) 再经过一个softmax操作进行归一化,再与 V_s(F_l) 进行矩阵乘法操作,得到特征G(F_l),这个特征由 V_s(F_l) 融合了病变区域的全局信息得来。

 (4)G_s(F_l) 再经过一个1x1卷积和reshape操作,将feature map大小还原为CxHxW,再与原特征图 F_l 进行残差计算(加权之后逐元素相加)得到特征 F_s ,这个特征得到病变区域的类内依赖关系

                                                        F_s=W_sG_s(F_l)\oplus F_l

2. 交叉注意头部分

 (1)输入的 F_l 经过生成器Q得到Q_c(F_l) \in R^{C' \times HW},输入的F_v 经过生成器K、V得到K_c(F_v),V_c(F_v) \in R^{C' \times HW}

(2)Q_c(F_l),K_c(F_v) 经过一个矩阵乘法操作,得到一个关联到病变区域和血管区域的特征\mathcal{F}_c(F_l,F_v)

(3)\mathcal{F}_c(F_l,F_v) 再经过一个softmax操作进行归一化,再与 V_c(F_v) 进行矩阵乘法操作,得到特征G(F_l),这个特征由 V_c(F_v) 融合了病变区域和血管区域的交互信息得来。

(4)G_c(F_l,F_v) 再经过一个1x1卷积和reshape操作,将feature map大小还原为CxHxW,再与原特征图 F_l 进行残差计算(加权之后逐元素相加)得到特征 F_c ,这个特征融合了病变区域和血管区域的类间关系

                                                        F_c=W_cG_c(F_l,F_v)\oplus F_l

3. 最后,将特征 F_s 和特征 F_c 在通道方向进行拼接操作,得到最终的输出特征 F_{out},这个特征同时融合了病变区域和血管区域的类间关系和病变区域的类内依赖关系

四、损失函数

RTNet的损失函数主要有交叉熵损失构成:

其中,\mathcal{L}_{lesion}为病变区域的五类交叉熵损失,\mathcal{L}_{vessel}为血管区域的二类交叉熵损失,\lambda参数用于调整\mathcal{L}_{lesion}\mathcal{L}_{vessel}的占比。

五、实验

RTNet主要进行了两个实验分别是对比实验消融实验

数据集:IDRiD和DDR数据集。

评估指标:precision,recall (PR) 和receiving operating characteristic (ROC)的曲线下面积(AUC)。

1. 对比实验

RTNet在EX、MA和SE(三种病变)的AUC_ROC(ROC的下曲线面积)以及EX和SE的AUC_PR(召回率下曲线面积)中排名第一,在HE(一种病变)的AUC_ROC 和AUC_PR中排名第二。

2. 消融实验

与各种软注意力模块对比所提出的GTB模块的效果。

进行模块消融实验,验证各模块的效果。

3. 定性结果

六、结论

在本文中,作者提出了一种新颖的网络结构,采用双分支结构的GTB 和RTB来同时分割四个DR病变。该网络的优秀实验结果可以归功于GTB和RTB,它们研究了多病变之间的类内依赖关系和多病变与血管的类间关系。此外作者提到由于受到数据集的局限(专家像素级标注的成本过高),导致该网络的不足。因此一个像素级别的视网膜病变数据集是一个可改进的方向。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux操作系统】深入探索Linux系统编程中的信号集操作函数

在Linux系统编程中,信号集操作函数是非常重要的工具,它们允许我们对信号进行管理和控制。本篇博客将详细介绍Linux系统编程中的信号集操作函数,包括信号集的创建、添加和删除信号,以及对信号集进行操作的常用函数。通过深入了解这…

华为Atlas的迭代关系、性能特点与典型应用场景

衔接上文,本篇主要讲解华为Atlas训练卡的迭代关系。以及迭代后的训练卡性能特点与典型应用场景。 Atlas 300T A2 训练卡的迭代关系为Atlas 300T Pro升级到Atlas 300T A2。相比之下,Atlas 300T A2 性能特点: ○ 高度集成 AI算力、通用算力、…

无人机巡检输电线路是什么,怎么巡?

在今日科技迅速发展的时代,无人机为输电线路巡检提供了一种高效、安全且准确的解决方案。那么,为什么无人机巡检输电线路如此关键呢?以下是对这一问题的深入剖析。 1. 提高工作效率 传统的巡检模式与现实挑战:在过去,输…

shell脚本语句(画矩形、三角形、乘法表和小游戏)(#^.^#)

目录 一、语句 一、条件语句 一、以用户为例演示 一、显示当前登录系统的用户信息 二、显示有多少个用户 二、单分支if 一、输入脚本 二、验证结果 三、双分支if 一、输入脚本 二、验证结果 四、多分支if 一、输入脚本 二、验证 二、循环语句 一、shell版本的循环…

【Freertos基础入门】深入浅出信号量

文章目录 前言一、Freertos的信号量是什么?二、二进制信号量和计数型信号量是什么?三、信号量初步了解1.二进制信号量的使用2.give和take是什么?3.为什么需要动态和静态创建的方式? 四、二进制信号量示例代码总结 前言 本系列基于…

docker之镜像与数据卷

镜像 简介 1.镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于环境开发的软件,他包含运行某个软件所需的所有内容,包括代码、运行时库、环境变量、配置文件 2.将所有的应用和环境11,直接打包成docker镜像&…

健康检测智能睡眠床垫方案

《2022中国睡眠质量调查报告》调查结果显示,16%的被调查者存在夜间睡眠时间不足6个小时,表现为24点以后才上床睡觉,并且在6点之前起床;有83.81%的被调查者经常受到睡眠问题困扰,其中入睡困难占2…

文心一言 VS 讯飞星火 VS chatgpt (79)-- 算法导论7.4 4题

四、请用go语言,证明:RANDOMIZED-QUICKSORT 期望运行时间是 Ω(nlgn)。 文心一言: 首先,为了证明RANDOMIZED-QUICKSORT的期望运行时间是Ω(nlg n),我们需要证明在最坏的情况下,该算法的运行时间是O(nlg n)。然后&…

无涯教程-PHP.INI File Configuration函数

PHP配置文件php.ini是影响PHP功能的最终且最直接的方法。每次初始化PHP时都会读取php.ini文件。换句话说,无论是模块版本的httpd重新启动还是CGI版本的每次脚本执行都重新启动。如果未显示您的更改,请记住停止并重新启动httpd。 该配置文件已注释完整。键区分大小写,关键字值不…

阿里云服务器-修改ecs操作系统,把window系统更换成Linux操作系统

其他sql格式也在更新中,可直接查看这个系列,要是没有你需要的格式,可在评论或私信我 总目录 目录-后期更新打算 hive的nvl中的子查询 总目录我这个是window,默认应该都是window,我需要改成Linux系统第一步&#xff…

浅谈搭建CobaltStrike云服务器可能会遇到的一些问题

1.文件上传 若要将本机的文件上传至云服务器,你需通过Xshell来实现 先在xshell连接云服务器,命令行中执行rz命令,即可实现文件上传 若没有rz命令,则需用到以下命令进行安装(二选一): 适用于redhat linux: yum install lrzsz适用于centos或u…

使用Mavon-Editor编辑器上传本地图片到又拍云云存储(Vue+SpringBoot)

需求:将本地的图片上传到服务器或者云存储中,考虑之后,这里我选的是上传到又拍云云存储。 技术背景: 前端:VueAjax 后端:SpringBoot 存储:又拍云云存储原理:Mavon-Editor编辑器有两个…

大模型框架LangChain开发实战(二)

一、关于数据的准备及项目背景 Notion提供了团队管理的功能,方便团队成员进行在线协作办公,提高交互效率,notion上面的数据可能包括项目的数据,进度管理的数据,企业服务的数据等等,这里使用了从notion网站…

【校招VIP】产品分析能力之用户画像出发

考点介绍: 用户行为和交互是产品经理能力的重要部分,在校招中,基于用户画像的分析题和设计题也是高频考点。 『产品分析能力之用户画像出发』相关题目及解析内容可点击文章末尾链接查看! 一、考点题目 1. 爱奇艺中搜索关键词“…

【C++ 学习⑮】- 模板进阶

目录 一、必须使用 typename 的场景 二、非类型模板参数 三、模板的特化 3.1 - 函数模板特化 3.2 - 类模板特化 3.2.1 - 全特化 3.2.2 - 偏特化 四、类模板分离式编译 4.1 - 分离编译的概念 4.2 - 类模板分离式的问题 4.3 - 解决方案 一、必须使用 typename 的场景 …

shell 基础3

在第一行后面追加内容 在第3行后面追加内容 在每行前面加 在第四行前面加入 -i表示添加在文本中 在每个22后面加 $a 在文件最后一行追加 匹配到每个包含22的行,并在之前加 把第7行整行替换 将所有匹配22的行替换 删除第5行 隔行删除,删除奇数行 删除偶数…

live555server环境搭建

live555环境搭建详解(ubuntu18.04) 1.环境依赖 openssl可选安不安 安装(选择好版本) sudo apt-get update sudo apt-get install openssl sudo apt-get install libssl-dev使用头文件是否可用时编译测试时记得链接&#xff08…

【C++入门到精通】C++入门 —— priority_queue(STL)优先队列

阅读导航 前言一、priority_queue简介1. 概念2. 特点 二、priority_queue使用1. 基本操作2. 底层结构 三、priority_queue模拟实现⭕ C代码⭕priority_queue中的仿函数 总结温馨提示 前言 ⭕文章绑定了VS平台下std::priority_queue的源码,大家可以下载了解一下&…

C#,数值计算——Ridders的多项式外推方法的计算方法与源程序

using System; namespace Legalsoft.Truffer { /// <summary> /// 通过Ridders的多项式外推方法返回函数func在点x处的导数。 /// 输入值h作为估计的初始步长&#xff1b;它不需要很小&#xff0c;而是应为x上的增量&#xff0c; /// 在此增量上func将发…

在CMD中找不到Bootrec/fixboot元素怎么办?

当您尝试在CMD中执行Bootrec/fixboot以修复Windows 7/8.1/8/10/11和Windows Server 2012等操作系统中的系统启动问题时&#xff0c;通常会遇到Bootrec/fixboot参数无效的情况。这类启动问题可能是由磁盘克隆、系统迁移、Windows更新、MBR和GPT转换等引起的。当一个问题仍然存在…