NiftyNet开源平台使用

NiftyNet是一款开源的卷积神经网络平台,专门针对医学图像处理分析,下面简单介绍一下我目前了解到的使用方法,进一步学习请查看官方文档

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

 

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

1. nibabel 支持.nii医学文件格式

2. simpleitk 支持.dcm.mhd格式的医疗图像

3. opencv 支持.jpg等常见图像读取,读取后通道顺序为BGR

4. skimage 支持.jpg等常见图像读取

5. pillow 支持.jpg等常见图像读取,通道顺序为RGB

 

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

1. 分割 (segmentation_application.py)

2. 分类 (classification_application.py)

3. Autoencoder

4. Gan生成网络

5. 回归

 

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

 

每个网络要想运行,必须包含一个config.ini配置文件(默认情况下在C:\Users\Administrator\niftynet\extensions),用来设置训练/测试所用的全部参数,详细如下:

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

· [SYSTEM]

· [NETWORK]

· [Application] 自己定义.[SEGMENTATION],[GAN],

如果是训练(train)阶段,还必须有一个[TRAINING] [Input data source] section可以自己命名,比如[ct],还得有一个[label]section

如果是测试(inference)阶段,必须包含 [INFERENCE] section和输入数据section

下面介绍每个section的参数

[Input data source ]

1.path_to_search  数据集路径,如果有多个,用逗号分开

2.filename_contains 数据文件包含的字符串

3.filename_not_contains 数据文件不包含的字符串

以上两个用于限定路径下的数据文件是什么

4.spatial_window_size 输入到网络中的图片尺寸,要指明三个维度,前两个维度表示图片的长和宽,第三个维度如果为1表示用2d卷积,不是1的话就是3d卷积的深度

5.interp_order 插值法,当设定采样方法为resize,需要这个参数对图片上采样或下采样,1表示双线性插值,0表示最近邻插值,3表示三次样条插值,默认为3

6.axcodes 如果设定了这个参数,3D的图片要重新设定到指定的axcodes这个顺序后再进入网络

7 loader  图片读取器,按照上面介绍的内容设定,比如是dcm文件,就指定loader= simpleitk

 

[label]

[Input data source section]类似

[SYSTEM] 

1. cuda_devices

设置 tensorflow CUDA_VISIBLE_DEVICES变量

2. model_dir

预训练模型的位置

[NETWORK]

1.name

NiftyNet/niftynet/network 里面的一个网络,比如,如果设置为niftynet.network.toynet.ToyNet,那么就会利niftynet/network/toynet.py中定义的网络结构(class)

 

2.activation_function

可选参数,设定网络的激活函数

batch_size

设定batch_size

 

3.volume_padding_size

对输入图片设定padding_size,不需要,则为0

 

4.window_sampling,进入网络的image的采样方法 ,包括两种

·1) resize 如果图片大小不一,设定为resize,会让进入网络的图片首先resizespatial_window_size

··2)uniform 输出的图片保持原本的大小,采样器随机选取spatial_window_size尺寸的区域,相当于 random cropping

 

5.queue_length

Niftynet的数据读取方法类似于tensorflow,设置两个队列,一个队列(sample)负责从数据集读取数据并扰乱顺序,另一个队列负责从前一个队列(sample)中读取batch_size张图片输入网络,这个参数就是指第一个队列的长度,为了使扰乱顺序(randomised)更加有意义,这个参数最小值为batch_size * 2.5

[TRAINING]

1.·optimiser  设定优化算法类型,包括 adagrade ,adam,gradientdescent,momentum,rmsprop,nesterov

2.sample_per_volume 每张图片的采样次数,(只有设置采样方法为uniform时才有意义?)

3.lr 学习率

loss_type 损失函数类型,包括常见的损失函数,及医疗领域的损失函数,详见niftynet/layer/loss_*

4.starting_iter    设定为0,把参数随机初始化后开始训练,设定为1,先加载最新的模型,再继续训练

5.save_every_n  每训练多少次,保存一次

6.max_iter  最大迭代次数

[INFERENCE] 

 

1.spatial_window_size :输出图像的尺寸,默认为输入的spatial_window_size大小

2.border 默认为0,当输出图像与输入图像尺寸不一致时,设置其才有意义

3.inference_iter   使用训练了多少次的模型去作预测,设置为-1或者没写这个参数,表示用最新的模型

4.output_interp_order 输出图片的插值方法和前面一样

5.save_seg_dir 输出结果保存路径

 

 

建立一个workflow可以用以下方法:

1.首先cd NiftyNet所在目录,,比如, cd /home/wangqiuli/Documents/NiftyNet

2. python net_run.py [train|inference] -c <path_to/config.ini> -a <application>

注意:

 

Train/inference 二选一,分别表示训练/测试, -c 配置文件路径,-a 将要import的应用种类,

注意,应该写成以下形式user.path.python.module.MyApplication,将从user/path/python/module.py/import MyApplication类

比如:

python net_run.py -a niftynet.application.segmentation_application.SegmentationApplication -c path/config.ini

也可以写成

Python net_segment -c

如果要更改参数,可以直接去config.ini修改,也可以直接命令行修改,比如,只修改网络

Python net_segment.py train -c config.ini  --name my_network_collection.new_net.NewNet

 注意:进行新的训练前,请把models文件夹里面的.csv文件删除

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值