跳转到主要内容

用于开发3D图像处理神经网络模型的框架。

项目描述

显而易见

Build status

显而易见 是一个用于3D图像处理的深度学习框架。它实现了从最近文献中提取的几个3D卷积模型,可用于与任何TensorFlow或Keras模型一起使用的体素数据加载和增强方法,3D数据的损失和度量,以及用于模型训练、评估、预测和迁移学习的简单工具。

无脑器 还提供了用于脑提取、脑分割、脑生成等任务的预训练模型。请参阅 训练 模型 存储库以获取更多信息。

无脑器 项目由NIH RF1MH121885支持,并采用Apache 2.0许可证进行分发。它是在NIH R01 EB020470的支持下开始的。

目录

实现

模型

模型 类型 应用
Highresnet (source) 监督 分割/分类
Unet (source) 监督 分割/分类
Vnet (source) 监督 分割/分类
Meshnet (source) 监督 分割/分类
贝叶斯 Meshnet (source) 贝叶斯监督 分割/分类
贝叶斯 Vnet 贝叶斯监督 分割/分类
半贝叶斯 Vnet 半贝叶斯监督 分割/分类
DCGAN 自监督 生成模型
渐进式 GAN 自监督 生成模型
3D 自动编码器 自监督 知识表示/降维
3D 渐进式自动编码器 自监督 知识表示/降维
3D SimSiam (source) 自监督 孪生表示学习

Dropout和正则化层

伯努利dropout层康克雷迪dropout层高斯dropout分组归一化层自定义填充层

损失

DiceJaccardTverskyELBOWasserstien梯度惩罚

指标

Dice广义DiceJaccardHammingTversky

增强方法

空间变换

中心裁剪空间常数填充随机裁剪调整大小随机翻转(左右)

强度变换

添加高斯噪声最小-最大强度缩放自定义强度缩放强度掩码对比度调整

仿射变换

包括旋转、平移、反射的仿射变换。

指南Jupyter笔记本 Open In Colab

请参考指南目录中的 Jupyter 笔记本以开始使用 Nobrainer,有关指南请参阅 此处。在 Google Colaboratory 中 尝试它们

安装

容器

我们建议使用官方的 Nobrainer Docker 容器,它包含使用该框架所需的所有依赖项。请查看 DockerHub 上的可用镜像 此处

GPU支持

支持 GPU 的 Nobrainer 容器使用 Tensorflow jupyter GPU 容器。请检查容器中安装的 CUDA 版本。容器中不包含 Nvidia 驱动程序。

$ docker pull neuronets/nobrainer:latest-gpu
$ singularity pull docker://neuronets/nobrainer:latest-gpu

仅CPU

此容器可用于所有具有 Docker 或 Singularity 的系统,并且不需要特殊硬件。然而,此容器不应用于模型训练(这将非常慢)。

$ docker pull neuronets/nobrainer:latest-cpu
$ singularity pull docker://neuronets/nobrainer:latest-cpu

pip

Nobrainer 也可以使用 pip 进行安装。

$ pip install nobrainer

使用预训练网络

预训练网络可在 训练模型 存储库中获得。可以使用 nobrainer predict 命令行工具或 Python 进行预测。类似地,可以使用 nobrainer generate 命令行工具或 Python 进行生成。

预测T1加权脑扫描的脑掩码

模型对脑掩码的预测 模型对脑掩码的预测 :第一列是 T1 加权脑扫描,中间是一组训练模型的预测,右侧是二值化的 FreeSurfer 分割。尽管模型是在二值化的 FreeSurfer 分割上训练的,但在显示运动畸变的底部扫描中,模型的性能优于 FreeSurfer。使用 NVIDIA GTX 1080Ti 进行每个脑掩码预测耗时约三秒,在最新的 CPU 上耗时约 70 秒。

在以下示例中,我们将使用一个用于脑提取并记录在 训练模型 中的 3D U-Net。

在基本情况下,我们将 T1w 扫描通过模型进行预测。

# Get sample T1w scan.
wget -nc https://dl.dropbox.com/s/g1vn5p3grifro4d/T1w.nii.gz
docker run --rm -v $PWD:/data neuronets/nobrainer \
  predict \
    --model=/models/neuronets/brainy/0.1.0/brain-extraction-unet-128iso-model.h5 \
    --verbose \
    /data/T1w.nii.gz \
    /data/brainmask.nii.gz

对于期望一个预测区域的二值分割(例如脑提取),我们可以通过移除所有未连接到最大连续标签的预测来减少假阳性。

# Get sample T1w scan.
wget -nc https://dl.dropbox.com/s/g1vn5p3grifro4d/T1w.nii.gz
docker run --rm -v $PWD:/data neuronets/nobrainer \
  predict \
    --model=/models/neuronets/brainy/0.1.0/brain-extraction-unet-128iso-model.h5 \
    --largest-label \
    --verbose \
    /data/T1w.nii.gz \
    /data/brainmask-largestlabel.nii.gz

由于网络是在随机旋转的数据上训练的,它应该对方向无感知。因此,我们可以旋转体积,对其预测,然后在预测中撤销旋转,并将原始体积的预测与它平均。这可以提高整体预测的质量,但至少会加倍处理时间。要启用此功能,请在 nobrainer predict 中使用 --rotate-and-predict 标志。

# Get sample T1w scan.
wget -nc https://dl.dropbox.com/s/g1vn5p3grifro4d/T1w.nii.gz
docker run --rm -v $PWD:/data neuronets/nobrainer \
  predict \
    --model=/models/neuronets/brainy/0.1.0/brain-extraction-unet-128iso-model.h5 \
    --rotate-and-predict \
    --verbose \
    /data/T1w.nii.gz \
    /data/brainmask-withrotation.nii.gz

结合上述内容,我们通常可以通过在 nobrainer predict 中同时使用 --rotate-and-predict--largest-label 来实现最佳的脑提取。

# Get sample T1w scan.
wget -nc https://dl.dropbox.com/s/g1vn5p3grifro4d/T1w.nii.gz
docker run --rm -v $PWD:/data neuronets/nobrainer \
  predict \
    --model=/models/neuronets/brainy/0.1.0/brain-extraction-unet-128iso-model.h5 \
    --largest-label \
    --rotate-and-predict \
    --verbose \
    /data/T1w.nii.gz \
    /data/brainmask-maybebest.nii.gz

生成合成T1加权脑扫描

模型生成的大脑(矢状面) 模型生成的大脑(轴位) 模型生成的大脑(冠面) :从32到256的分辨率开始,T1加权脑MRI扫描的渐进生成(从左到右:323,643,1283,2563)。所有分辨率的脑扫描都使用相同的潜在变量生成。使用NVIDIA TESLA V-100生成2563脑扫描大约需要6毫秒。

在以下示例中,我们将使用为脑图像生成训练的渐进生成对抗网络,并在训练模型中进行说明。

在基本情况下,我们通过模型为给定分辨率生成T1w扫描。我们需要传递包含在训练网络时创建的模型目录(tf.SavedModel)

docker run --rm -v $PWD:/data neuronets/nobrainer \
  generate \
    --model=/models/neuronets/braingen/0.1.0 \
    --output-shape=128 128 128 \
    /data/generated.nii.gz

我们还可以使用相同的潜在变量生成脑图像的多个分辨率,以可视化进程。

# Get sample T1w scan.
docker run --rm -v $PWD:/data neuronets/nobrainer \
  generate \
    --model=/models/neuronets/braingen/0.1.0 \
    --multi-resolution \
    /data/generated.nii.gz

在上面的示例中,多分辨率图像将保存为generated_res_{resolution}.nii.gz

迁移学习

预训练模型可用于迁移学习。为了避免在预训练模型中忘记重要信息,您可以对内核权重应用正则化,并使用低学习率。有关更多信息,请参阅Nobrainer迁移学习指南笔记本。

作为迁移学习的示例,@kaczmarj重新训练了一个脑提取模型,用于标记3D T1加权、对比增强MRI扫描中的脑膜瘤。原始模型是公开的,并在来自健康参与者的10,000个T1加权MRI脑扫描上进行训练。这些扫描都是研究扫描(即非临床),且没有使用任何对比剂。另一方面,脑膜瘤数据集由相对较少的扫描组成,所有扫描都是临床的,并使用了钆作为对比剂。您可以在下面观察对比差异。

Brain extraction model prediction Meningioma extraction model prediction

尽管两个数据集之间存在差异,但迁移学习导致模型比从随机初始化的权重训练的模型要好得多。作为证据,请参阅以下验证集上Dice系数的提琴图。在左图是使用从随机初始化的权重训练的模型获得的预测Dice系数,而在右图是使用迁移学习模型获得的预测Dice系数。一般来说,右边的Dice系数更高,Dice分数的方差更低。总的来说,右边的模型比左边的模型更准确、更健壮。

包布局

  • nobrainer.io:输入/输出方法
  • nobrainer.layers:自定义层,符合Keras API
  • nobrainer.losses:体积分割的损失函数
  • nobrainer.metrics:体积分割的度量
  • nobrainer.models:预定义的Keras模型
  • nobrainer.training:训练实用工具(支持在单个和多个GPU上训练)
  • nobrainer.transform:数据增强的随机刚性变换
  • nobrainer.volume:创建tf.data.Dataset和数据增强实用工具

引用

如果您使用此包,请引用它。

问题或问题

如果您对Nobrainer有任何疑问或在使用框架时遇到任何问题,请提交GitHub问题

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

nobrainer-1.2.1.tar.gz (127.7 kB 查看散列)

上传时间 源代码

构建分发

nobrainer-1.2.1-py3-none-any.whl (127.3 kB 查看散列)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面