NiftyNet是一款开源的卷积神经网络平台,专门针对医学图像处理分析,上一篇博客已经详细介绍了这个平台,接下来让我简单介绍一下目前我了解到的使用方法。更详细的使用方法、以及配置过程请查看NiftyNet官方文档:https://niftynet.readthedocs.io/en/latest/config_spec.html

目录:

1.NiftyNet层结构介绍

2.运行NiftyNet demo所需的指令格式

3.配置文件部分参数介绍

(1)[Input data source]

(2)[System]

(3)[NETWORK]

(4)[Volume-normalisation]

(5)[TRAINING]

(6)[Validation during training]

(7)[Data augmentation during traning]

(8)[INFERENCE]

(9)[EVALUATION]


1.NiftyNet层结构介绍

NiftyNet有很强的易用性,数据层,应用层,网络层等是完全独立的,

(1)数据层(NiftyNet/niftynet/io),负责医学图像的读取,目前读取器有以下几种:

  • nibabel 支持 .nii医学文件格式
  • simpleith 支持 .dcm和 .mhd格式的医疗图像
  • opencv 支持 .jpg等常见图像读取,读取后通道顺序为BGR
  • skimage 支持 .jpg等常见图像读取
  • pillow 支持 .jpg等常见图像读取,通道顺序为RGB

(2)应用层(NiftyNet/niftynet/application),目前支持的应用有以下几种:

  • 分割 (segmentation_application.py)
  • 分类 (classification_application.py)
  • Autoencoder
  • Gan生成网络
  • 回归

(3)网络层(NiftyNet/niftynet/network),这个里面包含了已经实现的一些网络,resnet,dense_vnet,等,我们可以创建自己的网络结构后放在这个文件夹

 2.运行NiftyNet demo所需的指令格式

(1) 运行以下格式的命令可以使NiftyNet工作:

# command to run from git-cloned NiftyNet source code folde
python net_run.py [train|inference|evaluation] -c <path_to/config.ini> -a <application>
# command to run using pip-installed NiftyNet
net_run [train|inference|evaluation] -c <path_to/config.ini> -a <application>

train:train指令表明想要使用提供的数据更新已存在的网络模型

inference:inference将加载已存在的网络模型根据提供的数据生成响应

-c:后跟配置文件路径(有关配置文件的内容见第3个知识点)

-a:跟将要import的应用种类

(2)NiftyNet的应用层已经自带了5种应用,那么如何运行这些应用呢?

图像分割

# command
net_run -a niftynet.application.segmentation_application.SegmentationApplication -c ...
# alias(别名):
net_segment -c ...

图像回归

# command
net_run -a niftynet.application.regression_application.RegressionApplication -c ...
# alias(别名):
net_regress -c ...

自动编码器

# command
net_run -a niftynet.application.autoencoder_application.AutoencoderApplication -c ...
# alias(别名):
net_autoencoder -c ...

生成对抗网络

# command
net_run -a niftynet.application.gan_application.GANApplication -c ...
# alias(别名):
net_gan -c ...

3.配置文件部分参数介绍

(1)每个网络想要运行必须包含一个config.ini配置文件,用来设置训练/测试所用的全部参数,详细如下:

每个配置文件中必须包含三个sections:

* [SYSTEM]

* [NETWORK]

* [APPLICATION] (自己定义.如[SEGMENTATION],[GAN],等)

如果train行为被需要,则`[TRAINING]`和`[Input data source]`需要被定义,其中`[Input data source]`这个section可以自定义命名

如果inference行为被需要,则需要定义`[INFERENCE]`和`[Input data source]`,其中`[Input data source]`这个section可以自定义命名

以NiftyNet自带的分割脑部Demo为例子,其运行指令和配置文件如下图所示:

运行指令:

net_segment -c C:/niftynet/extensions/highres3dnet_brain_parcellation/highres3dnet_config_eval.ini 

配置文件如下:

[Modality0]
path_to_search = data/OASIS/
filename_contains = nii
spatial_window_size = (96, 96, 96)
interp_order = 0
pixdim = (1.0, 1.0, 1.0)
axcodes = (R, A, S) [SYSTEM]
cuda_devices = ""
model_dir = models/highres3dnet_brain_parcellation [NETWORK]
name = highres3dnet
batch_size = 1
activation_function = relu
volume_padding_size = 10 [Volume-normalisation]
whitening = True
normalisation = True
normalise_foreground_only=True
foreground_type = mean_plus
histogram_ref_file = databrain_std_hist_models_otsu.txt
cutoff = (0.001, 0.999) [INFERENCE]
border = 2
inference_iter = 33000
save_seg_dir = ./parcellation_output
output_interp_order = 0
spatial_window_size = (128, 128, 128) [SEGMENTATION]
image = Modality0
output_prob = False
num_classes = 160

(2)接下来让我们看看每个部分的参数的含义

 [Input data source]

* csv_file:  输入图像路径

* path_to_search: 搜索图像的单个或多个文件,如果有多个用逗号分开

* filename_contains:  匹配文件名的关键词

* filename_not_contains:  排除文件名的关键词

* filename_removefromid:  从文件命中抽取主题id的正则表达式,被匹配的模式将从文件名中移除并生成主题id。

* interp_order:  插值法,当设定采样方法为resize时,需要该参数对图片进行上采样或下采样,0表示最近插值,1表示双线性插值,3表示三次样条插值,默认为3

* pixdim:  如果被指定,输入volum在被喂给网络之前将被重采样成voxel尺寸

* axcodes:  如果被指定,输入volum在被喂给网络之前将被调整为坐标码(axes code)

* spatial_window_size:  输入到网络中的图片尺寸,需指明三个维度,第一个和第二个分别表示图片的长和宽,第三个如果为1表示使用2d卷积,否则使用3d卷积

* loader:  图片读取器,默认值None将尝试所有可得到的读取器

[System]

* cuda_devices:  设置tensorflow的CUDA_VISIBLE_DEVICES变量

* num_threads:  设置训练的预处理线程数

* num_gpus:  设置训练的GPU的数量

* model_dir:  训练模型的保存和加载路径

* dataset_split_file:  文件分配科目到子集

* event_handler:  事件处理器

[NETWORK]

* name:  niftynet/network中的网络类或用户自定义的模块

* activation_function:  网络的激活函数集合

* batch_size:  设置每次迭代图像窗口的数量

* smaller_final_batch_mode:  当batch_size的窗口采样器总数是不可见的时支持最后的batch使用不同的模式

  可选类型有:

  drop:  终止剩余的batch

  pad: 用-1填补最后更小的batch

  dynamic: 直接输出剩余的batch

* reg_type:  可训练的正规化参数的类型

* decay:  正规化的强度,用于预防过拟合

* volume_padding_size:  图片的填补值

* window_sampling:  进入网络的图片的采样方法

  uniform:  输出的图片保持原本大小

  weighted:  对成比例的voxel的采样到累积直方图的似然

  balanced:  每个标签都被采样的可能性同样

  resize:  将进入网络的图片首先resize到spatial_window_size

* queue_length:  NiftyNet会设置两个队列,一个负责从数据集中读取数据并扰乱,另一个从前一个队列中读取batch_size张图片输入网络,这个参数是指第一个队列的长度,最小值为batch_size \* 2.5

* keep_prob: 如果失活被网络支持的话,每个元素存活的可能性

[Volume-normalisation]

* normalisation:  指示直方图标准化是否应该被应用于数据

* whitening:  只是被加载的图片是否应该被增白,如果是,输入I,返回(I - mean(I)) / std(I)

* histogram_ref_file:  标准化参数的文件

* norm_file:  基于直方图的标准化的直方图landmark类型

* cutoff:  下级和上级的基于直方图的标准化的截断

* normalise_foreground_only:  指示一个mask是否需要被基于前景或多样前景进行计算,如设置True,所有的标准化步骤都将被应用于生成前景区

* foreground_type:  生成一个前景mask,并且它只用于前景

* mutimod_foreground_type:  结合前景mask和多模态的策略

  可选类型:

  or:  可得到的masks的合集

  and:  可得到的mask的交集

  all:  mask从每个模态独立计算

[TRAINING]

* optimiser:  计算图梯度优化器的类型,支持adagrade,adam,gradientdescent,momentum,rmsprop,nesterov

* sample_per_volume:每张图的采样次数

* lr:  学习率

* loss_type:  loss函数的类型,支持segmentation,regression,autoencoder,gan

* starting_iter:  设置重新训练模型的迭代次数

* save_every_n:  保存当前模型的频率,0为不保存

* tensorboard_every_n:  计算图中的元素和写到tensorboard上的频率

* max_iter:  最大训练迭代次数

[Validation during training]

* validation_every_n:  每n次迭代运行一次验证迭代

* validation_max_iter:  验证迭代运行的次数

* exclude_fraction_for_validation:  用于验证的数据集的比例

* exclude_fraction_for_inference:  用于推断的数据集的比例

[Data augmentation during traning] 

* rotation_angle:  指示输入的图片旋转一个随机的旋转

* scaling_percentage:  指示一个随机的缩放比例(-50,50)

* random_flipping_axes:  可以翻转增强数据的轴

[INFERENCE]

* spatial_window_size:  指示输入窗口的大小(int array)

* border:  一个用于修剪输出窗口大小的边界值(int tuple),如设置(3,3,3),将把一个(64\*64\*64)的窗口修剪为(58\*58\*58)

* inference_iter:  指定已训练的模型用于推测(integer)

* save_seg_dir:  预测目录的名字

* output_postfix:  向每一个输出文件的名称后添加后缀

* output_interp_order:  网络输出的推断顺序

* dataset_to_infer:  字符串指定计算推理的数据集(‘training’, ‘validation’, ‘inference’)

[EVALUATION]  

* save_csv_dir:  存储输出的csv文件的路径

* evaluations:  要计算的评价指标列表以逗号分隔的字符串表示,每个应用程序可能的评估指标列表可用于回归评估、分段评估和分类评估

* evaluation_units:  描述在分割的情况下应该如何进行评估,foreground:  只对一个标签 ,label:对每一个标签度量,cc:  对每个连接组件度量

参考:https://blog.csdn.net/PKnotnull/article/details/80378824#inference


以上就是本次有关Niftynet的相关知识学习,欢迎交流!

NiftyNet开源平台使用的更多相关文章

  1. NiftyNet开源平台的使用 -- 配置文件

    NiftyNet开源平台的使用    NiftyNet基础架构是使研究人员能够快速开发和分发用于分割.回归.图像生成和表示学习应用程序,或将平台扩展到新的应用程序的深度学习解决方案. 详细介绍请见: ...

  2. Flink 另外一个分布式流式和批量数据处理的开源平台

    Apache Flink是一个分布式流式和批量数据处理的开源平台. Flink的核心是一个流式数据流动引擎,它为数据流上面的分布式计算提供数据分发.通讯.容错.Flink包括几个使用 Flink引擎创 ...

  3. Minikube之Win10单机部署Kubernetes(k8s)自动化容器操作的开源平台

    Minikube之Win10单机部署 Kubernetes(k8s)是自动化容器操作的开源平台,基于这个平台,你可以进行容器部署,资源调度和集群扩容等操作.如果你曾经用过Docker部署容器,那么可以 ...

  4. 超级强大的淘宝开源平台(taobao-code)

    今天发现了一个免费又高级的开源SVN服务器,taobao,阿里云CODE.迫不及待的注册了一个.感觉不错,分享给大家. 先说说我们用过的几个SVN服务器吧: google code oksvn(感觉不 ...

  5. (转)GIS理论知识(三)之ArcGIS平台、SuperMap超图平台和开源平台

    3.1.ArcGIS平台 ArcGIS为美国ESRI公司研发的产品,为用户提供一个可伸缩的,全面的GIS平台.ArcObjects包含了许多的可编程组件,从细粒度的对象(例如单个的几何对象)到粗粒度的 ...

  6. 全球首发—鸿蒙开源平台OpenGL

    目录: 前言 背景 鸿蒙OpenGL-ISRC的结构 OpenGL-ISRC和鸿蒙SDK OpenGL的区别 OpenGL-ISRC的使用 前言 基于安卓平台的OpenGL(androidxref.c ...

  7. 机器学习的开源平台 TensorFlow

    一. google第二代人工智能机器学习开源工具. http://www.tensorfly.cn/ 二. 知乎上关于机器学习的资料问答 https://www.zhihu.com/question/ ...

  8. 淘宝开源平台(taobao-code)使用

    偶尔之下翻到的这个东西,瞬间觉得足以解决自己在开发过程中的版本控制问题.就注册了一个试试.先是在度娘上搜寻“淘code”,进入官网之后直接注册.然后构建自己的项目,上传代码就OK了. 一.搜寻“淘co ...

  9. EasyDarwin开源平台直播架构

    Created with Raphaël 2.1.0ClientClientEasyCMSEasyCMSEasyCameraEasyCameraEasyDarwinEasyDarwin请求设备列表设备 ...

随机推荐

  1. Confluence 6 连接到 Jira 用户管理的建议

    建议 如果下面所有的选项都为是的话: JIRA 应用程序不在高负载下运行. 你仅仅希望在一些不多的应用中跨平台管理你的用户和用户组,例如一个 JIRA 软件服务器和 Confluence 服务器,或者 ...

  2. index_select ,clamp,detach

    1.torch.clamp(input,min,max,out=None)-> Tensor 将input中的元素限制在[min,max]范围内并返回一个Tensor 2.index_selec ...

  3. mysql解决外网不能连接

    mysql解决外网不能连接 Author:SimpleWu 或许有些时候会遇到通过ip地址访问项目的数据库,可是访问失败了. 现在给大家一种解决方案: #进入mysql数据库 USE mysql; # ...

  4. java URI

    URI是对URL的抽象,不仅包括统一资源定位符,还包括统一资源名,在java中URI用java.net.URI类表示,这个类与java.net.URL类的区别表现在: URI类完全有关于资源的标识和U ...

  5. 关于JDBC的总结

    1. Spring JDBC子框架是什么 答:就是一个Spring框架内置的持久层框架.既然是一个持久层框架,作用就是对数据库增删改查!! 2. SpringJDBC是使用声明类操作数据库的? 答:J ...

  6. Git使用五:回到过去

    reset:将仓库里面的内容恢复回暂存区,类似于从仓库里检出文件到暂存区checkout:将暂存区的文件恢复回工作区,即,把暂存区的文件检出到工作区 下面是之前三次提交的内容 三个区域的文件状态: 执 ...

  7. 批量杀掉多个pid文件中记录的pid进程, 并集成到shell脚本中

    head_files=`find ./fmsConf/ -name "*.pid"` for file in $head_files do cat $file | awk rm - ...

  8. oracle数据库无法连接 The Network Adapter could not establish

    Caused by: java.sql.SQLException: Io 异常: The Network Adapter could not establish the connection 这个错误 ...

  9. servlet在地址栏填写参数

    单个参数:以"?"开头+参数名+"="符号+参数值 例如 https://i.cnblogs.com/EditPosts.aspx?opt=1 多个参数:以&q ...

  10. eclipse 中运行 Hadoop2.7.3 map reduce程序 出现错误(null) entry in command string: null chmod 0700

    运行map reduce任务报错: (null) entry in command string: null chmod 0700 解决办法: 在https://download.csdn.net/d ...