MONAI 专为医学AI开发的开源框架(From Nvidia)

本文深入解析MONAI框架,涵盖其核心组件如Dataset、Transforms、Inferers等,以及Ignite引擎的应用,适合医疗影像AI开发者参考。

MONAI简介:

https://blogs.nvidia.com/blog/2020/04/21/monai-open-source-framework-ai-healthcare/

https://monai.io/

https://medium.com/pytorch/monai-public-alpha-is-now-available-54b79f5532aa

https://github.com/Project-MONAI/MONAI

就先简单按源码这个结构来吧:

1 apps:

dataset.py:这个文件中定义了两个常见的数据集的Dataset类:MedNISTDataset和DecathlonDataset,继承父类Randomizable, CacheDataset,里边分别定义了随机数,和cachedataset的形式。

utils.py:定义了一些通过url下载文件,验证MD5,解压数据集的code

2 config:

deviceconfig.py:获取系统的一些版本配置信息

type_definitions.py:这个我没看太明白,貌似是给两个贯穿MONAI的概念定义了名字和类型,为了统一的使用。

定义了KeysCollection和IndexSelection

3 data:???

1 csv_saver.py
# 保存dict的结果到csv文件,预测结果之类的,可以save单个数据,也可以savebatch,finalize写入文档。有一点存疑,在overwrite为False并且存在文件时,他会先读取已有文件中的信息,保存到要写入disk的dict中,但是我担心他遇到key值相同的情况怎么办???

2 dataloader.py
# 普通的dataloader,继承自pytorch原生的,没发现什么特殊的地方目前

3 dataset.py
# 有几个自定义类以及一些应用函数
# class Dataset,继承自pytorch原生Dataset,看这一层没有什么特殊的,具体的要看transform和读取了
# class PersistentDataset,继承自自定义的Dataset,顾名思义他会将非随机性的transform(这里是读取标准化之类的操作)在第一次时做好,保存到硬盘里,后边就直接读取了,不再每次再做重复操作了。
# 注:这里用到了pathlib模块(相比os.path,nested -> chained,且os太过臃肿,还有一些其他的小区别)
# class CacheDataset,继承自自定义的Dataset,也是先处理一下非random的操作,但是这个是存在内存中的,内存大的服务器就很香了
# class ZipDataset,继承自自定义的Dataset,貌似是处理同时多个dataset的情况,这个我还没具体用过
# class ArrayDataset,继承自Randomizable和pytorch的dataset,多个数据集的话里边也用到了ZipDataset。还有些疑问我没看到他做增广啊???这个和zipdataset到时还需细看一下???

4 decathalon_datalist.py
# 感觉就是几个和十项全能数据及有关的代码

5 grid_dataset.py???
class GridPatchDataset(IterableDataset): 
#我这个阅读代码能力有些减弱了,没看太明白,但是大概意思是,把array分成块,生成出来,好像块儿与块儿之间没有overlap???
IterableDataset就没看太懂,itertool相关的东西还需要巩固。还有多线程的东西掌握也不好

6 nifti_reader.py
class NiftiDataset(Dataset, Randomizable):
# 常规载入Nifiti格式数据的一个Dataset类,里边比较复杂的是用到了monai.transforms 里边的 LoadNifti

7 nifti_saver.py
class NiftiSaver:
# 一个保存数据为Nifti格式的类。支持的输入数据格式可以为单个数据,也可以是一个batch的数据。一般来说保存的都是分割的预测结果。保存时用到了write_nifti函数。

8 nifti_writer.py
def write_nifti(...):
# 考虑了几种情况,是不是需要affine;channel调整的问题;

9 png_saver.py
10 png_writer.py
# 类似于Nifti格式,使用的PIL包来处理

11 synthetic.py
# 。。。我看是生成噪声图 和 一堆重叠圆的test图。。。没发现什么实际意义

12 utils.py ???
# 很多小工具,还没细看???

 

11 synthetic 效果

4 engines: 总的来说是宏观上和训练测试有关的代码.

### 开源医疗影像处理框架概述 在医疗影像处理领域,开源框架为研究人员和开发者提供了丰富的工具和支持。以下是几个重要的开源医疗影像处理框架及其功能描述: #### 1. **MedicalTorch** MedicalTorch 是一个专门为医疗影像处理设计的开源框架,建立在 PyTorch 基础之上[^2]。它集成了多种加载器、预处理器以及经过优化的数据集接口,极大地简化了从数据准备到模型训练的过程。对于希望快速构建原型或深入研究医疗影像问题的研究人员来说,这是一个非常有价值的资源。 #### 2. **ChromegoPACS** ChromegoPACS 是另一个值得关注的开源解决方案,专注于 PACS(Picture Archiving and Communication System)系统的实现[^4]。此框架支持医学影像的存储与检索、多用户并发访问以及远程诊断等功能。它的轻量化设计使其非常适合部署于资源受限环境下的场景,比如边缘设备或者小型医疗机构中。此外,由于采用容器化技术进行管理,因此具备较高的易用性和灵活性。 #### 3. **MedPy** MedPy 提供了一系列专门面向生物医学图像分析任务的功能库[^6]。其中包括但不限于形态学运算符、距离变换函数以及其他一些常用的操作方法。凭借其简洁明了的 API 设计风格,即使是初学者也可以轻松上手完成诸如分割、配准之类的复杂操作。 #### 4. **SimpleITK** SimpleITK 是 ITK (Insight Segmentation and Registration Toolkit) 的简化版封装层之一[^7]。相比原生 C++ 实现而言,Python 接口让使用者无需关心底层细节即可享受高性能计算带来的便利之处;同时保留了几乎所有核心特性不变的前提下降低了入门门槛。 #### 5. **NiftyNet** NiftyNet 构建于 TensorFlow 和 Keras 上面,旨在促进神经网络应用于医学成像方面的进展[^8]。除了常规分类回归之外,还包括了许多高级别的模块如自动编码器自监督学习路径等选项可供选择尝试新的想法变得更为容易起来。 #### 6. **Monai(Medical Open Network for AI)** Monai 是由 NVIDIA 发起的一个跨行业合作项目成果展示案例代表作之一[^9]。该项目致力于打造一个完全开放式的生态系统用来解决整个端到端流程中存在的挑战 – 从小规模实验室级别测试直至大规模临床试验阶段都能满足实际需求。 ```python import torch from medicaltorch.transforms import ElasticTransform, RandomAffine transform = Compose([ElasticTransform(alpha_range=(28.0, 30.0), sigma_range=(3.5, 4.5)), RandomAffine(degrees=(-10, 10))]) data_loader = DataLoader(dataset, batch_size=4, shuffle=True, num_workers=4) for i_batch, sample_batched in enumerate(data_loader): images = transform(sample_batched['image']) ``` --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值