在医疗影像领域,生成式模型可以做些什么?用什么平台快速实现?使用MONAI框架进行生成式模型开发

本文主要是介绍在医疗影像领域,生成式模型可以做些什么?用什么平台快速实现?使用MONAI框架进行生成式模型开发,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

生成模型具有巨大的潜力,不仅有助于通过合成数据集安全地共享医疗数据,还可以执行一系列逆向应用,如异常检测、图像到图像翻译、去噪和MRI重建。然而,由于这些模型的复杂性,它们的实现和再现性可能很困难。

对于我这种代码能力薄弱的研究者,需要有医学数据相关的现成代码借鉴参考,才能做实验。这时候,必须要大赞一下MONAI平台啦。提供了各种相关的模型和demo。

MONAI提供了一种通用的方式实现了这些模型,表明它们的结果可以扩展到2D或3D场景,包括具有不同模态(如CT、MRI和X射线数据)和不同解剖区域的医学图像。


以下是MONAI生成模型论文(arXiv:2307.15208)里面的内容,学习它可以了解MONAI在生成模型方面提供了些什么功能。以及在医学图像上,生成模型可以做些什么事!

生成式人工智能(Generative AI)是一系列旨在学习数据集的潜在模式和结构,并生成可能属于原始数据集的新数据点的人工智能技术和模型。尽管高维成像数据的数据分布非常复杂,但如今我们有各种强大的深度生成模型,例如扩散模型自回归 transformer生成对抗网络(GANs)和变分自编码器(VAEs),它们已经证明可以有效地学习和表示这些错综复杂的数据分布。

生成合成数据的能力一直是医学成像中生成模型的主要目标之一,因为它提供了在保护患者隐私的同时分享数据的可行解决方案。数据提供者可以在其自己的数据上训练模型,并以保护隐私的方式分享结果,而不是直接分享患者数据。最近的医学成像研究表明了生成高质量医学图像的前景能力。此外,使用包括合成数据的数据集训练进行下游任务的机器学习模型已经取得了与仅使用真实数据训练的模型相似甚至更优越的性能

除了生成合成数据之外,生成模型在医学成像中还有广泛的其他应用。其中之一是异常检测,生成模型可用于识别医学图像中的异常。这一任务对于诊断疾病和检测潜在健康风险尤为有用。另一个应用是图像到图像的翻译(风格迁移),生成模型可以被训练用于将一种模态的图像转换为另一种。例如,这些模型可以用于将CT扫描转换为MRI扫描,将标签映射转换为MRI图像,或将MRI扫描转换为异常图。此外,生成模型还可以用于图像增强,它们可以学习提高医学图像的质量而不丢失重要的临床信息。这包括图像去噪去除图像伪影增强图像分辨率等。最后,生成模型还可以用于图像重建,包括MRI和CT重建,它们可以从欠采样或噪声数据中重建高质量图像。这对医学成像具有重要意义,能够加快人体成像速度。总的来说,生成模型在医学成像中的潜在应用非常广泛,它们的使用可能会继续增长。

然而,这一领域伴随着挑战,包括各种质量评估指标的使用以及模型的复杂性。这些问题可能会阻碍模型的进展和实施。但是,MONAI Generative Models开源平台可以帮助我们更好的进行生成模型的开发和部署。

为了展示MONAI平台的强大功能,我们讨论了五个实验,在这些实验中我们在医学成像环境中使用了不同的模态(CT、MRI和X射线数据),涵盖了诸如异常检测、图像翻译和超分辨率等主题。我们的平台通过应用于不同的模态和身体部位,在2D和3D场景中展现了其多功能性,为推动医学成像提供了创新的途径。

使用MONAI进行异常检测

我们的平台促进了生成模型在医学影像领域的多种下游任务中的应用。在这里,我们展示了它们在对3D成像数据进行异常检测中的应用。我们采用了使用VQ-VAE + Transformers获取图像似然度的技术,正如[15,39]中所描述的那样。模型在公开可用的3D医学十项全能数据集上进行训练和评估,其中BRATs数据被选为内部分布数据集,而所有其他类别被视为异常分布数据,所有图像都被调整为128x128x128。模型的参数设置与[15]中描述的相同。平台的VQVAETransformerInferer类提供了便利的方法,用于从潜在模型中获取似然度。十项全能数据集中各类别的异常检测的AUC分数如表中所示。

使用MONAI进行图像转换

正如之前提到的,我们旨在支持的另一种应用类型是图像到图像(image-to-image)的任务。这个实验将展示ControlNets在图像翻译任务中的表现。ControlNets是一种神经网络,它显著增强了扩散模型的可控性和定制性。它们类似于轻量级的适配器,可以控制预训练网络的行为。在这个实验中,我们使用在英国生物库2D数据集上训练的模型(实验I)来训练一个ControlNet,能够将2D FLAIR切片转换成扩散模型生成的T1加权图像。为了评估模型的性能,我们使用了合成2D图像和真实T1加权图像之间的平均绝对误差、峰值信噪比和MS-SSIM。我们的模型能够在条件FLAIR图像上以高保真度生成T1加权图像,获得了PSNR=26.2458 ± 1.0092,MAE=0.02632 ± 0.0036和MS-SSIM=0.9526 ± 0.0111的性能。

使用MONAI生成超分辨率图像

生成模型已经在广泛的任务中证明了其高效性,包括超分辨率。这个任务不仅有助于提高低分辨率图像的质量,还可以通过级联模型实现图像生成。级联方法涉及训练一个生成模型来生成低分辨率图像,然后是一个专注于实现期望高分辨率的次要模型。这种方法对于3D模型特别有优势,可以用更小的内存占用进行训练。
低分辨率到高分辨率

在我们的研究中,我们探索了使用Stable Diffusion 2.0 Upscaler方法的生成模型在超分辨率方面的应用。利用英国生物库的3D数据,我们最初在分辨率为2 mm³(80 × 112 × 80体素)的数据集版本上训练了一个潜在扩散模型(Latent Diffusion Model, LDM)。为了进一步增强结果,我们对32 × 32 × 32体素的数据块训练了另一个LDM。

为了整合超分辨率技术,我们将低分辨率图像连接作为扩散模型的输入,并添加了高斯噪声。扩散模型基于噪声水平进行条件设定,从而实现更好的性能。通过迭代地将超分辨率技术应用于生成图像的图块,我们在图像质量和分辨率方面取得了显著的改进。

我们的研究展示了生成模型在超分辨率任务中的有效性,特别是对于3D模型。低分辨率模型经过对下采样的测试集进行评估,得到了FID=0.0009、多样性的MS-SSIM=0.7818以及自编码器重构的MS-SSIM=0.9970。我们使用conditioned upscaler model模型生成了高分辨率的合成图像,噪声水平为1。将它们与高分辨率测试集进行比较,我们观察到FID为0.0024,MS-SSIM为0.9141,这种级联方法在保持更高保真度和类似多样性方面的表现。这一改进得益于本实验网络中参数数量的增加,同时使用相同的计算资源对其进行训练。另一方面,图像生成需要更多时间,使用单阶段方法生成一张图像大约需要22秒,而使用级联方法则需要约13分钟(使用NVIDIA TITAN RTX和200个时间步的DDIMScheduler)。

这些代码可以去 monai 案例代码里面查看学习。

我也是刚学习GAN,diffusion这块。这些demo以后有时间跑了再跟大家分享。其实我也不是第一次接触GAN,去年做了一个异常检测项目(无监督脑肿瘤分割,已发表在CIBM),就用过GAN了,但是打那之后,我就发4再也不碰GAN了(太!难!训!),但是今年又看了一些cycleGAN,starGAN的论文,又心动了💓。

写这篇文章的目的很单纯,看看哪些大佬在做这块,带带弟弟吧。建个裙裙👗专门讨论生成模型,先加V再拉你哦。

文章持续更新,可以关注微公【医学图像人工智能实战营】获取最新动态,一个关注于医学图像处理领域前沿科技的公众号。坚持以实践为主,手把手带你做项目,打比赛,写论文。凡原创文章皆提供理论讲解,实验代码,实验数据。只有实践才能成长的更快,关注我们,一起学习进步~

我是Tina, 我们下篇博客见~

白天工作晚上写文,呕心沥血

觉得写的不错的话最后,求点赞,评论,收藏。或者一键三连
在这里插入图片描述

这篇关于在医疗影像领域,生成式模型可以做些什么?用什么平台快速实现?使用MONAI框架进行生成式模型开发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/376483

相关文章

Rust中的注释使用解读

《Rust中的注释使用解读》本文介绍了Rust中的行注释、块注释和文档注释的使用方法,通过示例展示了如何在实际代码中应用这些注释,以提高代码的可读性和可维护性... 目录Rust 中的注释使用指南1. 行注释示例:行注释2. 块注释示例:块注释3. 文档注释示例:文档注释4. 综合示例总结Rust 中的注释

C# string转unicode字符的实现

《C#string转unicode字符的实现》本文主要介绍了C#string转unicode字符的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录1. 获取字符串中每个字符的 Unicode 值示例代码:输出:2. 将 Unicode 值格式化

python安装whl包并解决依赖关系的实现

《python安装whl包并解决依赖关系的实现》本文主要介绍了python安装whl包并解决依赖关系的实现,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录一、什么是whl文件?二、我们为什么需要使用whl文件来安装python库?三、我们应该去哪儿下

Python脚本实现图片文件批量命名

《Python脚本实现图片文件批量命名》这篇文章主要为大家详细介绍了一个用python第三方库pillow写的批量处理图片命名的脚本,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言源码批量处理图片尺寸脚本源码GUI界面源码打包成.exe可执行文件前言本文介绍一个用python第三方库pi

Java中将异步调用转为同步的五种实现方法

《Java中将异步调用转为同步的五种实现方法》本文介绍了将异步调用转为同步阻塞模式的五种方法:wait/notify、ReentrantLock+Condition、Future、CountDownL... 目录异步与同步的核心区别方法一:使用wait/notify + synchronized代码示例关键

Linux使用cut进行文本提取的操作方法

《Linux使用cut进行文本提取的操作方法》Linux中的cut命令是一个命令行实用程序,用于从文件或标准输入中提取文本行的部分,本文给大家介绍了Linux使用cut进行文本提取的操作方法,文中有详... 目录简介基础语法常用选项范围选择示例用法-f:字段选择-d:分隔符-c:字符选择-b:字节选择--c

Nginx实现动态封禁IP的步骤指南

《Nginx实现动态封禁IP的步骤指南》在日常的生产环境中,网站可能会遭遇恶意请求、DDoS攻击或其他有害的访问行为,为了应对这些情况,动态封禁IP是一项十分重要的安全策略,本篇博客将介绍如何通过NG... 目录1、简述2、实现方式3、使用 fail2ban 动态封禁3.1 安装 fail2ban3.2 配

Java中实现订单超时自动取消功能(最新推荐)

《Java中实现订单超时自动取消功能(最新推荐)》本文介绍了Java中实现订单超时自动取消功能的几种方法,包括定时任务、JDK延迟队列、Redis过期监听、Redisson分布式延迟队列、Rocket... 目录1、定时任务2、JDK延迟队列 DelayQueue(1)定义实现Delayed接口的实体类 (

使用Go语言开发一个命令行文件管理工具

《使用Go语言开发一个命令行文件管理工具》这篇文章主要为大家详细介绍了如何使用Go语言开发一款命令行文件管理工具,支持批量重命名,删除,创建,移动文件,需要的小伙伴可以了解下... 目录一、工具功能一览二、核心代码解析1. 主程序结构2. 批量重命名3. 批量删除4. 创建文件/目录5. 批量移动三、如何安

springboot的调度服务与异步服务使用详解

《springboot的调度服务与异步服务使用详解》本文主要介绍了Java的ScheduledExecutorService接口和SpringBoot中如何使用调度线程池,包括核心参数、创建方式、自定... 目录1.调度服务1.1.JDK之ScheduledExecutorService1.2.spring