医学图像分割 nnUNetV2 分割自定义2d数据集

news2024/11/25 0:41:55

文章目录

  • 1 环境安装(Pytorch)
    • 1.1 安装conda
    • 1.1 安装pytorch
    • 1.3 安装nnUNet
    • 1.4 安装隐藏层(可选)
  • 2 配置自定义数据集
    • 2.1 数据集格式
    • 2.2 创建需要目录
    • 2.3 数据格式转换
      • 2.3.1 修改路径与数据集名称
      • 2.3.2 修改训练集与测试集
      • 2.3.3 修改掩码所在的文件夹,并修改后缀
  • 3 数据预处理命令与训练命令
    • 3.1 配置环境变量
    • 3.2 对数据集进行预处理
    • 3.3 执行训练
  • 参考

nnUNet: https://github.com/MIC-DKFZ/nnUNet/tree/master

1 环境安装(Pytorch)

1.1 安装conda

使用Anaconda或者 Miniconda,下载https://mirrors.tuna.tsinghua.edu.cn/anaconda/

创建虚拟环境,并激活,这里建议python>=3.9

conda create -n nnUNet python=3.10 -y
conda activate 

1.1 安装pytorch

安装Pytorch: https://pytorch.org/get-started/previous-versions/

根据nvidia版本安装,我的为cu117
在这里插入图片描述

pip install torch==2.0.0+cu117 torchvision==0.15.1+cu117 torchaudio==2.0.1 --index-url https://download.pytorch.org/whl/cu117

1.3 安装nnUNet

参考: https://github.com/MIC-DKFZ/nnUNet/blob/master/documentation/installation_instructions.md

  1. 作标准化基线、开箱即用的分割算法或使用预训练模型进行推理
pip install nnunetv2
  1. 当作框架使用
git clone https://github.com/MIC-DKFZ/nnUNet.git
cd nnUNet
pip install -e .

解释pip install -e .

  • 最后pip install -e .相当于python setup.py,也就是运行上图这个setup.py文件
  • 向终端添加几个新命令。这些命令用于运行整个nnU-Net pipeline。您可以从系统上的任何位置执行它们。所有nnU-Net命令都带有前缀“nnUNet_”,以便于识别

可见setup.py中的命令行格式

entry_points={
    'console_scripts': [
        'nnUNetv2_plan_and_preprocess = nnunetv2.experiment_planning.plan_and_preprocess_entrypoints:plan_and_preprocess_entry',  # api available
        'nnUNetv2_extract_fingerprint = nnunetv2.experiment_planning.plan_and_preprocess_entrypoints:extract_fingerprint_entry',  # api available
        'nnUNetv2_plan_experiment = nnunetv2.experiment_planning.plan_and_preprocess_entrypoints:plan_experiment_entry',  # api available
        'nnUNetv2_preprocess = nnunetv2.experiment_planning.plan_and_preprocess_entrypoints:preprocess_entry',  # api available
        'nnUNetv2_train = nnunetv2.run.run_training:run_training_entry',  # api available
        'nnUNetv2_predict_from_modelfolder = nnunetv2.inference.predict_from_raw_data:predict_entry_point_modelfolder',  # api available
        'nnUNetv2_predict = nnunetv2.inference.predict_from_raw_data:predict_entry_point',  # api available
        'nnUNetv2_convert_old_nnUNet_dataset = nnunetv2.dataset_conversion.convert_raw_dataset_from_old_nnunet_format:convert_entry_point',  # api available
        'nnUNetv2_find_best_configuration = nnunetv2.evaluation.find_best_configuration:find_best_configuration_entry_point',  # api available
        'nnUNetv2_determine_postprocessing = nnunetv2.postprocessing.remove_connected_components:entry_point_determine_postprocessing_folder',  # api available
        'nnUNetv2_apply_postprocessing = nnunetv2.postprocessing.remove_connected_components:entry_point_apply_postprocessing',  # api available
        'nnUNetv2_ensemble = nnunetv2.ensembling.ensemble:entry_point_ensemble_folders',  # api available
        'nnUNetv2_accumulate_crossval_results = nnunetv2.evaluation.find_best_configuration:accumulate_crossval_results_entry_point',  # api available
        'nnUNetv2_plot_overlay_pngs = nnunetv2.utilities.overlay_plots:entry_point_generate_overlay',  # api available
        'nnUNetv2_download_pretrained_model_by_url = nnunetv2.model_sharing.entry_points:download_by_url',  # api available
        'nnUNetv2_install_pretrained_model_from_zip = nnunetv2.model_sharing.entry_points:install_from_zip_entry_point', # api available
        'nnUNetv2_export_model_to_zip = nnunetv2.model_sharing.entry_points:export_pretrained_model_entry', # api available
        'nnUNetv2_move_plans_between_datasets = nnunetv2.experiment_planning.plans_for_pretraining.move_plans_between_datasets:entry_point_move_plans_between_datasets',  # api available
        'nnUNetv2_evaluate_folder = nnunetv2.evaluation.evaluate_predictions:evaluate_folder_entry_point',  # api available
        'nnUNetv2_evaluate_simple = nnunetv2.evaluation.evaluate_predictions:evaluate_simple_entry_point',  # api available
        'nnUNetv2_convert_MSD_dataset = nnunetv2.dataset_conversion.convert_MSD_dataset:entry_point'  # api available
    ],
},

1.4 安装隐藏层(可选)

nnU-net能够给出其生成的网络拓扑图

  1. 使用pip 安装
pip install --upgrade git+https://github.com/FabianIsensee/hiddenlayer.git@more_plotted_details #egg=hiddenlayer
  1. 源码安装

网站: https://github.com/FabianIsensee/hiddenlayer.git

cd nnUNet
git clone https://github.com/FabianIsensee/hiddenlayer.git
cd hiddenlayer
pip install -e .

2 配置自定义数据集

2.1 数据集格式

在这里插入图片描述

  • 这里数据集中的文件均为RGB 三通道图片png图片
  • Image为RGB,Label也为RGB,单通道灰度图会报错,访问三个通道只有一个

2.2 创建需要目录

  • 创建nnUNet_raw 保存格式转换后的数据集
  • 创建nnUNet_result 保存结果文件

在这里插入图片描述

2.3 数据格式转换

修改文件nnunetv2/dataset_conversion/Dataset120_RoadSegmentation.py

2.3.1 修改路径与数据集名称

这个根据数据集存放的位置修改
修改主函数中的参数

Note:

  • 数据集名称dataset_name的格式: Dataset数字_名称, 数字大于10,为数据集的ID
  • 转换后的数据集中图片的名字与转换后的对应

在这里插入图片描述
在这里插入图片描述

2.3.2 修改训练集与测试集

在这里插入图片描述

2.3.3 修改掩码所在的文件夹,并修改后缀

在这里插入图片描述

  • 根据自己的图片命名规则修改即可

之后运行 Dataset120_RoadSegmentation.py

3 数据预处理命令与训练命令

3.1 配置环境变量

vim .bashrc

在最后添加

export nnUNet_raw="/sharefiles1/hanliqiang/GitCode/nnUNet/nnUNet_raw"
export nnUNet_preprocessed="/sharefiles1/hanliqiang/GitCode/nnUNet/nnunetv2/preprocessing"
export nnUNet_results="/sharefiles1/hanliqiang/GitCode/nnUNet/nnUnet_results"

使其生效

source .bashrc

3.2 对数据集进行预处理

  • 将2d格式进行转换
nnUNetv2_plan_and_preprocess -d DATASET_ID --verify_dataset_integrit

DATASET_ID就是数据转换步骤中你设置的datasetname中的id

# nnUNetv2_plan_and_preprocess -d 120 --verify_dataset_integrity
nnUNetv2_plan_and_preprocess -d 110 --verify_dataset_integrity

3.3 执行训练

nnUNetv2_train DATASET_NAME_OR_ID UNET_CONFIGURATION FOLD
  • DATASET_NAME_OR_ID这里为数据集的id
  • 二维图像的话UNET_CONFIGURATION就填2d
  • FOLD代表几折交叉验证,nnUNet中为5

我的

nnUNetv2_train 110 2d 5

未完待续…


参考

nnUNetv2训练二维图像数据集 https://blog.csdn.net/Halloween111/article/details/130928829

nnUNet保姆级使用教程!从环境配置到训练与推理(新手必看)
https://blog.csdn.net/m0_68239345/article/details/128886376

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/613375.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python基础----05-----函数的多返回值、函数的多种参数使用形式、函数作为参数传递、lambda匿名函数

一 函数的多返回值 if __name__ __main__:# 演示使用多个变量,接收多个返回值def test_return ():return 1,hello,Truex,y,z test_return()print(x)print(y)print(z)1helloTrue二 函数的多种参数使用形式 分为以下四种。 2.1 位置参数 位置参数调用函数时根据…

卡尔曼滤波与组合导航原理(五)序贯Kalman滤波

量测维数很高,而且能写成很多分量,每一个分量可以看成一个小量测,可以序贯进行量测更新 优点是:计算快,数字稳定性更好,我们知道矩阵求逆是和维数的三次方成正比,分成小矩阵求逆快(都…

自学大语言模型之Bert和GPT的区别

Bert和GPT的区别 起源 2018 年,Google 首次推出 BERT(Bidirectional Encoder Representations from Transformers)。该模型是在大量文本语料库上结合无监督和监督学习进行训练的。 BERT 的目标是创建一种语言模型,可以理解句子中…

(Day1)配置云开发提供的模板

创建云开发项目 打开微信开发者工具;点击“项目”->“新建项目”;输入项目名称和选择项目所要保存的目录;输入自己的AppID; AppID的获取,需要登陆微信公众平台,并点击“开发管理”->"开发设置…

凸优化系列——凸函数

1.凸函数的定义 凸函数直观上来说,就是两点之间的函数值小于两点连线的函数值 常见凸函数 线性函数既是凸函数,也是凹函数 对于二次函数,如果Q矩阵是半正定矩阵,那么它的二阶导为Q为半正定矩阵,根据凸性判定的二阶条…

SpringCloud微服务架构 --- 高级篇

一、初识Sentinel 1.1、雪崩问题及解决方案 1.1.1、雪崩问题 微服务调用链路中的某个服务故障,引起整个链路中的所有微服务都不可用,这就是雪崩。 1.1.2、解决雪崩问题的常见方式有四种 1.1.2.1、超时处理 设定超时时间,请求超过一定时间…

Swagger原理

最近在基于Swagger进行二次开发, 来对项目的接口进行管理,功能实现了,但是不清楚swagger的工作原理,为了后续能更好利用Swagger来管理接口,而且能借鉴Swagger的原理,将项目中其他信息可视化展示&#xff0c…

什么是测试驱动开发?测试驱动开发有什么优点?

目录 前言 什么是TDD或测试驱动开发? 什么是软件单元测试? 什么是TDD? 测试驱动开发的好处 最后的想法 前言 测试是任何软件开发项目中最重要的步骤之一。如果跳过此过程,则结果可能是灾难性的-对项目和公司而言。但是什么时…

K8s in Action 阅读笔记——【11】Understanding Kubernetes internals

K8s in Action 阅读笔记——【11】Understanding Kubernetes internals 11.1 Understanding the architecture Kubernetes集群分为两个部分: k8s控制平面工作节点 控制平面的组件 构成控制平面的组件有: etcd:etcd是一个分布式的持久化键…

javascrip基础二十八:说说函数节流和防抖?有什么区别?如何实现?

一、是什么 本质上是优化高频率执行代码的一种手段 如:浏览器的 resize、scroll、keypress、mousemove 等事件在触发时,会不断地调用绑定在事件上的回调函数,极大地浪费资源,降低前端性能 为了优化体验,需要对这类事…

类与对象知识总结+构造函数和析构函数 C++程序设计与算法笔记总结(二) 北京大学 郭炜

类和对象 结构化程序设计 C语言使用结构化程序设计: 程序 数据结构 算法 程序由全局变量以及众多相互调用的函数组成。 算法以函数的形式实现,用于对数据结构进行操作。 结构化程序设计的不足: 结构化程序设计中,函数和其所…

《嵌入式系统》知识总结11:STM32串口

串行通信vs并行通信 • 并行:使用8根数据线一次传送一个字节(或使用16根数据线一次传送2个字节,...) • 串行:使用少量数据信号线(8根以下),将数据逐位分时传送 • 并行vs串行&…

路径规划算法:基于秃鹰优化的路径规划算法- 附代码

路径规划算法:基于秃鹰优化的路径规划算法- 附代码 文章目录 路径规划算法:基于秃鹰优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化算法秃鹰…

【三维编辑】Removing Objects From Neural Radiance Fields论文解读

题目:Removing Objects From NeRF 从神经辐射场中移除对象 论文:https://arxiv.org/abs/2212.11966 作者:Silvan Weder,Guillermo Niantic, ETH Zurich, University College London, nianticlabs.github.ionerf-object-removal 文章目录 摘要一、前言二、…

Batch Normalization原理

首先我们提出一个问题,为什么要有Batch Normalization这样神奇的操作?原有的深度神经网络是有什么问题吗? 还真有问题,那就要提到各位炼丹师们的困境,在深度学习中,模型的层数往往非常的巨大,尤…

SpringBootWeb AOP(下)

3. AOP进阶 AOP的基础知识学习完之后,下面我们对AOP当中的各个细节进行详细的学习。主要分为4个部分: 通知类型通知顺序切入点表达式连接点 我们先来学习第一部分通知类型。 3.1 通知类型 在入门程序当中,我们已经使用了一种功能最为强大…

磁盘配额与进阶文件系统管理(二)

逻辑卷管理(Logical Volume Manager) 简介:lvm可以弹性调节filesystem容量;lvm可以整合多个实体partion在一起,使得多个partion看起来像一个磁盘。 LVM基本概念 PV:物理卷 PE:实体范围区块 VG:卷组 …

前端食堂技术周刊第 85 期:5 月浏览器更新、TypeScript 5.1、Rspack 0.2.0、Parcel v2.9.0、Next.js 企业级模板

美味值:🌟🌟🌟🌟🌟 口味:龙井酥 食堂技术周刊仓库地址:https://github.com/Geekhyt/weekly 本期摘要 5 月登陆浏览器的新功能TypeScript 5.1Rspack 0.2.0Parcel v2.9.0Next.js 企…

DINO代码学习笔记(四)

DINO代码学习笔记(一)中已经将输入transformer之前的参数处理给捋了一遍 DINO代码学习笔记(二)中将encoder部分给捋了一遍 DINO代码学习笔记(三)中将decoder部分给捋了一遍,以上将DINO的主体部…

聊一聊Spring Security的那些事

一.什么是Spring Security S[ing Security是一个基于Java EE框架Spring的安全性框架,它提供了身份认证和授权功能,用于保护应用程序中的资源。同时,它也支持许多常见的身份验证机制,并提供了预防常见攻击,如跨站请求伪…