Retinal Structure Detection in OCTA Image viaVoting-Based Multitask Learning

一、摘要

研究背景:自动检测视网膜结构,如视网膜血管(RV)、中央凹血管区(FAZ)和视网膜血管连接(RVJ),对了解眼部疾病和临床决策具有重要意义。

主要工作:在本文中,提出了一种新的基于投票的自适应特征融合多任务网络(VAFF-Net),用于光学相干断层扫描血管造影(OCTA)中RV、FAZ和RVJ的联合分割、检测和分类。

提出了一种针对特定任务的 投票门模块 ,从两个层面对特定任务自适应地提取和融合不同的特征:来自单个编码器的不同空间位置的特征和来自多个编码器的特征。特别是,由于OCTA图像中微血管的复杂性,使得同时精确定位和分类视网膜血管连接为分叉/交叉是一项具有挑战性的任务,专门设计了一个结合热图回归和网格分类的 任务头 。利用来自不同视网膜层的三种不同的面血管造影,而不是遵循仅使用单一面造影的现有方法。

实验结果:对使用不同成像设备获取的三个octa数据集进行了广泛的实验,结果表明,所提出的方法总体上优于最先进的单一用途方法或现有的多任务学习解决方案。我们还证明了我们的多任务学习方法可以推广到其他成像模式,如彩色眼底摄影,并且可能被用作通用的多任务学习工具。我们还构建了三个用于多结构检测的数据集,其中部分数据集的源代码和评估基准已经对外开放。

二、方法

所提出的VAFF-Net的整体架构如图所示:

VAFF-Net包括三个主要组件:特征提取模块投票门模块(VGM)和任务头

A.  特征提取器和投票模块

目的:使用包含深度信息的输入同时提取多个视网膜结构。VAFF-Net的输入是IVC、SVC和DVC三个面投影。通过特征提取器和三个任务头,可以同时获得RV、FAZ和RVJ的检测结果。特征提取模块由三个特征提取器组成,分别对应三个输入的面部血管图,即IVC、SVC和DVC。

特征提取器:作者采用ResNet-50作为特征提取器,其中将第一个7 × 7卷积层替换为具有相同填充的3 × 3卷积,以确保投票门模块的输出大小与输入图像的大小一致。在作者的实现中,除了第一个卷积层,三个提取器共享权重,以限制可学习参数的数量。由于不同的输入和第一层独立,这三个编码器能够提取不同的特征,尽管在后面使用了共享权重的策略。

投票模块:投票模块包含三个独立的特定于任务的投票门模块,每个模块对应一个任务,并自适应学习如何进行特征选择和融合。

  • 1. 模块组成:VGM由多个3 × 3的卷积层组成,经过批处理归一化(batch normalization, BN)和ReLU激活,最后的卷积层使用sigmoid算子将特征映射成具有3个通道的概率形式,作为选择特征的门。(重点
  • 2. 输入/输出:每个task∈{RV, FAZ, RVJ}的VGM以来自三个编码器的第一层输出的拼接作为输入,对应的输出\{G_{task}\}是学习的投票门特征。
  • 3. 作用:投票门可以选择两个层次的特征:不同层面的图像,以及来自编码器的不同空间位置的特征。(前者考虑到从三幅图像中获得的特征对于每个任务的重要性是不同的。对于后者,我们可以利用以下空间特性:FAZ分割任务侧重于黄斑区域;RVJ检测任务依赖于相交血管的位置,而血管分割任务则需要更多地关注血管的边缘。)

在得到每个任务的投票门特征\{G_{task}\}后,将三个编码器的多尺度融合特征\{F_i\} (i∈{1,2,3})分别与\{G_{task}\}(task∈{RV, FAZ, RVJ})相乘,求和得到相应任务的综合特征映射\{M_{task}\}。这些操作可以表述为:

其中 n 是特征通道的数量,\{G^i_{task}\}表示投票门\{G_{task}\}的第 i 个通道,◦ 表示元素相乘。然后将特定于任务的特征映射\{M_{task}\}馈送到相应的任务头部,以获得特定于任务的最终结果

Q:权重共享怎么实现的?

Q:F1、F2、F3是怎么得到的?

 

B.  RVJ 检测与分类任务头

研究问题:RVJ 是仅覆盖几个像素的小目标,基于边界盒的目标检测方法,通常难以在 RVJ 检测任务上获得令人满意的性能。

解决方案:引入了一个具有两个分支的任务头,它结合了热图回归网格分类用于分叉和交叉的检测和分类。我们将这个相对复杂的任务分成两个简单的任务:使用热图回归来定位 RVJs,使用网格分类分支来区分分叉和交叉。

RVJ任务头:

  • 1. 输入:是由RVJ的VGM(投票门)重新加权的特征提取器的输出\{M_{RVJ}\}
  • 2. 结构:首先,将用于RVJ检测的特征图\{M_{RVJ}\}输入到一个卷积块中,该卷积块由两个具有BN和ReLU激活函数的3 × 3卷积层组成。最后一个卷积层具有sigmoid激活函数,通过1通道的热图输出获得所有结点的位置另一个分支也以\{M_{RVJ}\}作为输入:它将图像划分为S × S网格,并对每个网格单元预测3个类别概率(即包含分叉、包含交叉和仅背景)和1个置信度分数(置信度分数表示模型对网格包含RVJ的置信度,并可用于在最终处理期间选择阈值)。这些预测值被编码为S × S × 4张量

在实现中,将每个网格单元设置为8 × 8,因此该分支的最终预测是一个输入为304 × 304的图像的38 × 38 × 4张量。一个分支的输出是所有节点的热图,另一个分支的输出是每个网格中包含的节点的类别。通过组合两个分支的结果来获得最终的预测。网格的大小是一个超参数。对于304 × 304的输入,作者根据经验发现网格大小为8 × 8是合适的,这样可以保证网格中尽可能多地有一个分支/交叉点。网格的大小可以根据输入图像的大小进行调整。

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

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

相关文章

【MySQL】本地创建MySQL数据库详解

文章目录 下载MySQL安装重置密码本地连接 下载MySQL 下载网址:https://dev.mysql.com/downloads/mysql/ 安装 将下载好的压缩包解压到D盘。 在解压好的文件夹中创建my.ini文件。 将以下代码复制粘贴到创建好的my.ini文件中。注意修改文件路径。 [mysqld] #设置…

在vue3和上挂载方法,以及在页面中怎么使用原型(公共)上的方法

//新建的项目的main.js文件是这样的 //main.js 文件 //befor import { createApp } from vue; import App from ./App.vue;const app createApp(App); app.mount(#app);以下例子用于解释在vue3.0的main.js中挂载公共的方法(foo) //main.js 文件 //afte…

02-Dapper

1.2:Dapper 1.2.1:设计要求 1、无处不在的部署: 任何服务都应该被监控到,任何服务出问题都要做到有据可查。2、持续的监控:做到7*24小时全天候监控,任何时候出了问题都要基于监控数据追踪问题根源。1.2.2…

设计模式之策略模式【行为型模式】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档> 学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某…

代码随想录 Leetcode142. 环形链表 II

题目: 代码(首刷看解析 2024年1月13日): class Solution { public:ListNode *detectCycle(ListNode *head) {if (head nullptr) return nullptr;ListNode* fast head;ListNode* slow head;while (true) {if(fast->next nullptr || fa…

Binder 机制 javanative

一:Binder介绍 Binder是一套ipc通信方案 Binder框架定义了四个角色: Server ,Client,ServiceManager (以后简称SMgr)以及Binder驱动。其中Server ,Client,SMgr运行于用户空间&#…

Modbus协议

一.起源 Modbus由Modicon公司于1979年开发,是一种工业现场总线协议标准。Modbus通信协议具有多个变种,其中有支持串口,以太网多个版本,其中最著名的是Modbus RTU、Modbus ASCII和Modbus TCP三种。其中Modbus TCP是在施耐德收购Mo…

LeetCode讲解篇之39. 组合总和

文章目录 题目描述题解思路题解代码 题目描述 题解思路 首先排序数组,然后开始选择数字,当选择数字num后,在去选择大于等于num的合法数字,计算过程中的数字和,直到选数字和等于target, 加入结果集,若数字和…

FreeRTOS 基础知识

这个基础知识也是非常重要的,那我们要学好 FreeRTOS,这些都是必不可少的。 那么就来看一下本节有哪些内容: 首先呢就是介绍一下什么是任务调度器。接着呢就是任务它拥有哪一些状态了。那这里的内容不多,但是呢都是非常重要的。 …

C语言——内存函数【memcpy,memmove,memset,memcmp】

📝前言: 在之前的文章C语言——字符函数和字符串函数(一)中我们学习过strcpy和strcat等用来实现字符串赋值和追加的函数,那么除了字符内容,其他的数据(例如整型)能否被复制或者移动呢…

maya显示方式及视图操作

原始图像: 按数字键2后(平滑效果): 按数字键3后(平滑效果,无原始外边框): 按数字键4后(仅显示边框): 方便选择后面的点、线及面 按数字键5后&…

java多线程(并发)夯实之路-进程与线程深入浅出

进程与线程介绍 进程 程序由指令和数据组成,程序工作时,就会将指令加载至CPU,数据加载至内存,进程就是用来加载指令,管理内存,管理IO的。 当程序运行,磁盘加载这个程序的代码至内存,…