【技术追踪】使用去噪扩散型进行 3D 血管图生成(MICCAI-2024)

news2024/11/13 23:01:57

  graphs 图也可以用 diffusion 耶~

  本文提出了第一个去噪扩散模型在 3D 血管图生成中的工作,其是新颖的两阶段生成方法,依次对节点坐标和边进行去噪,在生成多样化、新颖且解剖学上合理的血管图方面性能表现出色。


论文:3D Vessel Graph Generation Using Denoising Diffusion
代码:https://github.com/chinmay5/vessel_diffuse


0、摘要

  以 3D 图形表示的血管网络有助于预测疾病生物标志物,模拟血流,并有助于合成图像,有助于临床决策。然而,生成与感兴趣的解剖结构相对应的逼真血管图是具有挑战性的。
  以前的方法主要是用自回归的方式生成血管树,不能应用于有循环的血管图,如毛细血管或特定的解剖结构,如Willis环。
  为了解决这一问题,本文首次探索了去噪扩散模型在 3D 血管图(vessel graphs)生成中的应用,本文提出一种新的两阶段生成方法,该方法对节点坐标和边缘进行顺序去噪。(注意 graph 与 image 是不同的~
  在两个真实世界的血管数据集进行了实验,包括微观毛细血管和主要脑血管,并证明了本文的方法在生成多样化、新颖和解剖学上合理的血管图方面的普遍性。


1、引言

1.1、血管图

  (1)将血管网络作为一种三维空间图进行研究,提供了一种对循环系统的解剖和生理特性的紧凑表示,但标注大规模的样本是昂贵和繁琐的;
  (2)合成血管图可以增强下游任务的真实数据集,但目前生成真实的血管图仍然相对缺乏研究;

1.2、基于扩散模型的 graph 生成

  (1)扩散模型已用于分子生成、蛋白质设计和材料科学等 graph 生成任务,虽然这些空间图生成任务有一个共同的目标,但它们在描述感兴趣的物理量以及这些量如何相互影响方面存在显著差异;
  (2)在分子生成的情况下,两个相邻的原子 (节点) 是碳,这为共价键的存在提供了强烈的偏差,然而,这种节点类形式的归纳偏置不适用于血管生成;
  (3)现有的空间图生成方法并不容易适用于血管图生成任务;
  (4)根据成像分辨率的不同,血管图可以具有不同的拓扑结构和生理特性;

  本文的目标是开发一个灵活的数据驱动模型,能够生成不同的成像分辨率下的血管图

1.3、本文贡献

  (1)提出一种新的基于扩散去噪的血管图生成方法,这在该领域是第一次;
  (2)通过提出一种定制的方法来解决生成血管图的复杂性,先对节点去噪,然后对边去噪;
  (3)对两个真实血管数据集(一个代表毛细血管,另一个代表大血管)的实验,验证所提出方法能够生成多样化、独特和有效的血管图;


2、相关研究

2.1、血管图生成(Vessel Graph Generation)

  (1)通过氧气浓度来生成动脉树,这样的模拟是昂贵的;
  (2)一些研究尝试生成血管网格(vessel mesh),采用生成对抗网络来合成冠状动脉,利用变分自动编码器生成颅内血管节段,然而,这些生成算法不能在血管图中生成循环,这是许多解剖场景的关键特征;

2.2、基于扩散的图生成(Diffusion-based Graph Generation)

  (1)在分子图生成方面有很多工作,但目前还缺乏基于扩散的血管图生成算法;


3、方法

  本文想要生成空间图,其中节点嵌入在3D空间中,边具有类别属性。解剖学上,节点代表血管网络的分叉点,边缘代表连接它们的血管。

  设 x i ∈ R 3 {x_i \in \mathbb{R}^3} xiR3 表示第 i {i} i 个节点的空间三维坐标, e i j ∈ R c {e_{ij} \in \mathbb{R}^c} eijRc 为第 i {i} i 个节点和第 j {j} j 个节点的边, c {c} c 代表边的类别数,故,一个图(graph)由节点坐标 X ∈ R n × 3 {X \in \mathbb{R}^{n×3}} XRn×3 和 分类边邻接矩阵 E ∈ R n × n × c {E \in \mathbb{R}^{n×n×c}} ERn×n×c 编码,其中 n {n} n 为节点数目。

3.1、两阶段去噪

  本文认为改变节点坐标会使边的类型预测变得困难,一旦所有的节点位置都已知,寻找可信的边配置就会受益于节点坐标的集体归纳偏置。
  因此提出了一种两阶段图生成策略,首先,专注于生成一组似是而非的节点坐标作为点云。在第二阶段,学习边,保持节点坐标固定。

本文方法概览,先生成点再生成边:
在这里插入图片描述

3.1.1、节点去噪

  使用 DDPM 来实现点生成任务,利用噪声模型 q ( X t ∣ X t − 1 ) {q(X^t|X^{t-1})} q(XtXt1) 向点坐标 X 0 {X^0} X0 中添加高斯噪声:

在这里插入图片描述
   α 1 , α 2 , . . . , α T {α^1,α^2,...,α^T} α1,α2,...,αT 为噪声调度, α 1 ≈ 1 {α^1≈1} α11 α T ≈ 0 {α^T≈0} αT0,确保坐标已映射到标准高斯;

  随后使用反向扩散过程对节点坐标进行去噪,训练过程中,选择一个随机的时间点 t {t} t ,并训练模型来预测添加的噪声。设 f γ {f_γ} fγ 表示带有参数 γ {γ} γ 的模型,前向获得 X t : = α ‾ t X 0 + 1 − α ‾ t ϵ {X^t:=\sqrt{\overline α^t}X^0 + \sqrt{1 - \overline α^t}ϵ} Xt:=αt X0+1αt ϵ ,预测噪声 ϵ ^ : = f γ ( X t , t ) {\hat ϵ:=f_γ(X^t,t)} ϵ^:=fγ(Xt,t) ,其中, α ‾ t = ∏ s = 1 t α s {\overline α^t = \prod_{s=1}^t α^s} αt=s=1tαs,通过最小化损失函数来优化 f γ {f_γ} fγ

在这里插入图片描述

3.1.2、边去噪

  一旦节点去噪模型被训练出来,就可以训练边去噪模型了,为此,采用离散扩散模型,从边属性 E 0 {E^0} E0 开始,使用如下加噪模型:
在这里插入图片描述
  其中, Q i j t : = q ( e t = j ∣ e t − 1 = i ) {Q_{ij}^t := q(e^t=j|e^{t-1}=i)} Qijt:=q(et=jet1=i) 是边类别状态空间中的马尔可夫转移概率,对于 m {m} m 的边缘分布,得到的转移矩阵构造为 Q t : = α t I + ( 1 − α t 1 c m ′ ) {Q^t := α^tI+(1-α^t1_cm^\prime)} Qt:=αtI+(1αt1cm),其中 ′ {^\prime} 表示转置操作, α t {α^t} αt 为噪声调度。

  采用带参数 δ {δ} δ 的图 transformer 网络 f δ {f_δ} fδ 来建模边去噪网络;
  血管图可以根据感兴趣的解剖结构具有特定的方向,一个旋转等变图生成模型不能捕获这样的数据集属性,因此,本文的模型不是旋转等变的,以保持数据集的方向属性。
  训练过程中,选择一个随机的时间点 t {t} t ,使用等式(3)获得 E t {E^t} Et,并预测真实边 E ^ 0 : = f δ ( E t , X 0 , t ) {\hat E^0:=f_δ(E^t,X^0,t)} E^0:=fδ(Et,X0,t) ,模型由交叉熵损失训练:
在这里插入图片描述
  除了正确的边类别外,边之间的度在血管图中是至关重要的,因此,引入了一种新的节点度损失。对于给定的节点位置,有多个有效的边配置,模型应该预测一个类似于 ground truth 的度分布,在一个小批次上使用预测和目标节点度分布之间的 KL 散度损失。
  然而,我们需要邻接矩阵来比较节点度,这需要从预测的边邻接似然中离散采样。这个操作将破坏梯度反向传播,为了解决这个问题,使用 Gumbel-softmax (GS) 技巧进行邻接矩阵采样,节点度损失计算为:

在这里插入图片描述
  总的边损失为: L e d g e = L C E + L o {\mathcal{L_{edge}}=\mathcal{L}_{CE}+\mathcal{L_{o}}} Ledge=LCE+Lo,在消融研究中研究了这些损失的贡献。

3.2、图生成

  训练好 f γ {f_γ} fγ f δ {f_δ} fδ 后,就可以采样血管图了,首先,从可能的离散值中抽取节点数 n n n,从 X T ∼ N ( 0 , I ) {X^T \sim \mathcal{N}(0,I)} XTN(0,I),执行去噪步骤,获得先验 p γ ( X T − 1 ∣ X T ) {p_γ(X^{T-1}|X^{T})} pγ(XT1XT) 如下:
在这里插入图片描述
   t > 0 {t>0} t>0 时, ϵ ∼ N ( 0 , I ) {ϵ \sim \mathcal{N}(0,I)} ϵN(0,I),否则 ϵ = 0 {ϵ=0} ϵ=0,当拥有了 X 0 {X^0} X0,执行边去噪步骤,采样 E i j T ∼ m {E_{ij}^T \sim m} EijTm,首先从 E t {E^t} Et 中得到 E ^ 0 {\hat E^0} E^0 ,并计算边类别的后验分布:
在这里插入图片描述
  其中, Q ‾ t : = Q 1 . . . Q t {\overline Q^t := Q^1... Q^t} Qt:=Q1...Qt,⊙为点乘,下一步,从边属性中采样类别值: E i j t − 1 ∼ p δ ( E i j t − 1 ∣ E i j t ) {E_{ij}^{t-1} \sim p_δ(E_{ij}^{t-1}|E_{ij}^{t})} Eijt1pδ(Eijt1Eijt)


4、实验与结果

4.1、数据集

  (1)显微镜下的毛细血管图像,即 VesSAP,选择了24个带标注的 volumes,并从Voreen中提取了图,在原始分辨率的体素空间中使用了 48 × 48 × 48 的 patch 大小图,使用半径信息基于厚度创建了4个边类别,包括一个背景(无边)类;
  (2)Willis 数据集,来自 CROWN (n=300) 和 TopCoW (n=90) 挑战的 390 张 MRA 图像,在 TopCoW 数据集上训练的多类分割工具对 CROWN 数据集进行分割,并使用 Voreen 从分割中提取图,对于 CoW 数据,使用整个 CoW 图作为一个样本,它有14类包含不同动脉标签的边和一个背景类;

4.2、基线

  (1)血管图生成方法目前是明显的空白,选择最新的两种分子图生成方法: Congress 和 MiDi;

4.3、评价指标

  (1)找到一个好的度量来评估节点图生成血管坐标和边信息的方法是困难的,当生成的图准确地表示真实的数据分布时,它们可以提高下游的性能;
  (2)先前的工作使用了生成网格和真实网格之间的半径、总长度和扭曲度的分布差异。沿着这条线,本文采用以下物理参数来计算真实图和生成图之间的KL散度:对于节点,采用三维坐标位置( x , y , z {{x, y, z}} x,y,z)和节点的度( d e g ( V ) deg(\mathcal V) deg(V)),对于边,采用边的数目( ∣ ε ∣ {|\varepsilon|} ε)、边的长度( l ε {l_\varepsilon} lε),两条边之间的角度、三轴边的方向、连接分量 β 0 {\beta_0} β0、循环分量 β 1 {\beta_1} β1

4.4、实施细节

  (1)一块 A-6000 GPU;
  (2)1000 epochs,batch size = 64;
  (3)AdamW 优化器,0.0003 学习率;

模型超参数细节:
在这里插入图片描述

4.5、结果与讨论

与现有方法比较:

在这里插入图片描述

可视化示例,模型能够学习复杂的结构,例如两个数据集的循环和方向特征:
在这里插入图片描述

两个数据集各指标图像比较:
在这里插入图片描述

与 MiDi 模型的可视化比较:
在这里插入图片描述

4.6、消融实验

在 CoW 数据集上消融旋转方差、两阶段去噪模型、度损失:

在这里插入图片描述


  动作要快,姿势要帅~

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

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

相关文章

pg-存储过程

1.概念和优势 2.代码块结构 do end之间俩个$$ declare用来声明定义变量,begin用来运行赋值 notice输出 3.变量使用

java语法(分支,方法,递归);Debug使用

java语法 x 操作符 ->分支&#xff0c;循环&#xff0c;方法 分支 条件的三种if if if…else… public class IfDemo01 { public static void main(String[] args) { int a 3; final int DAY 3; if(a<DAY){ }else if (a<…

c语言中的字符串函数

strstr函数 函数介绍 strstr 用于在一个字符串中查找另一个字符串的首次出现。 我们来看这个函数的参数名字&#xff1a;haysytack&#xff08;干草堆&#xff09;needle&#xff08;针&#xff09;,这个其实就是外国的一句谚语&#xff1a;在干草堆中找一根针&#xff0c;就…

关于机械键盘的购买,该怎么选择?

一.关于轴体的选择。 1.青轴&#xff1a;青轴是机械键盘最有段落感的轴&#xff0c;声音比较大&#xff0c;以吵死人别人著称。有人将其比喻为Cherry的春天&#xff0c;爽快清脆的段落感如春天般舒畅。适合在宿舍、咖啡厅&#xff0c;图书馆使用。&#xff08;我装的 &#xf…

链表的回文结构(链表的中间节点+反转链表)

链表的回文结构 一.链表的中间节点思路1&#xff1a;暴力求解思路2&#xff1a;快慢指针 二.返回倒数第k个节点思路1&#xff1a;暴力求解思路2&#xff1a;快慢指针 三.反转链表思路1&#xff1a;头插法思路2&#xff1a;反转指针的指向 四.链表的回文结构思路1&#xff1a;利…

阿里云搭建vps服务器的过程

最近突发奇想想要搭建一个阿里云的的vps服务器&#xff0c;下面是搭建的过程&#xff1a; 首先&#xff0c;登录阿里云网站&#xff1a; 搜索&#xff0c;esc控制台&#xff1a; 点击创建实例&#xff1a; 选择地区&#xff1a; 选择实例规格&#xff1a; 选择镜像&#x…

【论文速读】| JADE:用于大语言模型的基于语言学的安全评估平台

本次分享论文&#xff1a;JADE : A Linguistics-based Safety Evaluation Platform for Large Language Models 基本信息 原文作者&#xff1a;Mi Zhang, Xudong Pan, Min Yang 作者单位&#xff1a;Whitzard-AI, System Software and Security Lab Fudan University 关键…

Vue3学习体验(一)

搭建工程 使用vue-cli脚手架创建vue3工程 vue create vue3-app-vue-cliVue-cli官网&#xff1a;https://cli.vuejs.org/zh/guide/installation.html 使用vite搭建vue3工程 npm init表示临时的下载vite应用来创建vue3工程&#xff0c;工程名称为vue3-app-vite npm init vit…

Vue3 markRaw的使用

markRaw 作用:将一个对象标记为不可以被转化为代理对象。返回该对象本身。 应用场景: 1.有些值不应被设置成响应式时,例如复杂的第三方类库等 2.当渲染具有不可变数据源的大列表时,跳过响应式转换可以提高性能 3.在动态渲染组件的时候我们就可以使用 markRaw 包裹。markRaw 的…

Redis 7.x 系列【23】哨兵模式

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Redis 版本 7.2.5 源码地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 工作原理2.1 监控2.2 标记下线2.3 哨兵领袖2.4 新的主节点2.5 通知更新 3. …

jvm 07 GC算法,内存池

01 垃圾判断算法 1.1引用计数算法 最简单的垃圾判断算法。在对象中添加一个属性用于标记对象被引用的次数&#xff0c;每多一个其他对象引用&#xff0c;计数1&#xff0c; 当引用失效时&#xff0c;计数-1&#xff0c;如果计数0&#xff0c;表示没有其他对象引用&#xff0c;…

【YOLO系列】快速部署YOLOv5(Windows)

引言 在计算机视觉领域&#xff0c;目标检测是至关重要的任务之一&#xff0c;它涉及识别图像或视频中的对象&#xff0c;并将其分类和定位。近年来&#xff0c;**YOLO&#xff08;You Only Look Once&#xff09;**算法因其速度与精度的平衡而变得非常流行。在这篇博文中&…

【触摸屏】【红十字会学习系统】功能模块:视频 + AI拍照合成

项目背景 提升公众急救能力&#xff1a;确保每个人都能在紧急情况下采取正确的急救措施&#xff0c;减少伤害&#xff0c;挽救生命。培养人道主义价值观&#xff1a;通过教育和培训&#xff0c;传播红十字精神&#xff0c;促进社会对弱势群体的关注与支持。建立社区响应网络&a…

怎么减少pdf格式的内存,怎么减少pdf文件大小

在数字化时代&#xff0c;pdf文件因其格式稳定、兼容性强等特点&#xff0c;成为工作与学习中的常用文档格式。然而&#xff0c;较大的pdf文件往往给存储和传输带来不便。本文将为你详细介绍如何巧妙减小pdf文件内存&#xff0c;助你轻松解决文件传输和存储的烦恼。 让我们来看…

Arduino PID整定

Arduino PID整定 Tuning an Arduino PID Introduction to Tuning an Arduino PID 例如&#xff0c;我们可能想把一箱水加热到华氏 100 度。 我们需要能够在不同的条件下实现这一目标&#xff0c;例如房间的环境&#xff08;周围&#xff09;温度。 此外&#xff0c;我们可能会…

CoreIDRAW标注尺寸箭头怎么修改 CoreIDRAW标注尺寸数字怎么修改

*CorelDraw&#xff1a;数字创意的无限可能** 在数字艺术与设计领域&#xff0c;CorelDraw无疑是一款备受推崇的图形设计软件。它不仅为设计师、艺术家和创意工作者提供了强大的工具集&#xff0c;还以其直观易用的界面和卓越的性能赢得了广泛的赞誉。本文将深入探讨CorelDraw…

【Playwright+Python】系列之元素定位

一、常见元素定位 定位器是 Playwright 自动等待和重试能力的核心部分。简而言之&#xff0c;定位器代表了一种随时在页面上查找元素的方法&#xff0c;以下是常用的内置定位器。 1、按角色定位 按显式和隐式可访问性属性进行定位语法&#xff1a;page.get_by_role&#xff0…

力扣经典题目之->删除有序数组中的重复项讲解 的讲解与实现

一&#xff1a;题目 二&#xff1a;思路讲解 第一步&#xff1a;创建两个下标&#xff0c;一个是第一个元素的&#xff08;start0&#xff09;&#xff0c;一个是第二个元素的&#xff08;end1&#xff09; 第二步&#xff1a; a&#xff1a;end移动&#xff0c;直到遇到不等…

Dify中Jieba类的create()方法实现过程

本文主要介绍Dify中Jieba类的create()方法执行过程&#xff0c;重点是段&#xff08;segment&#xff09;的关键词的生成。 一.create方法流程概述 整个create方法的目的是为了处理一批文本&#xff0c;提取它们的关键词&#xff0c;并更新关键词表&#xff0c;以便于后续的关…

Spark 实现自定义加密

文章目录 Spark 实现自定义加密一、建立加密和解密的自定义函数二、在 Spark 环境下导入对象实现的方法&#xff0c;并在 SparkSession 中注册 UDF 函数三、在SparkSQL中调用函数 Spark 实现自定义加密 一、建立加密和解密的自定义函数 import java.nio.charset.{StandardCha…