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 foldepython 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的相关知识学习,欢迎交流!
转载于:https://www.cnblogs.com/XDU-Lakers/p/10634774.html
NiftyNet开源平台使用相关推荐
- 如何让人工智能更智能?你需要一个开源平台
如何让人工智能更智能?你需要一个开源平台 2020年6月19日,奥斯纳布吕克州下萨克森:Melanie Ploppa老师在教室中为小学生们上课.由于新冠隔离法规的限制,目前各学校必须采取特殊的卫生管理 ...
- OPNFV董事邓辉:网络功能虚拟化开源平台OPNFV介绍
2016年6月1-2日,"2016全球SDNFV技术大会"在北京盛大召开.作为连续举办三届的SDN/NFV技术与产业盛会,本届大会着眼于SDN/NFV的实践应用与部署,从SDN/N ...
- 华为终于放出方舟编译器源代码!开源平台同步亮相,网友:硬核项目
乾明 边策 发自 凹非寺 量子位 报道 | 公众号 QbitAI 华为方舟编译器终于正式开源,源代码放出,兑现了在8月开源的承诺. 代码不在GitHub,而是在自家开源平台上.这也意味着,华为开源平 ...
- DMLC深盟分布式深度机器学习开源平台解析
DMLC深盟分布式深度机器学习开源平台解析 width="22" height="16" src="http://hits.sinajs.cn/ ...
- 前端开发者必备的代码开源平台,记得收藏转发!
作为一个前端开发者,写代码处理BUG是日常,我们可以通过去看一些大神的代码来学习大神的思路.今天小千就来给大家介绍几个国内可以访问的开源代码平台,记得收藏转发哦~ 1.GitHub 这个就不用多说了, ...
- EdgeGallery:聚焦 5 大行业场景,MEC 开源平台将 5G 能力拓展到边缘
文章目录 前言 一.千行百业差异化的业务诉求 1.1.5G 时代业务诉求的变化 1.2.对 5G 边缘计算开源平台的需求 二.MEC 如何实现 1 到 N 飞跃? 2.1.MEC 突破面临的问题有哪些 ...
- 鸿蒙系统发布IT直播,华为开源平台上线:鸿蒙系统、方舟编译器在列
华为近日官方宣布,方舟编译器将于8月31日正式开源.这一颠覆式的技术堪称安卓系统性能革命,将带来巨大的性能提升,官方称操作流畅度提升可高达60%. 8月31日凌晨,华为开源平台网站(HUAWEI Op ...
- 微矿Qlib:业内首个AI量化投资开源平台
近期,微软亚洲研究院正式发布了 AI 量化投资开源平台"微矿 Qlib".这是微软亚洲研究院成立"创新汇"三年以来,在与金融行业的成员企业合作研究的基础之上,打 ...
- 华为开源平台harmonyos,华为开源平台上线 方舟编译器和鸿蒙系统开源
原标题:华为开源平台上线 方舟编译器和鸿蒙系统开源 8月31日凌晨华为开源平台网站HUAWEI OpenSource(https://code.opensource.huaweicloud.com/e ...
最新文章
- 从互联网大厂裸辞 500 天后,我发生哪些变化?
- 【poj3208-Apocalypse Someday】数位DP
- 面 试 细 节 一 点 通
- mysql innodb 并发 插入 慢_InnoDB并发插入,居然使用意向锁?
- 超干货议程发布 | 2021全球分布式云大会 · 上海站 重磅来袭
- JavaScript——创建运动框架
- 新浪微博php7升级实践,PHP7线上system time飙高问题
- mysql my.ini设置root密码_mysql 5.7设置root密码 windows
- C#读写日志文本文件
- WolframTones:用一种新科学谱写一种新音乐
- RS_code 编码和解码
- 自然数简化到素数:黎曼猜想RiemannHypothesis及其解释(公号回复“黎曼猜想”下载PDF经典收藏版彩标资料)
- border属性的三要素
- Python全年天数查询源代码
- DolphinDB Database丨交易回测系列一:技术信号回测
- 如何定义和使用一个 Lambda 表达式
- 中国第四个南极科考站
- 程序员工资倒挂,IT行业薪资潜规则如何规避?
- 常量的定义与使用与变量的定义与使用
- 嵌入式数据库架构特点
热门文章
- python网络编程——IO多路复用之epoll
- 中国大学MOOC 编译原理 第6讲测验
- 【Qt】数据库实战之QSqlTableModel模型
- 【Linux】一步一步学Linux——clear命令(241)
- 【Tools】Windows下Git 2.18安装步骤
- 右键菜单_windows右键菜单管理!
- redis 一般启动几个 哨兵_Redis 5.0.8 主从+哨兵的搭建
- 创建线程时候多参数传递方法及参数改变问题--扫雷辅助(三)
- 逆向入门--第一次的HelloWorld
- C++学习笔记-----operator=函数处理自赋值