OCT2Former: A retinal OCT-angiography vessel segmentationtransformer论文总结

news2024/12/26 0:05:38

论文(COMPUT METH PROG BIO):OCT2Former: A retinal OCT-angiography vessel segmentation transformer

源码:https://github.com/coreeey/OCT2Former

一、摘要

背景与目的:视网膜血管分割在视网膜疾病自动筛查与诊断中起着重要作用。如何分割出薄血管并保持血管的连通性是视网膜血管分割任务的关键挑战。光学相干断层血管造影(OCTA)是一种无创成像技术,可以显示高分辨率的视网膜血管。为了充分利用OCTA图像高分辨率的特点,提出了一种新的基于transformer的端到端视网膜血管分割网络OCT-2 transformer (OCT-a transformer)。

方法:OCT2Former基于编码器-解码器结构,主要包括 动态transformer编码器  和 轻量级解码器动态transformer编码器 由动态token聚合transformer辅助卷积分支组成,其中设计了基于多头动态token聚合注意力 动态token聚合transformer以在整个网络中捕获来自第一层的全局视网膜血管上下文信息,并提出 辅助卷积分支 来弥补transformer的归纳偏差不足,辅助特征提取。提出一种基于卷积的 轻量级解码器有效解码特征降低OCT2解码器的复杂度

结果:提出的OCT2Former在三个公开的数据集上进行了验证,即OCTA-SS, ROSE-1, OCTA-500(子集OCTA-6M和OCTA-3M)。提出的OCT 2前网络在这些数据集上的Jaccard指标分别为0.8344、0.7855、0.8099和0.8513,分别优于基于卷积的最佳网络1.43、1.32、0.75和1.46%。

结论:实验结果表明,提出的OCT 2 Former可以在视网膜OCTA血管分割任务上取得有竞争力的性能。

Q:什么是多头动态token聚合注意力?

A:

二、引言

结构:OCTA的简介和问题阐述 —> 方向1:在眼底图像中视网膜血管的分割上(前人工作) —> 方向2:OCTA 图像中视网膜血管的分割(前人工作) —> 引出论点:CNN 的接受域低且有限是其缺点之一,而这对语义分割至关重要 —> 引出Transformer —> 总结设计动机 —> 贡献

三、方法

3.1 网络结构

先概括架构结构 —> 编码器组成 —> 解码器组成  —> 框架流程。

OCT2Former的架构:它是基于跳连接的u型编码器-解码器结构。

编码器路径:由 动态transformer编码器 组嵌入模块 组成。提出的 动态transformer编码器 由动态token聚合Transformer和辅助卷积分支组成。

解码器路径:两个基于卷积的轻量级解码器和一个1×1卷积构成解码路径。

框架流程:当OCTA图像被馈送到所提出的OCT 2 Former中时,首先将由两个3×3卷积组成的 卷积干模块 应用于原始OCTA图像,以获得 主要特征图 ,并在不改变分辨率的情况下增加通道数量。然后,将这些特征输入到三个连续的 动态变压器编码器 中,逐级获得具有 丰富全局信息的语义token为了捕获 多尺度信息 并弥补动态Transformer编码器的位置信息损失,将来自前两个动态Transformer编码器的语义token分别送入 组嵌入模块 。在解码器路径中,来自动态Transformer编码器的多尺度语义token被馈送到 轻量级解码器 以 恢复原始分辨率 。在解码器路径的末端,应用1×1卷积以获得最终的分割图。(输入 + 模块(数量,位置) + 处理后得到的特征结果)

Q:多尺度信息和组嵌入模块的关联?

A:

3.2 动态transformer编码器

3.2.1 Vision transformer(自注意力和多头注意力)

给出ViT的定义 —> 自注意力的定义 —> 多头注意力的定义

ViT:vision transformer(ViT)由一叠自注意力层(self-attention, SA)和一个前馈网络组成,其主要思想是以 sequence-to-sequence 的方式处理图像,并在每个序列之间采取自注意机制。

自注意力:本质上由查询和所有键的 点积 以及通过softmax算子获得的 规范化注意力分数 组成。通过SA层,entity(元素)成为序列中所有entity的加权和,其中权重由归一化的注意力得分确定。不同输入嵌入之间的SA层函数可计算如下:

其中,K、Q、V分别是key、query和value的投影。d_k 是key投影K的维度,并且 \sqrt{d_k} 提供归一化以使梯度更稳定。

多头注意力:为了封装序列中不同位置之间的多重复杂关系,在变压器中采用由多个自注意块组成的多头自注意(MHSA)。与单头自注意不同,MHSA旨在学习不同表征子空间中序列到序列的信息。MHSA将输入分成M个头(头1,…头i,…,头M),并行计算每个头像的自关注,并将它们连接起来得到最终的输出。MHSA的公式为:

其中,W^Q_iW^K_iW^V_i(i = 1,2,...,M)和 W^0 是可独立学习的权重矩阵。

3.2.2 动态token聚合Transformer

问题1:虽然变压器具有全局接受场捕获能力的优势,但昂贵的计算限制了其在语义分割任务中的应用。

问题2:以前的一些工作采用4倍甚至8倍的降采样操作来减少变压器的计算,这在视网膜血管分割任务中很难采用,因为高比例的降采样操作会使薄血管消失。如何设计一种变压器来克服巨大的计算复杂度和分辨率变化问题是视网膜血管分割的关键。

问题3:在vision transformer中,标记通常包含大量冗余信息,只有最具信息量的标记子集有助于最终预测。

解决方法(工作):受基于深度学习的超像素采样的启发,我们提出了一种新的方法,称为多头动态token聚合注意力(MDTAA),该方法试图动态聚合嵌入中的相关token并去除冗余信息

思想:创建一个新的、浓缩的令牌嵌入,命名为聚合嵌入 \mathcal{T}_{ag} \in R^{D \times k} (k << N,k设为128),它可以有效地聚合原始嵌入中的重要信息,减少冗余信息。

MDTAA组成

1)动态token聚合:

  • 初始聚合首先将嵌入T的输入token输入到初始化单元中,生成初始聚合嵌入 \mathcal{T}_{ag} \in R^{D \times k},该嵌入通过自适应平均池化层初始聚合像素位置相邻的token(使用自适应平均池用于聚合特征)

  • 采用余弦距离进一步聚合高维语义空间中,符号在像素位置上的接近性不一定能反映出来。因此,\mathcal{T}_{ag} \in R^{D \times k}从原始嵌入中捕获了一些全局信息,但保留的语义信息有限。为了动态保留更抽象的信息,剔除冗余信息,我们采用余弦距离映射 \mathcal{M} (\mathcal{T}_{ag}, \mathcal{T}) \in R^{N \times k} 来度量 \mathcal{T}_{ag} 与\mathcal{T}在高维向量空间中的相似度,其值越高表示相似度越低,反之亦然。对于嵌入维数D中的每个(i, j)候选表示对,它们之间的余弦距离可表示为:

余弦距离矩阵:

在 \mathcal{M} (\mathcal{T}_{ag}, \mathcal{T}) 上使用一个softargmax(argmax的光滑版本)函数(softmax + argmax),得到一个软分配映射 \Omega \in R^{N \times k},它是可微的,能更好地反映\mathcal{T}_{ag} 和\mathcal{T}之间的相关性。

因此,每个聚合令牌可以被视为原始token嵌入的加权总和或聚合,其中信息令牌具有较大的权重,反之亦然。利用优化的 \Omega _{opt} ,最终聚合嵌入\mathcal{T}_{ag} 可以表示为:

由于聚合嵌入与原始嵌入之间的初始距离是随机的,因此单次聚合获得的令牌相对粗糙。为了更好地进行优化 \Omega ,设计了一种迭代优化算法动态token聚合(dynamic token aggregation, DTA)(轮询优化,因此称之为动态)

2) 多头动态token聚合注意(MDTAA):

综上所诉,动态token聚合注意力公式(套用自注意力公式)如下: 

多头动态token聚合注意(MDTAA) (套用多头注意力公式) 如下:

DTA代码如下:

class DTA(nn.Module):
    def __init__(self, k=130, stage_num=3):
        super(DTA, self).__init__()
        self.pool = nn.AdaptiveMaxPool1d(k)
        self.stage_num = stage_num

    def forward(self, x1, x2):
        k = self.pool(x1)
        k = self._l2norm(k, dim=1)
        q = self.pool(x2)
        q = self._l2norm(q, dim=1)
        x1 = rearrange(x1, 'b n c -> b c n')
        x2 = rearrange(x2, 'b n c -> b c n')
        # with torch.no_grad():
        for i in range(self.stage_num):
            z1 = torch.bmm(x1, k)
            z1 = F.softmax(z1, dim=2)
            z1_ = self._l2norm(z1, dim=1)
            x1_ = x1.permute(0, 2, 1)
            k = torch.bmm(x1_, z1_)
            k = self._l2norm(k, dim=1)

            z2 = torch.bmm(x2, q)
            z2 = F.softmax(z2, dim=2)
            z2_ = self._l2norm(z2, dim=1)
            x2_ = x2.permute(0, 2, 1)
            q = torch.bmm(x2_, z2_)
            q = self._l2norm(q, dim=1)
        return k, q

    def _l2norm(self, inp, dim):
        return inp / (1e-6 + inp.norm(dim=dim, keepdim=True))
3.2.3 辅助卷积分支

                                         ​​​ 

动机:由于transformer中缺少感应偏置,所提出的基于动态token聚合transformer的模型存在收敛速度慢的问题,这是transformer中典型的挑战。为了克服这个问题,设计了一个辅助卷积分支(ACB)来补充transformer的感应偏置。(增加一个感应偏置,使损失波动更小,收敛更快)

结构: ACB由两个级联的群卷积块(GCB)组成,每个GCB由一个3×3群卷积、一个批归一化和一个ReLU激活组成。

3.3 组嵌入模块

动机:为了获得多尺度特征,并补偿特征token化后的位置信息丢失。

结构:该模块由一个解token转换器、一个3 × 3组卷积和一个token转换器组成。

3.4 轻量级的解码器

结构:由一个轻量级卷积单元(一个 3 ×3 卷积、 一个批处理归一化和一个ReLU激活)和一个双线性上采样单元组成。

3.5 损失函数 

二进制交叉熵损失(BCE): 

 其中,g_i ∈ {0,1}指示地面实况,p_i ∈ [0,1]是对应的预测值,并且 M 是像素的数量。

四、实验

4.1 实验配置

数据集 —> 实现细节

数据集:OCTA-SS、ROSE-1 和 OCTA-500(子集OCTA-6M和OCTA-3M)。

实现细节:在pytorch平台上,使用24GB内存的NVIDIA RTX3090 GPU实现了OCT2Former。为了公平起见,OCT2former和其他网络都以100个epoch和2的批处理大小进行训练。Adaptive moment estimation (Adam)优化,动量为0.9,权重衰减为0.001,ploy学习率功率为0.9。随机左右翻转、自顶向下翻转和- 10°~ 10°旋转用于数据增强。

4.2 评估指标

五、实验

5.1 对比试验

定量分析:表1-4分别展示了不同分割网络在三个公开OCTA数据集上的分割结果,其中混合transformer网络包括提出的OCT2Former和UTNet,在Jaccard指数上优于大多数基于卷积的网络和纯transformer的网络,表明transformer可以应用于OCTA图像中的视网膜血管分割。所提出的网络在几乎所有评估指标上都优于其他竞争方法,特别是在Jaccard, Dice, CAL和LCC指标上。

定性分析:U-Net 作为医学图像分割中功能强大的基于卷 积的网络,在粗血管分割上表现良好,而在大多数细血管分割 上表现不佳。与 U-Net 相比,CS-Net 的分割效果更好,但分割血管的连通性较差。配备规模感知特征聚合(SFA)模块、自适应 特征融合(AFF)模块和多层次语义监督(MSS)模块的 SCS-Net 在 这三个数据集上都表现良好。但其对边界模糊的细血管的分割 性能有待提高,这可能是由于解码过程中接收野的减少所致。(分割效果 + 造成原因分析)

5.2 消融实验(损失曲线 + 评估指标对比分析)

六、总结

1. 本文提出了一种基于端到端混合变压器的视网膜血管分割网络,OCT2Former。

2. 提出了一种动态令牌聚合变压器来降低原始变压器的巨大计算成本,并设计了一个辅助卷积分支来加快原始变压器的收敛速度。

3.在 OCTASS、ROSE-1、OCTA-500(子集 OCTA-6M 和子集 OCTA-3M)数据集上对所提出的 OCT2Former 进行了评估,结果表明所提出的 OCT2Former 优于其他最先进的网络。

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

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

相关文章

面试高频:HTTPS 通信流程

更多大厂面试内容可见 -> http://11come.cn 面试高频&#xff1a;HTTPS 通信流程 HTTPS 的加密流程 接下来说一下 HTTPS 协议是如何进行通信的&#xff1a; HTTPS 通信使用的 对称加密 非对称加密 两者结合的算法 HTTPS 通信时&#xff0c;会先使用 非对称加密 让通信双…

大sql mysql执行

先把sql 拆分 太大的执行失败 使用 SQLDumpSplitter3 拆分sql 执行拆分的sql 拆分的sql 打开发现很多 ; 开头的空行 替换掉 正则 ^; 修改数据库 my.cnf my,ini 执行可能会提示 [ERR] 2006 - Server has gone away 错误 在 [mysqld] 添加以下几行 wait_timeout2880000 inter…

Qt基础之四十六:Qt界面中嵌入第三方程序的一点心得

本文主要讲解QWidget和QWindow的区别,以及如何在QWidget中嵌入第三方程序,并完美解决在QWidget中嵌入某些程序(比如Qt程序)时出现的白边问题。 下面是嵌入QQ音乐的样子,这首歌还不错。 先用spy++查看QQ音乐的窗口信息,如果安装了Visual Studio,工具菜单里自带spy++ 然后…

【1471】java项目进度管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java 项目进度管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…

【Linux】自定义协议——实现网络序列化和反序列化

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;承接上文内容【Linux】应用层协议序列化和反序列化 目录 &#x1f449;&#x1f3fb;代码实现如下Calculate.hp…

企业常用Linux三剑客awk及案例/awk底层剖析/淘宝网cdn缓存对象分级存储策略案例/磁盘知识/awk统计与计算-7055字

高薪思维&#xff1a; 不愿意做的事情:加班&#xff0c;先例自己在利他 生活中先利他人在利自己 感恩&#xff0c;假设别人帮助过你&#xff0c;先帮助别人&#xff0c;感恩境界 awk三剑客老大 find其实也算是一种新的第四剑客 find 查找文件 查找文件&#xff0c;与其他命令…

【UnityShader】图片圆角

1.需求 我们在开发的时候&#xff0c;有时候一些按钮或者菜单栏的边角是直角的需要改成圆角&#xff0c;但是让美术重新绘制耽误时间不说也确实没必要&#xff0c;这个时候我们不妨使用一个简单的shader去解决这个问题&#xff0c;下面我们就讲讲这个shader要如何实现。 需求1…

设计模式之观察者模式(优先使用对象组合的原则)的C++实现

观察者模式又称订阅者发布者模式&#xff0c;本篇介绍主要是利用对象组合大于类继承的设计模式原则实现订阅发布模式&#xff0c;这种设计的优点是想订阅数据的类不需要继承订阅者类的抽象类&#xff0c;减少了一层类的继承&#xff1b;当然&#xff0c;具体情况需要可根据需求…

在ios设备上运行Unity Profiler

久违了朋友们。 最近基于Unity 2021.3 和AR Foundation开发了个应用&#xff0c;需要在ipad上实际运行时查看程序的各项指标功耗。 于是乎&#xff0c;我尝试跟随者官方教程来实时调试&#xff0c;现在附上一些心得。 按照官方的三步走&#xff0c;Build and Run理论上会自动…

42岁TVB男艺人曾靠刘德华贴钱出道,苦熬10年终上位

张颕康在无线&#xff08;TVB&#xff09;电视打滚多年&#xff0c;近年在《逆天奇案》第一、二辑凭扎实演技为人留下印象。他还是圈中出名的「爱妻号」&#xff0c;日前在访问期间&#xff0c;张颕康三句不离多谢太太。 较年长的观众或会记得&#xff0c;张颕康初出道以「刘德…

边缘计算智能分析网关V4地面垃圾AI检测算法介绍及场景应用

在传统的卫生监管场景中&#xff0c;无法及时发现地面遗留的垃圾&#xff0c;通过人工巡逻的方式需要大量的人力、物力和时间&#xff0c;而且效率不高&#xff0c;并存在一定的滞后性&#xff0c;而采用地面垃圾AI检测算法则可以大大提高监管效率。 TSINGSEE青犀AI智能分析网…

骑砍2霸主MOD开发(6)-使用C#-Harmony修改本体游戏逻辑

一.C#-Harmony反射及动态注入 利用C#运行时环境的反射原理,实现对已加载DLL,未加载DLL中代码替换和前置后置插桩. C#依赖库下载地址:霸王•吕布 / CSharpHarmonyLib GitCodehttps://gitcode.net/qq_35829452/csharpharmonylib 根据实际运行.Net环境选择对应版本的0Harmony.dll…

【编译原理】03语法分析

1&#xff0c;语法分析的若干问题 1.1 语法分析器的作用 编译器前端的重要组成部分&#xff1a; (1) 根据词法分析器提供的记号流&#xff0c;为语法正确的输入构造分析树(或语法树)。 (2) 检查输入中的语法(可能包括词法)错误&#xff0c;并调用出错处理器进…

MyBatis 核心配置讲解(上)

大家好&#xff0c;我是王有志&#xff0c;一个分享硬核 Java 技术的互金摸鱼侠。 前两篇的文章中我们分别介绍了 MyBatis 和 MyBaits 的应用组成&#xff0c;到这里基础篇的内容就结束了。 从今天开始&#xff0c;我们正式进入 MyBatis 学习的第二阶段&#xff1a;MyBatis 的…

插值与重采样在AI去衣技术中的关键作用

在人工智能&#xff08;AI&#xff09;的众多应用中&#xff0c;去衣技术作为一种新兴的图像处理技术&#xff0c;逐渐引起了广泛关注。这项技术不仅涉及复杂的计算机视觉和深度学习算法&#xff0c;还需要对图像处理中的插值与重采样技术有深入的理解。本文将详细探讨插值与重…

【笔试训练】day7

1.在字符串中找出连续最长的数字串 思路&#xff1a; 简单双指针&#xff0c;随便怎么暴力 代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> #include<string> using namespace std;int main() {string str;cin >> str;int ans …

微服务之SpringCloud AlibabaNacos服务注册和配置中心

一、概述 1.1注册中心原理 在微服务远程调用的过程中&#xff0c;包括两个角色&#xff1a; 服务提供者&#xff1a;提供接口供其它微服务访问&#xff0c;比如item-service 服务消费者&#xff1a;调用其它微服务提供的接口&#xff0c;比如cart-service 在大型微服务项目…

Laya2.13.3 Texture和Teture2D的关系,怎样将Texture2D转换为Texture。

Texture是是纹理处理类&#xff0c;Sprite和Image上显示的图像都是经Texture处理的&#xff0c; Texture2D是3d模型纹理贴图的处理类&#xff0c;用于显示3D模型的纹理细节。 如何将Textture2D转换为Texture&#xff0c;Texture的API接口如下&#xff1a; 可以看到Texture首先…

STM32 | USART实战案例

STM32 | 通用同步/异步串行接收/发送器USART带蓝牙(第六天)随着扩展的内容越来越多,很多小伙伴已经忘记了之前的学习内容,然后后面这些都很难理解。STM32合集已在专栏创建,方面大家学习。1、通过电脑串口助手发送数据,控制开发板LED灯 从题目中可以挖掘出,本次使用led、延…

vscode 配置verilog环境

一、常用的设置 1、语言设置 安装如下插件&#xff0c;然后在config 2、编码格式设置 解决中文注释乱码问题。vivado 默认是这个格式&#xff0c;这里也设置一样。 ctrl shift p 打开设置项 3、插件信任区设 打开一个verilog 文件&#xff0c;显示是纯本文&#xff0c;没…