zoukankan      html  css  js  c++  java
  • NiftyNet开源平台使用

    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的相关知识学习,欢迎交流!

  • 相关阅读:
    Java中equals和==的区别
    Mybatis中#{}和${}
    AJAX发送带Header的请求
    golang定时任务
    mysql中一条insert语句批量插入多条记录
    golang 从mysql取datetime类型数据
    MySQL 慢查询日志
    mysql日志文件开启及详解:General_log 和 Binlog
    如何在普清的屏上调试CSS样式二倍图背景
    transition、animation在macbook air上图片动画边缘抖动
  • 原文地址:https://www.cnblogs.com/XDU-Lakers/p/10634774.html
Copyright © 2011-2022 走看看